checking if task is in outqueue
Users need to check if a task is queued to send (not sent yet)
before invoking functions such as iscsi_task_mgmt_abort_task_async.
Otherwise, because task management requests are automatically
treated as "immediate", a request to abort a task is sent before
the task itself.
if (iscsi_scsi_is_task_in_outqueue(iscsi_, task_)) {
iscsi_scsi_cancel_task(iscsi_, task_);
} else {
iscsi_task_mgmt_abort_task_async(iscsi_, task_, AbortCb, context_);
}
This commit is contained in:
@@ -1537,6 +1537,13 @@ EXTERN void scsi_task_set_iov_in(struct scsi_task *task, struct scsi_iovec *iov,
|
||||
|
||||
EXTERN int scsi_task_get_status(struct scsi_task *task, struct scsi_sense *sense);
|
||||
|
||||
/*
|
||||
* This function returns 1 if the task is queued for send (for example, the task has been created
|
||||
* with an asynchronous request and has not been put on the wire right away due to the socket
|
||||
* or the ISCSI session state); otherwise returns 0.
|
||||
*/
|
||||
EXTERN int iscsi_scsi_is_task_in_outqueue(struct iscsi_context *iscsi, struct scsi_task *task);
|
||||
|
||||
/*
|
||||
* This function is used when you want to cancel a scsi task.
|
||||
* The callback for the task will immediately be invoked with SCSI_STATUS_CANCELLED.
|
||||
|
||||
Reference in New Issue
Block a user