[SCSI] qla2xxx: Fix to avoid recursive lock failure during BSG timeout.
authorGiridhar Malavali <giridhar.malavali@qlogic.com>
Wed, 22 Dec 2010 00:00:26 +0000 (16:00 -0800)
committerJames Bottomley <James.Bottomley@suse.de>
Thu, 23 Dec 2010 22:09:33 +0000 (16:09 -0600)
Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/qla2xxx/qla_bsg.c

index 10942fc..903b058 100644 (file)
@@ -1512,6 +1512,7 @@ qla24xx_bsg_timeout(struct fc_bsg_job *bsg_job)
                                if (((sp_bsg->type == SRB_CT_CMD) ||
                                        (sp_bsg->type == SRB_ELS_CMD_HST))
                                        && (sp_bsg->u.bsg_job == bsg_job)) {
+                                       spin_unlock_irqrestore(&ha->hardware_lock, flags);
                                        if (ha->isp_ops->abort_command(sp)) {
                                                DEBUG2(qla_printk(KERN_INFO, ha,
                                                    "scsi(%ld): mbx "
@@ -1527,6 +1528,7 @@ qla24xx_bsg_timeout(struct fc_bsg_job *bsg_job)
                                                bsg_job->req->errors =
                                                bsg_job->reply->result = 0;
                                        }
+                                       spin_lock_irqsave(&ha->hardware_lock, flags);
                                        goto done;
                                }
                        }