scsi: inline LBA check into readwrite function

spdk_bdev_scsi_read_write_lba_check() was only called from one spot, and
moving its code directly into the caller makes the code simpler to read
and more consistent, since now all of the sense code setup is directly
in spdk_bdev_scsi_readwrite() rather than being split across two
functions.

No functional change.

Change-Id: Ic6ee21b06c721a949579817f0339a4b047ffb2cc
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/393699
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
Daniel Verkamp 2018-01-04 13:39:26 -07:00 committed by Jim Harris
parent 9c47ef85ed
commit a06daa1bfa

View File

@ -1293,23 +1293,6 @@ spdk_bdev_scsi_task_complete_mgmt(struct spdk_bdev_io *bdev_io, bool success,
spdk_scsi_lun_complete_mgmt_task(task->lun, task);
}
static int
spdk_bdev_scsi_read_write_lba_check(struct spdk_scsi_task *task,
uint64_t lba, uint64_t cmd_num_blocks,
uint64_t bdev_num_blocks)
{
if (bdev_num_blocks <= lba || bdev_num_blocks - lba < cmd_num_blocks) {
SPDK_DEBUGLOG(SPDK_LOG_SCSI, "end of media\n");
spdk_scsi_task_set_status(task, SPDK_SCSI_STATUS_CHECK_CONDITION,
SPDK_SCSI_SENSE_ILLEGAL_REQUEST,
SPDK_SCSI_ASC_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE,
SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE);
return -1;
}
return 0;
}
static int
spdk_bdev_scsi_read(struct spdk_bdev *bdev,
struct spdk_scsi_task *task, uint64_t lba,
@ -1442,6 +1425,7 @@ spdk_bdev_scsi_readwrite(struct spdk_bdev *bdev,
struct spdk_scsi_task *task,
uint64_t lba, uint32_t xfer_len, bool is_read)
{
uint64_t bdev_num_blocks;
uint32_t max_xfer_len;
task->data_transferred = 0;
@ -1456,9 +1440,13 @@ spdk_bdev_scsi_readwrite(struct spdk_bdev *bdev,
return SPDK_SCSI_TASK_COMPLETE;
}
if (spdk_bdev_scsi_read_write_lba_check(task, lba,
xfer_len, spdk_bdev_get_num_blocks(bdev)) < 0) {
/* spdk_bdev_scsi_read_write_lba_check() already set the correct sense code */
bdev_num_blocks = spdk_bdev_get_num_blocks(bdev);
if (bdev_num_blocks <= lba || bdev_num_blocks - lba < xfer_len) {
SPDK_DEBUGLOG(SPDK_LOG_SCSI, "end of media\n");
spdk_scsi_task_set_status(task, SPDK_SCSI_STATUS_CHECK_CONDITION,
SPDK_SCSI_SENSE_ILLEGAL_REQUEST,
SPDK_SCSI_ASC_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE,
SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE);
return SPDK_SCSI_TASK_COMPLETE;
}