Message ID | 20180606154142.11445-1-himanshu.madhani@cavium.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On Wed, 2018-06-06 at 08:41 -0700, Himanshu Madhani wrote: > From: Anil Gurumurthy <anil.gurumurthy@cavium.com> > > Some newer target uses "Status Qualifier" response in a returned > "Busy Status". This new response code of 0x4001, which is "Scope" bits, > translates to "Affects all units accessible by target". > Due to this new value returned in the Scope bits, driver was using > that value as timeout value which resulted into driver waiting for 27min > timeout. > > This patch masks off this Scope bits so that driver does not use > this value as retry delay time. > > Cc: <stable@vger.kernel.org> > Signed-off-by: Anil Gurumurthy <anil.gurumurthy@cavium.com> > Signed-off-by: Giridhar Malavali <giridhar.malavali@cavium.com> > Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com> > --- > Hi Martin, > > This patch fixes driver retry delay timer with a specific target which > returns Scope field in the BUSY status. Driver was translating this > Scope bits as timeout delay value and was wating for 27 minutes for retry. > > Please apply this to 4.18/scsi-fixes at your earliest convenience. > > Thanks, > Himanshu > --- > drivers/scsi/qla2xxx/qla_isr.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c > index a3dc83f9444d..68560a097ae1 100644 > --- a/drivers/scsi/qla2xxx/qla_isr.c > +++ b/drivers/scsi/qla2xxx/qla_isr.c > @@ -2494,8 +2494,12 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) > ox_id = le16_to_cpu(sts24->ox_id); > par_sense_len = sizeof(sts24->data); > /* Valid values of the retry delay timer are 0x1-0xffef */ > - if (sts24->retry_delay > 0 && sts24->retry_delay < 0xfff1) > - retry_delay = sts24->retry_delay; > + if (sts24->retry_delay > 0 && sts24->retry_delay < 0xfff1) { > + retry_delay = sts24->retry_delay & 0x3fff; > + ql_dbg(ql_dbg_io, sp->vha, 0x3033, > + "%s: scope=%#x retry_delay=%#x\n", __func__, > + sts24->retry_delay >> 14, retry_delay); > + } > } else { > if (scsi_status & SS_SENSE_LEN_VALID) > sense_len = le16_to_cpu(sts->req_sense_length); Reviewed-by: Ewan D. Milne <emilne@redhat.com>
On Wed, 2018-06-06 at 08:41 -0700, Himanshu Madhani wrote: > From: Anil Gurumurthy <anil.gurumurthy@cavium.com> > > Some newer target uses "Status Qualifier" response in a returned > "Busy Status". This new response code of 0x4001, which is "Scope" > bits, > translates to "Affects all units accessible by target". > Due to this new value returned in the Scope bits, driver was using > that value as timeout value which resulted into driver waiting for > 27min > timeout. > > This patch masks off this Scope bits so that driver does not use > this value as retry delay time. > > Cc: <stable@vger.kernel.org> > Signed-off-by: Anil Gurumurthy <anil.gurumurthy@cavium.com> > Signed-off-by: Giridhar Malavali <giridhar.malavali@cavium.com> > Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com> Tested successfully by SUSE customers. Acked-by: Martin Wilck <mwilck@suse.com>
Himanshu, > Some newer target uses "Status Qualifier" response in a returned "Busy > Status". This new response code of 0x4001, which is "Scope" bits, > translates to "Affects all units accessible by target". Due to this > new value returned in the Scope bits, driver was using that value as > timeout value which resulted into driver waiting for 27min timeout. > > This patch masks off this Scope bits so that driver does not use this > value as retry delay time. Applied to 4.18/scsi-fixes. Thank you!
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index a3dc83f9444d..68560a097ae1 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -2494,8 +2494,12 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) ox_id = le16_to_cpu(sts24->ox_id); par_sense_len = sizeof(sts24->data); /* Valid values of the retry delay timer are 0x1-0xffef */ - if (sts24->retry_delay > 0 && sts24->retry_delay < 0xfff1) - retry_delay = sts24->retry_delay; + if (sts24->retry_delay > 0 && sts24->retry_delay < 0xfff1) { + retry_delay = sts24->retry_delay & 0x3fff; + ql_dbg(ql_dbg_io, sp->vha, 0x3033, + "%s: scope=%#x retry_delay=%#x\n", __func__, + sts24->retry_delay >> 14, retry_delay); + } } else { if (scsi_status & SS_SENSE_LEN_VALID) sense_len = le16_to_cpu(sts->req_sense_length);