diff --git a/lib/iscsi/iscsi.c b/lib/iscsi/iscsi.c index 2e3fdf57d..eb8a61776 100644 --- a/lib/iscsi/iscsi.c +++ b/lib/iscsi/iscsi.c @@ -3256,7 +3256,6 @@ spdk_iscsi_op_task(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu) return SPDK_ISCSI_CONNECTION_FATAL; } - task->scsi.type = SPDK_SCSI_TASK_TYPE_MANAGE; spdk_iscsi_task_associate_pdu(task, pdu); task->scsi.target_port = conn->target_port; task->scsi.initiator_port = conn->initiator_port; diff --git a/lib/iscsi/tgt_node.c b/lib/iscsi/tgt_node.c index 93bb3fd1b..18e7ed75b 100644 --- a/lib/iscsi/tgt_node.c +++ b/lib/iscsi/tgt_node.c @@ -1064,7 +1064,6 @@ spdk_iscsi_tgt_node_cleanup_luns(struct spdk_iscsi_conn *conn, return -1; } - task->scsi.type = SPDK_SCSI_TASK_TYPE_MANAGE; task->scsi.target_port = conn->target_port; task->scsi.initiator_port = conn->initiator_port; task->scsi.lun = lun; diff --git a/lib/scsi/dev.c b/lib/scsi/dev.c index 012217694..942e14c71 100644 --- a/lib/scsi/dev.c +++ b/lib/scsi/dev.c @@ -205,6 +205,7 @@ spdk_scsi_dev_queue_mgmt_task(struct spdk_scsi_dev *dev, { assert(task != NULL); + task->type = SPDK_SCSI_TASK_TYPE_MANAGE; spdk_scsi_lun_task_mgmt_execute(task); } @@ -214,6 +215,7 @@ spdk_scsi_dev_queue_task(struct spdk_scsi_dev *dev, { assert(task != NULL); + task->type = SPDK_SCSI_TASK_TYPE_CMD; if (spdk_scsi_lun_append_task(task->lun, task) == 0) { /* ready to execute, disk is valid for LUN access */ spdk_scsi_lun_execute_tasks(task->lun); diff --git a/lib/scsi/lun.c b/lib/scsi/lun.c index dd72e4e66..8e77da82d 100644 --- a/lib/scsi/lun.c +++ b/lib/scsi/lun.c @@ -43,14 +43,18 @@ void spdk_scsi_lun_complete_task(struct spdk_scsi_lun *lun, struct spdk_scsi_task *task) { if (lun) { - if (task->type == SPDK_SCSI_TASK_TYPE_CMD) { - TAILQ_REMOVE(&lun->tasks, task, scsi_link); - } + TAILQ_REMOVE(&lun->tasks, task, scsi_link); spdk_trace_record(TRACE_SCSI_TASK_DONE, lun->dev->id, 0, (uintptr_t)task, 0); } spdk_event_call(task->cb_event); } +void +spdk_scsi_lun_complete_mgmt_task(struct spdk_scsi_lun *lun, struct spdk_scsi_task *task) +{ + spdk_event_call(task->cb_event); +} + void spdk_scsi_lun_clear_all(struct spdk_scsi_lun *lun) { @@ -121,7 +125,7 @@ spdk_scsi_lun_reset(struct spdk_scsi_task *mtask, struct spdk_scsi_lun *lun) if (!lun) { /* LUN does not exist */ mtask->response = SPDK_SCSI_TASK_MGMT_RESP_INVALID_LUN; - spdk_scsi_lun_complete_task(NULL, mtask); + spdk_scsi_lun_complete_mgmt_task(NULL, mtask); return -1; } @@ -177,7 +181,7 @@ spdk_scsi_lun_task_mgmt_execute(struct spdk_scsi_task *task) break; } - spdk_scsi_lun_complete_task(task->lun, task); + spdk_scsi_lun_complete_mgmt_task(task->lun, task); return rc; } diff --git a/lib/scsi/scsi_bdev.c b/lib/scsi/scsi_bdev.c index 6ea453ee7..15998fa9e 100644 --- a/lib/scsi/scsi_bdev.c +++ b/lib/scsi/scsi_bdev.c @@ -1235,22 +1235,28 @@ spdk_bdev_scsi_mode_select_page(struct spdk_bdev *bdev, } static void -spdk_bdev_scsi_task_complete(struct spdk_bdev_io *bdev_io, enum spdk_bdev_io_status status, - void *cb_arg) +spdk_bdev_scsi_task_complete_cmd(struct spdk_bdev_io *bdev_io, enum spdk_bdev_io_status status, + void *cb_arg) { - struct spdk_scsi_task *task = cb_arg; + struct spdk_scsi_task *task = cb_arg; + int sc, sk, asc, ascq; - if (task->type == SPDK_SCSI_TASK_TYPE_CMD) { - int sc, sk, asc, ascq; + 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); +} - spdk_bdev_io_get_scsi_status(bdev_io, &sc, &sk, &asc, &ascq); - spdk_scsi_task_set_status(task, sc, sk, asc, ascq); - } else if (task->type == SPDK_SCSI_TASK_TYPE_MANAGE) { - if (status == SPDK_BDEV_IO_STATUS_SUCCESS) - task->response = SPDK_SCSI_TASK_MGMT_RESP_SUCCESS; +static void +spdk_bdev_scsi_task_complete_mgmt(struct spdk_bdev_io *bdev_io, enum spdk_bdev_io_status status, + void *cb_arg) +{ + struct spdk_scsi_task *task = cb_arg; + + if (status == SPDK_BDEV_IO_STATUS_SUCCESS) { + task->response = SPDK_SCSI_TASK_MGMT_RESP_SUCCESS; } - spdk_scsi_lun_complete_task(task->lun, task); + spdk_scsi_lun_complete_mgmt_task(task->lun, task); } static int @@ -1311,7 +1317,7 @@ spdk_bdev_scsi_read(struct spdk_bdev *bdev, task->blockdev_io = spdk_bdev_readv(bdev, task->ch, task->iovs, task->iovcnt, offset, nbytes, - spdk_bdev_scsi_task_complete, task); + spdk_bdev_scsi_task_complete_cmd, task); if (!task->blockdev_io) { SPDK_ERRLOG("spdk_bdev_readv() failed\n"); spdk_scsi_task_set_status(task, SPDK_SCSI_STATUS_CHECK_CONDITION, @@ -1366,7 +1372,7 @@ spdk_bdev_scsi_write(struct spdk_bdev *bdev, offset += task->offset; task->blockdev_io = spdk_bdev_writev(bdev, task->ch, task->iovs, task->iovcnt, offset, task->length, - spdk_bdev_scsi_task_complete, + spdk_bdev_scsi_task_complete_cmd, task); if (!task->blockdev_io) { @@ -1420,7 +1426,7 @@ spdk_bdev_scsi_sync(struct spdk_bdev *bdev, struct spdk_scsi_task *task, } task->blockdev_io = spdk_bdev_flush(bdev, task->ch, offset, nbytes, - spdk_bdev_scsi_task_complete, task); + spdk_bdev_scsi_task_complete_cmd, task); if (!task->blockdev_io) { SPDK_ERRLOG("spdk_bdev_flush() failed\n"); @@ -1521,7 +1527,7 @@ spdk_bdev_scsi_unmap(struct spdk_bdev *bdev, } task->blockdev_io = spdk_bdev_unmap(bdev, task->ch, desc, - bdesc_count, spdk_bdev_scsi_task_complete, + bdesc_count, spdk_bdev_scsi_task_complete_cmd, task); if (!task->blockdev_io) { @@ -1942,5 +1948,5 @@ int spdk_bdev_scsi_reset(struct spdk_bdev *bdev, struct spdk_scsi_task *task) { return spdk_bdev_reset(bdev, SPDK_BDEV_RESET_SOFT, - spdk_bdev_scsi_task_complete, task); + spdk_bdev_scsi_task_complete_mgmt, task); } diff --git a/lib/scsi/scsi_internal.h b/lib/scsi/scsi_internal.h index f4e2f2c1f..7f6fb2c4a 100644 --- a/lib/scsi/scsi_internal.h +++ b/lib/scsi/scsi_internal.h @@ -130,6 +130,7 @@ int spdk_scsi_lun_append_task(struct spdk_scsi_lun *lun, struct spdk_scsi_task * void spdk_scsi_lun_execute_tasks(struct spdk_scsi_lun *lun); int spdk_scsi_lun_task_mgmt_execute(struct spdk_scsi_task *task); void spdk_scsi_lun_complete_task(struct spdk_scsi_lun *lun, struct spdk_scsi_task *task); +void spdk_scsi_lun_complete_mgmt_task(struct spdk_scsi_lun *lun, struct spdk_scsi_task *task); int spdk_scsi_lun_claim(struct spdk_scsi_lun *lun); int spdk_scsi_lun_unclaim(struct spdk_scsi_lun *lun); int spdk_scsi_lun_delete(const char *lun_name); diff --git a/lib/scsi/task.c b/lib/scsi/task.c index 7ef8fa340..ffec1e9fb 100644 --- a/lib/scsi/task.c +++ b/lib/scsi/task.c @@ -84,7 +84,6 @@ spdk_scsi_task_construct(struct spdk_scsi_task *task, if (parent != NULL) { parent->ref++; task->parent = parent; - task->type = parent->type; task->dxfer_dir = parent->dxfer_dir; task->transfer_len = parent->transfer_len; task->lun = parent->lun; diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c index 5ad318475..03e5b311c 100644 --- a/lib/vhost/vhost.c +++ b/lib/vhost/vhost.c @@ -475,7 +475,6 @@ process_ctrl_request(struct spdk_vhost_scsi_ctrlr *vdev, struct rte_vhost_vring case VIRTIO_SCSI_T_TMF_LOGICAL_UNIT_RESET: /* Handle LUN reset */ SPDK_TRACELOG(SPDK_TRACE_VHOST_QUEUE, "LUN reset\n"); - task->scsi.type = SPDK_SCSI_TASK_TYPE_MANAGE; task->scsi.function = SPDK_SCSI_TASK_FUNC_LUN_RESET; task->scsi.lun = get_scsi_lun(task->scsi_dev, ctrl_req->lun); diff --git a/test/lib/scsi/lun/lun_ut.c b/test/lib/scsi/lun/lun_ut.c index 78f650e78..7d07ea5b6 100644 --- a/test/lib/scsi/lun/lun_ut.c +++ b/test/lib/scsi/lun/lun_ut.c @@ -271,7 +271,6 @@ lun_task_mgmt_execute_abort_task_not_supported(void) lun->dev = &dev; mgmt_task = spdk_get_task(NULL); - mgmt_task->type = SPDK_SCSI_TASK_TYPE_MANAGE; mgmt_task->function = SPDK_SCSI_TASK_FUNC_ABORT_TASK; mgmt_task->lun = lun; mgmt_task->initiator_port = &initiator_port; @@ -342,7 +341,6 @@ lun_task_mgmt_execute_abort_task_all_not_supported(void) lun->dev = &dev; mgmt_task = spdk_get_task(NULL); - mgmt_task->type = SPDK_SCSI_TASK_TYPE_MANAGE; mgmt_task->function = SPDK_SCSI_TASK_FUNC_ABORT_TASK_SET; mgmt_task->lun = lun; mgmt_task->initiator_port = &initiator_port; @@ -384,7 +382,6 @@ lun_task_mgmt_execute_lun_reset_failure(void) int rc; mgmt_task = spdk_get_task(NULL); - mgmt_task->type = SPDK_SCSI_TASK_TYPE_MANAGE; mgmt_task->lun = NULL; mgmt_task->function = SPDK_SCSI_TASK_FUNC_LUN_RESET; @@ -410,7 +407,6 @@ lun_task_mgmt_execute_lun_reset(void) lun->dev = &dev; mgmt_task = spdk_get_task(NULL); - mgmt_task->type = SPDK_SCSI_TASK_TYPE_MANAGE; mgmt_task->lun = lun; mgmt_task->function = SPDK_SCSI_TASK_FUNC_LUN_RESET; @@ -438,7 +434,6 @@ lun_task_mgmt_execute_invalid_case(void) lun->dev = &dev; mgmt_task = spdk_get_task(NULL); - mgmt_task->type = SPDK_SCSI_TASK_TYPE_MANAGE; /* Pass an invalid value to the switch statement */ mgmt_task->function = 5; diff --git a/test/lib/scsi/scsi_bdev/scsi_bdev_ut.c b/test/lib/scsi/scsi_bdev/scsi_bdev_ut.c index 79dbc6fed..3484aeab2 100644 --- a/test/lib/scsi/scsi_bdev/scsi_bdev_ut.c +++ b/test/lib/scsi/scsi_bdev/scsi_bdev_ut.c @@ -131,6 +131,11 @@ spdk_scsi_lun_complete_task(struct spdk_scsi_lun *lun, struct spdk_scsi_task *ta { } +void +spdk_scsi_lun_complete_mgmt_task(struct spdk_scsi_lun *lun, struct spdk_scsi_task *task) +{ +} + static void spdk_put_task(struct spdk_scsi_task *task) { @@ -553,9 +558,8 @@ task_complete_test(void) TAILQ_INSERT_TAIL(&lun.tasks, &task, scsi_link); task.lun = &lun; - task.type = SPDK_SCSI_TASK_TYPE_CMD; bdev_io.status = SPDK_BDEV_IO_STATUS_SUCCESS; - spdk_bdev_scsi_task_complete(&bdev_io, bdev_io.status, &task); + spdk_bdev_scsi_task_complete_cmd(&bdev_io, bdev_io.status, &task); CU_ASSERT_EQUAL(task.status, SPDK_SCSI_STATUS_GOOD); bdev_io.status = SPDK_BDEV_IO_STATUS_SCSI_ERROR; @@ -563,14 +567,14 @@ task_complete_test(void) bdev_io.error.scsi.sk = SPDK_SCSI_SENSE_HARDWARE_ERROR; bdev_io.error.scsi.asc = SPDK_SCSI_ASC_WARNING; bdev_io.error.scsi.ascq = SPDK_SCSI_ASCQ_POWER_LOSS_EXPECTED; - spdk_bdev_scsi_task_complete(&bdev_io, bdev_io.status, &task); + spdk_bdev_scsi_task_complete_cmd(&bdev_io, bdev_io.status, &task); CU_ASSERT_EQUAL(task.status, SPDK_SCSI_STATUS_CHECK_CONDITION); CU_ASSERT_EQUAL(task.sense_data[2] & 0xf, SPDK_SCSI_SENSE_HARDWARE_ERROR); CU_ASSERT_EQUAL(task.sense_data[12], SPDK_SCSI_ASC_WARNING); CU_ASSERT_EQUAL(task.sense_data[13], SPDK_SCSI_ASCQ_POWER_LOSS_EXPECTED); bdev_io.status = SPDK_BDEV_IO_STATUS_FAILED; - spdk_bdev_scsi_task_complete(&bdev_io, bdev_io.status, &task); + spdk_bdev_scsi_task_complete_cmd(&bdev_io, bdev_io.status, &task); CU_ASSERT_EQUAL(task.status, SPDK_SCSI_STATUS_CHECK_CONDITION); CU_ASSERT_EQUAL(task.sense_data[2] & 0xf, SPDK_SCSI_SENSE_ABORTED_COMMAND); CU_ASSERT_EQUAL(task.sense_data[12], SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE);