Task Management. When we abort a task or a task set, or reset the lun or target

we must also cancel all active tasks.
This will trigger all affected tasks to have their callback invoked with
SCSI_STATUS_CANCELLED
This commit is contained in:
Ronnie Sahlberg
2012-03-10 12:12:47 +11:00
parent 3f44347dae
commit 50594830bd
7 changed files with 83 additions and 6 deletions

View File

@@ -97,6 +97,8 @@ 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);
return iscsi_task_mgmt_async(iscsi,
task->lun, ISCSI_TM_ABORT_TASK,
task->itt, task->cmdsn,
@@ -108,6 +110,8 @@ iscsi_task_mgmt_abort_task_set_async(struct iscsi_context *iscsi,
uint32_t lun,
iscsi_command_cb cb, void *private_data)
{
iscsi_scsi_cancel_all_tasks(iscsi);
return iscsi_task_mgmt_async(iscsi,
lun, ISCSI_TM_ABORT_TASK_SET,
0xffffffff, 0,
@@ -119,6 +123,8 @@ iscsi_task_mgmt_lun_reset_async(struct iscsi_context *iscsi,
uint32_t lun,
iscsi_command_cb cb, void *private_data)
{
iscsi_scsi_cancel_all_tasks(iscsi);
return iscsi_task_mgmt_async(iscsi,
lun, ISCSI_TM_LUN_RESET,
0xffffffff, 0,
@@ -129,16 +135,21 @@ int
iscsi_task_mgmt_target_warm_reset_async(struct iscsi_context *iscsi,
iscsi_command_cb cb, void *private_data)
{
iscsi_scsi_cancel_all_tasks(iscsi);
return iscsi_task_mgmt_async(iscsi,
0, ISCSI_TM_TARGET_WARM_RESET,
0xffffffff, 0,
cb, private_data);
}
int
iscsi_task_mgmt_target_cold_reset_async(struct iscsi_context *iscsi,
iscsi_command_cb cb, void *private_data)
{
iscsi_scsi_cancel_all_tasks(iscsi);
return iscsi_task_mgmt_async(iscsi,
0, ISCSI_TM_TARGET_COLD_RESET,
0xffffffff, 0,