scsi: only set SPDK_SCSI_STATUS_GOOD on bdev callback
Previously when IO was sent to bdev, even without callback yet, status for task was set to SPDK_SCSI_STATUS_GOOD. This patch changes it so that it is only set when callback actually comesback from bdev via spdk_bdev_io_get_scsi_status(). Change-Id: I4a36ec345608257123e1036d31540f5f1090a23b Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-on: https://review.gerrithub.io/417708 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Seth Howell <seth.howell5141@gmail.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
0cd2f86977
commit
bcfd6d0fb4
@ -1327,8 +1327,6 @@ spdk_bdev_scsi_read(struct spdk_bdev *bdev, struct spdk_bdev_desc *bdev_desc,
|
||||
}
|
||||
|
||||
task->data_transferred = nbytes;
|
||||
task->status = SPDK_SCSI_STATUS_GOOD;
|
||||
|
||||
return SPDK_SCSI_TASK_PENDING;
|
||||
}
|
||||
|
||||
@ -1379,7 +1377,6 @@ spdk_bdev_scsi_write(struct spdk_bdev *bdev, struct spdk_bdev_desc *bdev_desc,
|
||||
(uint64_t)task->length, nbytes);
|
||||
|
||||
task->data_transferred = task->length;
|
||||
task->status = SPDK_SCSI_STATUS_GOOD;
|
||||
return SPDK_SCSI_TASK_PENDING;
|
||||
}
|
||||
|
||||
@ -1419,7 +1416,6 @@ spdk_bdev_scsi_sync(struct spdk_bdev *bdev, struct spdk_bdev_desc *bdev_desc,
|
||||
return SPDK_SCSI_TASK_COMPLETE;
|
||||
}
|
||||
task->data_transferred = 0;
|
||||
task->status = SPDK_SCSI_STATUS_GOOD;
|
||||
return SPDK_SCSI_TASK_PENDING;
|
||||
}
|
||||
|
||||
@ -1553,6 +1549,8 @@ spdk_bdev_scsi_unmap(struct spdk_bdev *bdev, struct spdk_bdev_desc *bdev_desc,
|
||||
int data_len;
|
||||
int rc;
|
||||
|
||||
assert(task->status == SPDK_SCSI_STATUS_GOOD);
|
||||
|
||||
ctx = calloc(1, sizeof(*ctx));
|
||||
if (!ctx) {
|
||||
spdk_scsi_task_set_status(task, SPDK_SCSI_STATUS_CHECK_CONDITION,
|
||||
@ -1586,12 +1584,6 @@ spdk_bdev_scsi_unmap(struct spdk_bdev *bdev, struct spdk_bdev_desc *bdev_desc,
|
||||
return SPDK_SCSI_TASK_COMPLETE;
|
||||
}
|
||||
|
||||
/* Before we submit commands, set the status to success */
|
||||
spdk_scsi_task_set_status(task, SPDK_SCSI_STATUS_GOOD,
|
||||
SPDK_SCSI_SENSE_NO_SENSE,
|
||||
SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE,
|
||||
SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE);
|
||||
|
||||
for (i = 0; i < desc_count; i++) {
|
||||
struct spdk_scsi_unmap_bdesc *desc;
|
||||
uint64_t offset_blocks;
|
||||
|
@ -678,9 +678,10 @@ lba_range_test(void)
|
||||
task.transfer_len = 1 * 512;
|
||||
rc = spdk_bdev_scsi_execute(&task);
|
||||
CU_ASSERT(rc == SPDK_SCSI_TASK_PENDING);
|
||||
CU_ASSERT(task.status == SPDK_SCSI_STATUS_GOOD);
|
||||
CU_ASSERT(task.status == 0xFF);
|
||||
SPDK_CU_ASSERT_FATAL(!TAILQ_EMPTY(&g_bdev_io_queue));
|
||||
ut_bdev_io_flush();
|
||||
CU_ASSERT(task.status == SPDK_SCSI_STATUS_GOOD);
|
||||
CU_ASSERT(g_scsi_cb_called == 1);
|
||||
g_scsi_cb_called = 0;
|
||||
|
||||
@ -698,11 +699,13 @@ lba_range_test(void)
|
||||
to_be64(&cdb[2], 0); /* LBA */
|
||||
to_be32(&cdb[10], 4); /* transfer length */
|
||||
task.transfer_len = 4 * 512;
|
||||
task.status = 0xFF;
|
||||
rc = spdk_bdev_scsi_execute(&task);
|
||||
CU_ASSERT(rc == SPDK_SCSI_TASK_PENDING);
|
||||
CU_ASSERT(task.status == SPDK_SCSI_STATUS_GOOD);
|
||||
CU_ASSERT(task.status == 0xFF);
|
||||
SPDK_CU_ASSERT_FATAL(!TAILQ_EMPTY(&g_bdev_io_queue));
|
||||
ut_bdev_io_flush();
|
||||
CU_ASSERT(task.status == SPDK_SCSI_STATUS_GOOD);
|
||||
CU_ASSERT(g_scsi_cb_called == 1);
|
||||
g_scsi_cb_called = 0;
|
||||
|
||||
@ -746,9 +749,10 @@ xfer_len_test(void)
|
||||
task.transfer_len = 1 * 512;
|
||||
rc = spdk_bdev_scsi_execute(&task);
|
||||
CU_ASSERT(rc == SPDK_SCSI_TASK_PENDING);
|
||||
CU_ASSERT(task.status == SPDK_SCSI_STATUS_GOOD);
|
||||
CU_ASSERT(task.status == 0xFF);
|
||||
SPDK_CU_ASSERT_FATAL(!TAILQ_EMPTY(&g_bdev_io_queue));
|
||||
ut_bdev_io_flush();
|
||||
CU_ASSERT(task.status == SPDK_SCSI_STATUS_GOOD);
|
||||
CU_ASSERT(g_scsi_cb_called == 1);
|
||||
g_scsi_cb_called = 0;
|
||||
|
||||
@ -756,11 +760,13 @@ xfer_len_test(void)
|
||||
to_be64(&cdb[2], 0); /* LBA */
|
||||
to_be32(&cdb[10], SPDK_WORK_BLOCK_SIZE / 512); /* transfer length */
|
||||
task.transfer_len = SPDK_WORK_BLOCK_SIZE;
|
||||
task.status = 0xFF;
|
||||
rc = spdk_bdev_scsi_execute(&task);
|
||||
CU_ASSERT(rc == SPDK_SCSI_TASK_PENDING);
|
||||
CU_ASSERT(task.status == SPDK_SCSI_STATUS_GOOD);
|
||||
CU_ASSERT(task.status == 0xFF);
|
||||
SPDK_CU_ASSERT_FATAL(!TAILQ_EMPTY(&g_bdev_io_queue));
|
||||
ut_bdev_io_flush();
|
||||
CU_ASSERT(task.status == SPDK_SCSI_STATUS_GOOD);
|
||||
CU_ASSERT(g_scsi_cb_called == 1);
|
||||
g_scsi_cb_called = 0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user