提交 92b3e5bb 编写于 作者: M Mike Christie 提交者: James Bottomley

[SCSI] qla4xxx: grab hardware_lock in eh_abort before accessing srb

grab hardware_lock in eh_abort before accessing srb to avoid
race between command completion and get refcount on srb.
Signed-off-by: NMike Christie <michaelc@cs.wisc.edu>
Signed-off-by: NVikas Chaudhary <vikas.chaudhary@qlogic.com>
Signed-off-by: NRavi Anand <ravi.anand@qlogic.com>
Reviewed-by: NMike Christie <michaelc@cs.wisc.edu>
Signed-off-by: NJames Bottomley <James.Bottomley@suse.de>
上级 d64eab76
...@@ -2006,6 +2006,7 @@ static int qla4xxx_eh_abort(struct scsi_cmnd *cmd) ...@@ -2006,6 +2006,7 @@ static int qla4xxx_eh_abort(struct scsi_cmnd *cmd)
unsigned int id = cmd->device->id; unsigned int id = cmd->device->id;
unsigned int lun = cmd->device->lun; unsigned int lun = cmd->device->lun;
unsigned long serial = cmd->serial_number; unsigned long serial = cmd->serial_number;
unsigned long flags;
struct srb *srb = NULL; struct srb *srb = NULL;
int ret = SUCCESS; int ret = SUCCESS;
int wait = 0; int wait = 0;
...@@ -2014,12 +2015,14 @@ static int qla4xxx_eh_abort(struct scsi_cmnd *cmd) ...@@ -2014,12 +2015,14 @@ static int qla4xxx_eh_abort(struct scsi_cmnd *cmd)
"scsi%ld:%d:%d: Abort command issued cmd=%p, pid=%ld\n", "scsi%ld:%d:%d: Abort command issued cmd=%p, pid=%ld\n",
ha->host_no, id, lun, cmd, serial); ha->host_no, id, lun, cmd, serial);
spin_lock_irqsave(&ha->hardware_lock, flags);
srb = (struct srb *) CMD_SP(cmd); srb = (struct srb *) CMD_SP(cmd);
if (!srb) {
if (!srb) spin_unlock_irqrestore(&ha->hardware_lock, flags);
return SUCCESS; return SUCCESS;
}
kref_get(&srb->srb_ref); kref_get(&srb->srb_ref);
spin_unlock_irqrestore(&ha->hardware_lock, flags);
if (qla4xxx_abort_task(ha, srb) != QLA_SUCCESS) { if (qla4xxx_abort_task(ha, srb) != QLA_SUCCESS) {
DEBUG3(printk("scsi%ld:%d:%d: Abort_task mbx failed.\n", DEBUG3(printk("scsi%ld:%d:%d: Abort_task mbx failed.\n",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册