diff --git a/lib/scsi/scsi_bdev.c b/lib/scsi/scsi_bdev.c index e4488dd9c..2c9c05cef 100644 --- a/lib/scsi/scsi_bdev.c +++ b/lib/scsi/scsi_bdev.c @@ -1166,9 +1166,25 @@ bdev_scsi_task_complete_cmd(struct spdk_bdev_io *bdev_io, bool success, struct spdk_scsi_task *task = cb_arg; int sc, sk, asc, ascq; + spdk_bdev_io_get_scsi_status(bdev_io, &sc, &sk, &asc, &ascq); + + spdk_bdev_free_io(bdev_io); + + spdk_scsi_task_set_status(task, sc, sk, asc, ascq); + spdk_scsi_lun_complete_task(task->lun, task); +} + +static void +bdev_scsi_read_task_complete_cmd(struct spdk_bdev_io *bdev_io, bool success, + void *cb_arg) +{ + struct spdk_scsi_task *task = cb_arg; + int sc, sk, asc, ascq; + task->bdev_io = bdev_io; spdk_bdev_io_get_scsi_status(bdev_io, &sc, &sk, &asc, &ascq); + spdk_scsi_task_set_status(task, sc, sk, asc, ascq); spdk_scsi_lun_complete_task(task->lun, task); } @@ -1354,7 +1370,7 @@ bdev_scsi_readwrite(struct spdk_scsi_task *task, if (is_read) { rc = spdk_bdev_readv_blocks(bdev_desc, bdev_ch, task->iovs, task->iovcnt, offset_blocks, num_blocks, - bdev_scsi_task_complete_cmd, task); + bdev_scsi_read_task_complete_cmd, task); } else { rc = spdk_bdev_writev_blocks(bdev_desc, bdev_ch, task->iovs, task->iovcnt, offset_blocks, num_blocks, diff --git a/test/unit/lib/scsi/scsi_bdev.c/scsi_bdev_ut.c b/test/unit/lib/scsi/scsi_bdev.c/scsi_bdev_ut.c index 8c7c1018c..84310375a 100644 --- a/test/unit/lib/scsi/scsi_bdev.c/scsi_bdev_ut.c +++ b/test/unit/lib/scsi/scsi_bdev.c/scsi_bdev_ut.c @@ -60,11 +60,7 @@ spdk_bdev_io_type_supported(struct spdk_bdev *bdev, enum spdk_bdev_io_type io_ty return false; } -void -spdk_bdev_free_io(struct spdk_bdev_io *bdev_io) -{ - CU_ASSERT(0); -} +DEFINE_STUB_V(spdk_bdev_free_io, (struct spdk_bdev_io *bdev_io)); DEFINE_STUB(spdk_bdev_get_name, const char *, (const struct spdk_bdev *bdev), "test");