Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+14 −15
Original line number Diff line number Diff line
@@ -380,8 +380,9 @@ megaraid_queue(Scsi_Cmnd *scmd, void (*done)(Scsi_Cmnd *))

	spin_lock_irqsave(&adapter->lock, flags);
	scb = mega_build_cmd(adapter, scmd, &busy);
	if (!scb)
		goto out;

	if(scb) {
	scb->state |= SCB_PENDQ;
	list_add_tail(&scb->list, &adapter->pending_list);

@@ -390,13 +391,12 @@ megaraid_queue(Scsi_Cmnd *scmd, void (*done)(Scsi_Cmnd *))
	 * delete logical drive opertion. If it is, don't run
	 * the pending_list.
	 */
		if(atomic_read(&adapter->quiescent) == 0) {
	if (atomic_read(&adapter->quiescent) == 0)
		mega_runpendq(adapter);
		}
		return 0;
	}
	spin_unlock_irqrestore(&adapter->lock, flags);

	busy = 0;
 out:
	spin_unlock_irqrestore(&adapter->lock, flags);
	return busy;
}

@@ -4677,7 +4677,6 @@ megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)

	adapter->flag = flag;
	spin_lock_init(&adapter->lock);
	scsi_assign_lock(host, &adapter->lock);

	host->cmd_per_lun = max_cmd_per_lun;
	host->max_sectors = max_sectors_per_io;