scsi: dpt_i2o: use scsi_host_complete_all_commands() to abort outstanding commands
Rather than traversing all outstanding commands manually, use the scsi_host_complete_all_commands() helper to terminate all commands during reset. With that we can drop the cmd_list usage from the midlayer. Link: https://lore.kernel.org/r/20200228075318.91255-4-hare@suse.de Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Родитель
466552b9f3
Коммит
84ff9532e5
|
@ -817,7 +817,7 @@ static int adpt_hba_reset(adpt_hba* pHba)
|
||||||
}
|
}
|
||||||
pHba->state &= ~DPTI_STATE_RESET;
|
pHba->state &= ~DPTI_STATE_RESET;
|
||||||
|
|
||||||
adpt_fail_posted_scbs(pHba);
|
scsi_host_complete_all_commands(pHba->host, DID_RESET);
|
||||||
return 0; /* return success */
|
return 0; /* return success */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2335,7 +2335,6 @@ static s32 adpt_scsi_host_alloc(adpt_hba* pHba, struct scsi_host_template *sht)
|
||||||
host->unique_id = (u32)sys_tbl_pa + pHba->unit;
|
host->unique_id = (u32)sys_tbl_pa + pHba->unit;
|
||||||
host->sg_tablesize = pHba->sg_tablesize;
|
host->sg_tablesize = pHba->sg_tablesize;
|
||||||
host->can_queue = pHba->post_fifo_size;
|
host->can_queue = pHba->post_fifo_size;
|
||||||
host->use_cmd_list = 1;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2646,23 +2645,6 @@ static s32 adpt_i2o_reparse_lct(adpt_hba* pHba)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void adpt_fail_posted_scbs(adpt_hba* pHba)
|
|
||||||
{
|
|
||||||
struct scsi_cmnd* cmd = NULL;
|
|
||||||
struct scsi_device* d = NULL;
|
|
||||||
|
|
||||||
shost_for_each_device(d, pHba->host) {
|
|
||||||
unsigned long flags;
|
|
||||||
spin_lock_irqsave(&d->list_lock, flags);
|
|
||||||
list_for_each_entry(cmd, &d->cmd_list, list) {
|
|
||||||
cmd->result = (DID_OK << 16) | (QUEUE_FULL <<1);
|
|
||||||
cmd->scsi_done(cmd);
|
|
||||||
}
|
|
||||||
spin_unlock_irqrestore(&d->list_lock, flags);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*============================================================================
|
/*============================================================================
|
||||||
* Routines from i2o subsystem
|
* Routines from i2o subsystem
|
||||||
*============================================================================
|
*============================================================================
|
||||||
|
|
|
@ -295,7 +295,6 @@ static s32 adpt_i2o_reparse_lct(adpt_hba* pHba);
|
||||||
static s32 adpt_send_nop(adpt_hba*pHba,u32 m);
|
static s32 adpt_send_nop(adpt_hba*pHba,u32 m);
|
||||||
static void adpt_i2o_delete_hba(adpt_hba* pHba);
|
static void adpt_i2o_delete_hba(adpt_hba* pHba);
|
||||||
static void adpt_inquiry(adpt_hba* pHba);
|
static void adpt_inquiry(adpt_hba* pHba);
|
||||||
static void adpt_fail_posted_scbs(adpt_hba* pHba);
|
|
||||||
static struct adpt_device* adpt_find_device(adpt_hba* pHba, u32 chan, u32 id, u64 lun);
|
static struct adpt_device* adpt_find_device(adpt_hba* pHba, u32 chan, u32 id, u64 lun);
|
||||||
static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev) ;
|
static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev) ;
|
||||||
static int adpt_i2o_online_hba(adpt_hba* pHba);
|
static int adpt_i2o_online_hba(adpt_hba* pHba);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче