Commit 238f9b06 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Linus Torvalds

[PATCH] fix megaraid.c locking

This fixes locking in megaraid.c, namely:

 (1) make sure megaraid_queue release the adapter lock by changing the
     code to have a single return
 (2) remove the errornous scsi_assign_lock call

Testing by Burton Windle.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Acked-by: default avatarBurton Windle <bwindle@fint.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 238f58d8
...@@ -380,8 +380,9 @@ megaraid_queue(Scsi_Cmnd *scmd, void (*done)(Scsi_Cmnd *)) ...@@ -380,8 +380,9 @@ megaraid_queue(Scsi_Cmnd *scmd, void (*done)(Scsi_Cmnd *))
spin_lock_irqsave(&adapter->lock, flags); spin_lock_irqsave(&adapter->lock, flags);
scb = mega_build_cmd(adapter, scmd, &busy); scb = mega_build_cmd(adapter, scmd, &busy);
if (!scb)
goto out;
if(scb) {
scb->state |= SCB_PENDQ; scb->state |= SCB_PENDQ;
list_add_tail(&scb->list, &adapter->pending_list); list_add_tail(&scb->list, &adapter->pending_list);
...@@ -390,13 +391,12 @@ megaraid_queue(Scsi_Cmnd *scmd, void (*done)(Scsi_Cmnd *)) ...@@ -390,13 +391,12 @@ megaraid_queue(Scsi_Cmnd *scmd, void (*done)(Scsi_Cmnd *))
* delete logical drive opertion. If it is, don't run * delete logical drive opertion. If it is, don't run
* the pending_list. * the pending_list.
*/ */
if(atomic_read(&adapter->quiescent) == 0) { if (atomic_read(&adapter->quiescent) == 0)
mega_runpendq(adapter); mega_runpendq(adapter);
}
return 0;
}
spin_unlock_irqrestore(&adapter->lock, flags);
busy = 0;
out:
spin_unlock_irqrestore(&adapter->lock, flags);
return busy; return busy;
} }
...@@ -4677,7 +4677,6 @@ megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -4677,7 +4677,6 @@ megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
adapter->flag = flag; adapter->flag = flag;
spin_lock_init(&adapter->lock); spin_lock_init(&adapter->lock);
scsi_assign_lock(host, &adapter->lock);
host->cmd_per_lun = max_cmd_per_lun; host->cmd_per_lun = max_cmd_per_lun;
host->max_sectors = max_sectors_per_io; host->max_sectors = max_sectors_per_io;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment