mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-27 19:29:37 +00:00
scsi: ibmvfc: Simplify handling of sub-CRQ initialization
If ibmvfc_init_sub_crqs() fails ibmvfc_probe() simply parrots registration failure reported elsewhere, and futher vhost->scsi_scrq.scrq == NULL is indication enough to the driver that it has no sub-CRQs available. The mq_enabled check can also be moved into ibmvfc_init_sub_crqs() such that each caller doesn't have to gate the call with a mq_enabled check. Finally, in the case of sub-CRQ setup failure setting do_enquiry can be turned off to putting the driver into single queue fallback mode. The aforementioned changes also simplify the next patch in the series that fixes a hard reset issue, by tying a sub-CRQ setup failure and do_enquiry logic into ibmvfc_init_sub_crqs(). Link: https://lore.kernel.org/r/20210302230543.9905-2-tyreld@linux.ibm.com Reviewed-by: Brian King <brking@linux.ibm.com> Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
f69d02e37a
commit
443cc4b45c
1 changed files with 10 additions and 11 deletions
|
@ -5707,17 +5707,21 @@ static void ibmvfc_deregister_scsi_channel(struct ibmvfc_host *vhost, int index)
|
|||
LEAVE;
|
||||
}
|
||||
|
||||
static int ibmvfc_init_sub_crqs(struct ibmvfc_host *vhost)
|
||||
static void ibmvfc_init_sub_crqs(struct ibmvfc_host *vhost)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
ENTER;
|
||||
if (!vhost->mq_enabled)
|
||||
return;
|
||||
|
||||
vhost->scsi_scrqs.scrqs = kcalloc(nr_scsi_hw_queues,
|
||||
sizeof(*vhost->scsi_scrqs.scrqs),
|
||||
GFP_KERNEL);
|
||||
if (!vhost->scsi_scrqs.scrqs)
|
||||
return -1;
|
||||
if (!vhost->scsi_scrqs.scrqs) {
|
||||
vhost->do_enquiry = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < nr_scsi_hw_queues; i++) {
|
||||
if (ibmvfc_register_scsi_channel(vhost, i)) {
|
||||
|
@ -5726,13 +5730,12 @@ static int ibmvfc_init_sub_crqs(struct ibmvfc_host *vhost)
|
|||
kfree(vhost->scsi_scrqs.scrqs);
|
||||
vhost->scsi_scrqs.scrqs = NULL;
|
||||
vhost->scsi_scrqs.active_queues = 0;
|
||||
LEAVE;
|
||||
return -1;
|
||||
vhost->do_enquiry = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
LEAVE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ibmvfc_release_sub_crqs(struct ibmvfc_host *vhost)
|
||||
|
@ -5999,11 +6002,7 @@ static int ibmvfc_probe(struct vio_dev *vdev, const struct vio_device_id *id)
|
|||
goto remove_shost;
|
||||
}
|
||||
|
||||
if (vhost->mq_enabled) {
|
||||
rc = ibmvfc_init_sub_crqs(vhost);
|
||||
if (rc)
|
||||
dev_warn(dev, "Failed to allocate Sub-CRQs. rc=%d\n", rc);
|
||||
}
|
||||
ibmvfc_init_sub_crqs(vhost);
|
||||
|
||||
if (shost_to_fc_host(shost)->rqst_q)
|
||||
blk_queue_max_segments(shost_to_fc_host(shost)->rqst_q, 1);
|
||||
|
|
Loading…
Reference in a new issue