diff --git a/include/spdk/bdev.h b/include/spdk/bdev.h index e4408e7ba..a247360e5 100644 --- a/include/spdk/bdev.h +++ b/include/spdk/bdev.h @@ -232,8 +232,8 @@ struct spdk_bdev_io *spdk_bdev_flush(struct spdk_bdev *bdev, struct spdk_io_chan uint64_t offset, uint64_t length, spdk_bdev_io_completion_cb cb, void *cb_arg); int spdk_bdev_free_io(struct spdk_bdev_io *bdev_io); -int spdk_bdev_reset(struct spdk_bdev *bdev, enum spdk_bdev_reset_type, - spdk_bdev_io_completion_cb cb, void *cb_arg); +int spdk_bdev_reset(struct spdk_bdev *bdev, struct spdk_io_channel *ch, + enum spdk_bdev_reset_type, spdk_bdev_io_completion_cb cb, void *cb_arg); struct spdk_io_channel *spdk_bdev_get_io_channel(struct spdk_bdev *bdev, uint32_t priority); /** diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 2768d709f..d3d6f6ca5 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -830,10 +830,12 @@ spdk_bdev_flush(struct spdk_bdev *bdev, struct spdk_io_channel *ch, } int -spdk_bdev_reset(struct spdk_bdev *bdev, enum spdk_bdev_reset_type reset_type, +spdk_bdev_reset(struct spdk_bdev *bdev, struct spdk_io_channel *ch, + enum spdk_bdev_reset_type reset_type, spdk_bdev_io_completion_cb cb, void *cb_arg) { struct spdk_bdev_io *bdev_io; + struct spdk_bdev_channel *channel = spdk_io_channel_get_ctx(ch); int rc; assert(bdev->status != SPDK_BDEV_STATUS_UNCLAIMED); @@ -843,6 +845,7 @@ spdk_bdev_reset(struct spdk_bdev *bdev, enum spdk_bdev_reset_type reset_type, return -1; } + bdev_io->ch = channel; bdev_io->type = SPDK_BDEV_IO_TYPE_RESET; bdev_io->u.reset.type = reset_type; spdk_bdev_io_init(bdev_io, bdev, cb_arg, cb); diff --git a/lib/scsi/lun.c b/lib/scsi/lun.c index 5245029c5..51179828a 100644 --- a/lib/scsi/lun.c +++ b/lib/scsi/lun.c @@ -104,6 +104,8 @@ spdk_scsi_lun_task_mgmt_execute(struct spdk_scsi_task *task, return -1; } + task->ch = task->lun->io_channel; + switch (func) { case SPDK_SCSI_TASK_FUNC_ABORT_TASK: task->response = SPDK_SCSI_TASK_MGMT_RESP_REJECT_FUNC_NOT_SUPPORTED; diff --git a/lib/scsi/scsi_bdev.c b/lib/scsi/scsi_bdev.c index 430818583..dbf3aa1eb 100644 --- a/lib/scsi/scsi_bdev.c +++ b/lib/scsi/scsi_bdev.c @@ -1947,6 +1947,6 @@ spdk_bdev_scsi_execute(struct spdk_bdev *bdev, struct spdk_scsi_task *task) int spdk_bdev_scsi_reset(struct spdk_bdev *bdev, struct spdk_scsi_task *task) { - return spdk_bdev_reset(bdev, SPDK_BDEV_RESET_SOFT, + return spdk_bdev_reset(bdev, task->ch, SPDK_BDEV_RESET_SOFT, spdk_bdev_scsi_task_complete_mgmt, task); } diff --git a/test/lib/bdev/bdevio/bdevio.c b/test/lib/bdev/bdevio/bdevio.c index bb3cdc16c..60b3bcc03 100644 --- a/test/lib/bdev/bdevio/bdevio.c +++ b/test/lib/bdev/bdevio/bdevio.c @@ -660,7 +660,7 @@ __blockdev_reset(void *arg1, void *arg2) struct io_target *target = req->target; int rc; - rc = spdk_bdev_reset(target->bdev, *reset_type, quick_test_complete, NULL); + rc = spdk_bdev_reset(target->bdev, target->ch, *reset_type, quick_test_complete, NULL); if (rc < 0) { g_completion_success = false; wake_ut_thread(); diff --git a/test/lib/bdev/bdevperf/bdevperf.c b/test/lib/bdev/bdevperf/bdevperf.c index 86582a630..412ae7782 100644 --- a/test/lib/bdev/bdevperf/bdevperf.c +++ b/test/lib/bdev/bdevperf/bdevperf.c @@ -394,7 +394,7 @@ reset_target(void *arg) /* Do reset. */ rte_mempool_get(task_pool, (void **)&task); task->target = target; - spdk_bdev_reset(target->bdev, SPDK_BDEV_RESET_SOFT, + spdk_bdev_reset(target->bdev, target->ch, SPDK_BDEV_RESET_SOFT, reset_cb, task); } diff --git a/test/lib/scsi/scsi_bdev/scsi_bdev_ut.c b/test/lib/scsi/scsi_bdev/scsi_bdev_ut.c index 3484aeab2..a7c6a1629 100644 --- a/test/lib/scsi/scsi_bdev/scsi_bdev_ut.c +++ b/test/lib/scsi/scsi_bdev/scsi_bdev_ut.c @@ -224,7 +224,8 @@ spdk_bdev_unmap(struct spdk_bdev *bdev, struct spdk_io_channel *ch, } int -spdk_bdev_reset(struct spdk_bdev *bdev, enum spdk_bdev_reset_type reset_type, +spdk_bdev_reset(struct spdk_bdev *bdev, struct spdk_io_channel *ch, + enum spdk_bdev_reset_type reset_type, spdk_bdev_io_completion_cb cb, void *cb_arg) { return 0;