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:
parent
9c47ef85ed
commit
a06daa1bfa
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user