summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx
diff options
context:
space:
mode:
authorBruno Prémont <bonbons@linux-vserver.org>2014-12-19 10:29:16 +0100
committerSasha Levin <sasha.levin@oracle.com>2016-02-25 11:36:44 -0500
commit17b6dde0d7a9e179d467129808aebac0e0625e16 (patch)
treef5e73da79371622b4033c4961aa95b8ccee1293a /drivers/scsi/qla2xxx
parent2c07053b8e1e0c22bb54dfbdf8e86a70f8bf00fc (diff)
downloadlinux-stable-17b6dde0d7a9e179d467129808aebac0e0625e16.tar.gz
linux-stable-17b6dde0d7a9e179d467129808aebac0e0625e16.tar.bz2
linux-stable-17b6dde0d7a9e179d467129808aebac0e0625e16.zip
qla2xxx: fix busy wait regression
[ Upstream commit 975f7d467480a11864d71a10dee908b83c5e682b ] Commit e05fe29248 (qla2xxx: Honor FCP_RSP retry delay timer field.) causes systems to busy-wait for about 3 minutes after boot prior to detecting SAN disks. During this wait period one kworker is running full-time (though /proc/<pid>/stack has no useful data). Another kworker is waiting for IO to complete during that whole time period. Looking at drivers/scsi/qla2xxx/qla_os.c, fcport->retry_delay_timestamp has a special value of 0 though that 0 value forces system to wait when jiffies is very large value (e.g. 4294952605 - "negative" value when signed on 32bit systems). Signed-off-by: Bruno Prémont <bonbons@linux-vserver.org> Acked-by: Chad Dupuis <chad.dupuis@qlogic.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r--drivers/scsi/qla2xxx/qla_os.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index db3dbd999cb6..1df4c66c36ce 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -735,7 +735,9 @@ qla2xxx_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
* Return target busy if we've received a non-zero retry_delay_timer
* in a FCP_RSP.
*/
- if (time_after(jiffies, fcport->retry_delay_timestamp))
+ if (fcport->retry_delay_timestamp == 0) {
+ /* retry delay not set */
+ } else if (time_after(jiffies, fcport->retry_delay_timestamp))
fcport->retry_delay_timestamp = 0;
else
goto qc24_target_busy;