diff options
author | 2020-02-28 08:53:08 +0100 | |
---|---|---|
committer | 2020-02-28 20:54:48 -0500 | |
commit | 84ff9532e5308d04f97f032a434021ba1b01b6a3 (patch) | |
tree | 78515511da7f47ecc957353f53f52582938cce1d | |
parent | scsi: core: add scsi_host_complete_all_commands() helper (diff) | |
download | linux-84ff9532e5308d04f97f032a434021ba1b01b6a3.tar.gz linux-84ff9532e5308d04f97f032a434021ba1b01b6a3.tar.bz2 linux-84ff9532e5308d04f97f032a434021ba1b01b6a3.zip |
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>
-rw-r--r-- | drivers/scsi/dpt_i2o.c | 20 | ||||
-rw-r--r-- | drivers/scsi/dpti.h | 1 |
2 files changed, 1 insertions, 20 deletions
diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c index c30ace9f251e..ac27323ea135 100644 --- a/drivers/scsi/dpt_i2o.c +++ b/drivers/scsi/dpt_i2o.c @@ -817,7 +817,7 @@ static int adpt_hba_reset(adpt_hba* pHba) } pHba->state &= ~DPTI_STATE_RESET; - adpt_fail_posted_scbs(pHba); + scsi_host_complete_all_commands(pHba->host, DID_RESET); 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->sg_tablesize = pHba->sg_tablesize; host->can_queue = pHba->post_fifo_size; - host->use_cmd_list = 1; return 0; } @@ -2646,23 +2645,6 @@ static s32 adpt_i2o_reparse_lct(adpt_hba* pHba) 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 *============================================================================ diff --git a/drivers/scsi/dpti.h b/drivers/scsi/dpti.h index 3ec391134bb0..72293b8450b6 100644 --- a/drivers/scsi/dpti.h +++ b/drivers/scsi/dpti.h @@ -295,7 +295,6 @@ static s32 adpt_i2o_reparse_lct(adpt_hba* pHba); static s32 adpt_send_nop(adpt_hba*pHba,u32 m); static void adpt_i2o_delete_hba(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 int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev) ; static int adpt_i2o_online_hba(adpt_hba* pHba); |