From 3b05e9996fef386632de417841012e64228dde2b Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Sun, 11 Nov 2012 09:44:11 -0800 Subject: [PATCH] Move cancel_task and cancel_all_tasks from scsi-lowlevel.c to scsi-command.c These two functions belong in the iscsi layer, not the scsi layer so move them out from scsi-lowlevel.c so that we can start turning scsi-lowlevel.c to a pure scsi layer and remove all dependencies to iscsi from it. --- include/iscsi.h | 4 ++-- lib/libiscsi.def | 2 +- lib/libiscsi.syms | 2 +- lib/scsi-command.c | 54 ++++++++++++++++++++++++++++++++++++++++++ lib/scsi-lowlevel.c | 57 --------------------------------------------- lib/task_mgmt.c | 2 +- 6 files changed, 59 insertions(+), 62 deletions(-) diff --git a/include/iscsi.h b/include/iscsi.h index 7b8db1a..463f6a3 100644 --- a/include/iscsi.h +++ b/include/iscsi.h @@ -953,8 +953,8 @@ EXTERN int scsi_task_add_data_in_buffer(struct scsi_task *task, int len, unsigne * To cancel the task also a the target you need to call the task management functions. */ EXTERN int -iscsi_scsi_task_cancel(struct iscsi_context *iscsi, - struct scsi_task *task); +iscsi_scsi_cancel_task(struct iscsi_context *iscsi, + struct scsi_task *task); /* * This function is used when you want to cancel all scsi tasks. diff --git a/lib/libiscsi.def b/lib/libiscsi.def index dfa4838..6482822 100644 --- a/lib/libiscsi.def +++ b/lib/libiscsi.def @@ -62,7 +62,7 @@ iscsi_reportluns_task iscsi_scsi_cancel_all_tasks iscsi_scsi_command_async iscsi_scsi_command_sync -iscsi_scsi_task_cancel +iscsi_scsi_cancel_task iscsi_service iscsi_set_alias iscsi_set_log_level diff --git a/lib/libiscsi.syms b/lib/libiscsi.syms index 74c33fe..68d5605 100644 --- a/lib/libiscsi.syms +++ b/lib/libiscsi.syms @@ -60,7 +60,7 @@ iscsi_reportluns_task iscsi_scsi_cancel_all_tasks iscsi_scsi_command_async iscsi_scsi_command_sync -iscsi_scsi_task_cancel +iscsi_scsi_cancel_task iscsi_service iscsi_set_alias iscsi_set_log_level diff --git a/lib/scsi-command.c b/lib/scsi-command.c index f6d8d0f..d3b2fb9 100644 --- a/lib/scsi-command.c +++ b/lib/scsi-command.c @@ -1568,3 +1568,57 @@ iscsi_scsi_get_task_from_pdu(struct iscsi_pdu *pdu) { return pdu->scsi_cbdata->task; } + +int +iscsi_scsi_cancel_task(struct iscsi_context *iscsi, + struct scsi_task *task) +{ + struct iscsi_pdu *pdu; + + for (pdu = iscsi->waitpdu; pdu; pdu = pdu->next) { + if (pdu->itt == task->itt) { + SLIST_REMOVE(&iscsi->waitpdu, pdu); + if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { + pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, + pdu->private_data); + } + iscsi_free_pdu(iscsi, pdu); + return 0; + } + } + for (pdu = iscsi->outqueue; pdu; pdu = pdu->next) { + if (pdu->itt == task->itt) { + SLIST_REMOVE(&iscsi->outqueue, pdu); + if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { + pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, + pdu->private_data); + } + iscsi_free_pdu(iscsi, pdu); + return 0; + } + } + return -1; +} + +void +iscsi_scsi_cancel_all_tasks(struct iscsi_context *iscsi) +{ + struct iscsi_pdu *pdu; + + for (pdu = iscsi->waitpdu; pdu; pdu = pdu->next) { + SLIST_REMOVE(&iscsi->waitpdu, pdu); + if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { + pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, + pdu->private_data); + } + iscsi_free_pdu(iscsi, pdu); + } + for (pdu = iscsi->outqueue; pdu; pdu = pdu->next) { + SLIST_REMOVE(&iscsi->outqueue, pdu); + if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { + pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, + pdu->private_data); + } + iscsi_free_pdu(iscsi, pdu); + } +} diff --git a/lib/scsi-lowlevel.c b/lib/scsi-lowlevel.c index e7e6da5..e7697b5 100644 --- a/lib/scsi-lowlevel.c +++ b/lib/scsi-lowlevel.c @@ -2558,60 +2558,3 @@ scsi_task_get_data_in_buffer(struct scsi_task *task, uint32_t pos, ssize_t *coun return &sdb->data[pos]; } -int -iscsi_scsi_task_cancel(struct iscsi_context *iscsi, - struct scsi_task *task) -{ - struct iscsi_pdu *pdu; - - for (pdu = iscsi->waitpdu; pdu; pdu = pdu->next) { - if (pdu->itt == task->itt) { - SLIST_REMOVE(&iscsi->waitpdu, pdu); - if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { - pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, - pdu->private_data); - } - iscsi_free_pdu(iscsi, pdu); - return 0; - } - } - for (pdu = iscsi->outqueue; pdu; pdu = pdu->next) { - if (pdu->itt == task->itt) { - SLIST_REMOVE(&iscsi->outqueue, pdu); - if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { - pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, - pdu->private_data); - } - iscsi_free_pdu(iscsi, pdu); - return 0; - } - } - return -1; -} - -void -iscsi_scsi_cancel_all_tasks(struct iscsi_context *iscsi) -{ - struct iscsi_pdu *pdu; - - for (pdu = iscsi->waitpdu; pdu; pdu = pdu->next) { - struct scsi_task *task = iscsi_scsi_get_task_from_pdu(pdu); - - SLIST_REMOVE(&iscsi->waitpdu, pdu); - if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { - pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, - pdu->private_data); - } - iscsi_free_pdu(iscsi, pdu); - } - for (pdu = iscsi->outqueue; pdu; pdu = pdu->next) { - struct scsi_task *task = iscsi_scsi_get_task_from_pdu(pdu); - - SLIST_REMOVE(&iscsi->outqueue, pdu); - if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { - pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, - pdu->private_data); - } - iscsi_free_pdu(iscsi, pdu); - } -} diff --git a/lib/task_mgmt.c b/lib/task_mgmt.c index 286072d..5767aed 100644 --- a/lib/task_mgmt.c +++ b/lib/task_mgmt.c @@ -103,7 +103,7 @@ iscsi_task_mgmt_abort_task_async(struct iscsi_context *iscsi, struct scsi_task *task, iscsi_command_cb cb, void *private_data) { - iscsi_scsi_task_cancel(iscsi, task); + iscsi_scsi_cancel_task(iscsi, task); return iscsi_task_mgmt_async(iscsi, task->lun, ISCSI_TM_ABORT_TASK,