[PATCH 1/4] dpt_i2o: use midlayer tcq implementation

Hannes Reinecke
2019-11-15T08:06:04Z

Switch to use the SCSI midlayer TCQ implementation and drop the
use of the scsi command list.
And switch to use the SAM status codes while we're at it.

Signed-off-by: Hannes Reinecke <hare@suse.de>
---
drivers/scsi/dpt_i2o.c | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c
index abc74fd474dc..cc3f1100c888 100644
--- a/drivers/scsi/dpt_i2o.c
+++ b/drivers/scsi/dpt_i2o.c
@@ -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;
}
@@ -2647,20 +2646,20 @@ static s32 adpt_i2o_reparse_lct(adpt_hba* pHba)
return 0;
}

-static void adpt_fail_posted_scbs(adpt_hba* pHba)
+static bool fail_posted_scbs_iter(struct request *rq, void *data, bool reserved)
{
- struct scsi_cmnd* cmd = NULL;
- struct scsi_device* d = NULL;
+ struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq);

- 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);
- }
+ cmd->result = (DID_OK << 16) | SAM_STAT_TASK_SET_FULL;
+ cmd->scsi_done(cmd);
+
+ return true;
+}
+
+static void adpt_fail_posted_scbs(adpt_hba* pHba)
+{
+ blk_mq_tagset_busy_iter(&pHba->host->tag_set,
+ fail_posted_scbs_iter, NULL);
}

--
2.16.4