diff --git a/include/spdk/scsi.h b/include/spdk/scsi.h index 482965800..9fa7ad6b5 100644 --- a/include/spdk/scsi.h +++ b/include/spdk/scsi.h @@ -248,13 +248,13 @@ void spdk_scsi_dev_destruct(struct spdk_scsi_dev *dev); * Execute the SCSI management task. * * The task can be constructed by the function spdk_scsi_task_construct(). + * Code of task management function to be executed is set before calling this API. * * \param dev SCSI device. * \param task SCSI task to be executed. - * \param func Task management function to be executed. */ -void spdk_scsi_dev_queue_mgmt_task(struct spdk_scsi_dev *dev, struct spdk_scsi_task *task, - enum spdk_scsi_task_func func); +void spdk_scsi_dev_queue_mgmt_task(struct spdk_scsi_dev *dev, struct spdk_scsi_task *task); + /** * Execute the SCSI task. * diff --git a/lib/iscsi/iscsi.c b/lib/iscsi/iscsi.c index 1b4b6402d..61f8a6115 100644 --- a/lib/iscsi/iscsi.c +++ b/lib/iscsi/iscsi.c @@ -2746,10 +2746,9 @@ static void spdk_iscsi_queue_task(struct spdk_iscsi_conn *conn, } static void spdk_iscsi_queue_mgmt_task(struct spdk_iscsi_conn *conn, - struct spdk_iscsi_task *task, - enum spdk_scsi_task_func func) + struct spdk_iscsi_task *task) { - spdk_scsi_dev_queue_mgmt_task(conn->dev, &task->scsi, func); + spdk_scsi_dev_queue_mgmt_task(conn->dev, &task->scsi); } int spdk_iscsi_conn_handle_queued_datain_tasks(struct spdk_iscsi_conn *conn) @@ -2973,20 +2972,14 @@ static void spdk_abort_transfer_task_in_task_mgmt_resp(struct spdk_iscsi_conn *conn, struct spdk_iscsi_task *task) { - struct iscsi_bhs_task_req *reqh; struct spdk_iscsi_pdu *pdu; - uint32_t ref_task_tag; - uint8_t function; pdu = spdk_iscsi_task_get_pdu(task); - reqh = (struct iscsi_bhs_task_req *)&pdu->bhs; - function = reqh->flags & ISCSI_TASK_FUNCTION_MASK; - ref_task_tag = from_be32(&reqh->ref_task_tag); - switch (function) { + switch (task->scsi.function) { /* abort task identified by Reference Task Tag field */ case ISCSI_TASK_FUNC_ABORT_TASK: - spdk_del_transfer_task(conn, ref_task_tag); + spdk_del_transfer_task(conn, task->scsi.abort_id); break; /* abort all tasks issued via this session on the LUN */ @@ -3234,8 +3227,8 @@ spdk_iscsi_op_task(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu) SPDK_NOTICELOG("ABORT_TASK\n"); task->scsi.abort_id = ref_task_tag; - - spdk_iscsi_queue_mgmt_task(conn, task, SPDK_SCSI_TASK_FUNC_ABORT_TASK); + task->scsi.function = SPDK_SCSI_TASK_FUNC_ABORT_TASK; + spdk_iscsi_queue_mgmt_task(conn, task); return SPDK_SUCCESS; @@ -3243,7 +3236,8 @@ spdk_iscsi_op_task(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu) case ISCSI_TASK_FUNC_ABORT_TASK_SET: SPDK_NOTICELOG("ABORT_TASK_SET\n"); - spdk_iscsi_queue_mgmt_task(conn, task, SPDK_SCSI_TASK_FUNC_ABORT_TASK_SET); + task->scsi.function = SPDK_SCSI_TASK_FUNC_ABORT_TASK_SET; + spdk_iscsi_queue_mgmt_task(conn, task); return SPDK_SUCCESS; @@ -3260,7 +3254,8 @@ spdk_iscsi_op_task(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu) case ISCSI_TASK_FUNC_LOGICAL_UNIT_RESET: SPDK_NOTICELOG("LOGICAL_UNIT_RESET\n"); - spdk_iscsi_queue_mgmt_task(conn, task, SPDK_SCSI_TASK_FUNC_LUN_RESET); + task->scsi.function = SPDK_SCSI_TASK_FUNC_LUN_RESET; + spdk_iscsi_queue_mgmt_task(conn, task); return SPDK_SUCCESS; diff --git a/lib/iscsi/tgt_node.c b/lib/iscsi/tgt_node.c index a7521bf3b..729a9d46d 100644 --- a/lib/iscsi/tgt_node.c +++ b/lib/iscsi/tgt_node.c @@ -1280,8 +1280,9 @@ spdk_iscsi_tgt_node_cleanup_luns(struct spdk_iscsi_conn *conn, task->scsi.target_port = conn->target_port; task->scsi.initiator_port = conn->initiator_port; task->scsi.lun = lun; + task->scsi.function = SPDK_SCSI_TASK_FUNC_LUN_RESET; - spdk_scsi_dev_queue_mgmt_task(target->dev, &task->scsi, SPDK_SCSI_TASK_FUNC_LUN_RESET); + spdk_scsi_dev_queue_mgmt_task(target->dev, &task->scsi); } return 0; diff --git a/lib/scsi/dev.c b/lib/scsi/dev.c index c7bbbfae0..07f5f61ec 100644 --- a/lib/scsi/dev.c +++ b/lib/scsi/dev.c @@ -246,12 +246,10 @@ spdk_scsi_dev_construct(const char *name, const char *bdev_name_list[], void spdk_scsi_dev_queue_mgmt_task(struct spdk_scsi_dev *dev, - struct spdk_scsi_task *task, - enum spdk_scsi_task_func func) + struct spdk_scsi_task *task) { assert(task != NULL); - task->function = func; spdk_scsi_lun_append_mgmt_task(task->lun, task); spdk_scsi_lun_execute_mgmt_task(task->lun); } diff --git a/lib/vhost/vhost_scsi.c b/lib/vhost/vhost_scsi.c index 2f4348563..5cc170984 100644 --- a/lib/vhost/vhost_scsi.c +++ b/lib/vhost/vhost_scsi.c @@ -269,7 +269,8 @@ static void mgmt_task_submit(struct spdk_vhost_scsi_task *task, enum spdk_scsi_task_func func) { task->tmf_resp->response = VIRTIO_SCSI_S_OK; - spdk_scsi_dev_queue_mgmt_task(task->scsi_dev, &task->scsi, func); + task->scsi.function = func; + spdk_scsi_dev_queue_mgmt_task(task->scsi_dev, &task->scsi); } static void diff --git a/test/unit/lib/iscsi/common.c b/test/unit/lib/iscsi/common.c index 9ef4f9abb..bf12ad23b 100644 --- a/test/unit/lib/iscsi/common.c +++ b/test/unit/lib/iscsi/common.c @@ -90,8 +90,7 @@ spdk_scsi_dev_find_port_by_id(struct spdk_scsi_dev *dev, uint64_t id) void spdk_scsi_dev_queue_mgmt_task(struct spdk_scsi_dev *dev, - struct spdk_scsi_task *task, - enum spdk_scsi_task_func func) + struct spdk_scsi_task *task) { } diff --git a/test/unit/lib/scsi/dev.c/dev_ut.c b/test/unit/lib/scsi/dev.c/dev_ut.c index 859667d28..5b9b9d9f8 100644 --- a/test/unit/lib/scsi/dev.c/dev_ut.c +++ b/test/unit/lib/scsi/dev.c/dev_ut.c @@ -312,7 +312,8 @@ dev_queue_mgmt_task_success(void) task = spdk_get_task(NULL); - spdk_scsi_dev_queue_mgmt_task(dev, task, SPDK_SCSI_TASK_FUNC_LUN_RESET); + task->function = SPDK_SCSI_TASK_FUNC_LUN_RESET; + spdk_scsi_dev_queue_mgmt_task(dev, task); spdk_scsi_task_put(task); @@ -356,7 +357,8 @@ dev_stop_success(void) task_mgmt = spdk_get_task(NULL); /* Enqueue the tasks into dev->task_mgmt_submit_queue */ - spdk_scsi_dev_queue_mgmt_task(&dev, task_mgmt, SPDK_SCSI_TASK_FUNC_LUN_RESET); + task->function = SPDK_SCSI_TASK_FUNC_LUN_RESET; + spdk_scsi_dev_queue_mgmt_task(&dev, task_mgmt); spdk_scsi_task_put(task); spdk_scsi_task_put(task_mgmt); diff --git a/test/unit/lib/scsi/lun.c/lun_ut.c b/test/unit/lib/scsi/lun.c/lun_ut.c index 1b9cf39d9..e4cb01552 100644 --- a/test/unit/lib/scsi/lun.c/lun_ut.c +++ b/test/unit/lib/scsi/lun.c/lun_ut.c @@ -168,8 +168,7 @@ spdk_bdev_get_name(const struct spdk_bdev *bdev) } void spdk_scsi_dev_queue_mgmt_task(struct spdk_scsi_dev *dev, - struct spdk_scsi_task *task, - enum spdk_scsi_task_func func) + struct spdk_scsi_task *task) { }