* [PATCH] cciss: fix spinlock use
@ 2009-07-09 12:46 Tomas Henzl
0 siblings, 0 replies; only message in thread
From: Tomas Henzl @ 2009-07-09 12:46 UTC (permalink / raw)
To: linux-scsi; +Cc: Miller, Mike (OS Dev), Prarit Bhargava
fail_all_cmds is called (only) from do_cciss_intr with
spinlock acquired.
So when in an error-handling situation,
fail_all_cmds() is called it attempts to *reacquire* the lock.
This has been found and analysed by Prarit Bhargava.
This patch removes the spinlock lock/unlock from fail_all_cmds and adds a
spin_unlock after the call to fail_all_cmds before return.
Signed-off-by: Tomas Henzl <thenzl@redhat.com>
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index c7a527c..b45776e 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -3181,6 +3181,7 @@ static irqreturn_t do_cciss_intr(int irq, void *dev_id)
"cciss: controller cciss%d failed, stopping.\n",
h->ctlr);
fail_all_cmds(h->ctlr);
+ spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
return IRQ_HANDLED;
}
@@ -4230,8 +4231,6 @@ static void fail_all_cmds(unsigned long ctlr)
printk(KERN_WARNING "cciss%d: controller not responding.\n", h->ctlr);
h->alive = 0; /* the controller apparently died... */
- spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
-
pci_disable_device(h->pdev); /* Make sure it is really dead. */
/* move everything off the request queue onto the completed queue */
@@ -4256,7 +4255,6 @@ static void fail_all_cmds(unsigned long ctlr)
complete_scsi_command(c, 0, 0);
#endif
}
- spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
return;
}
--
1.6.0.6
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2009-07-09 12:46 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-09 12:46 [PATCH] cciss: fix spinlock use Tomas Henzl
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.