* [PATCH][resubmit] cciss: fix spinlock use
@ 2010-02-26 14:39 Tomas Henzl
0 siblings, 0 replies; only message in thread
From: Tomas Henzl @ 2010-02-26 14:39 UTC (permalink / raw)
To: linux-scsi; +Cc: James Bottomley, Mike.Miller
This is a third attempt - it is already
acked by Mike Miller - http://article.gmane.org/gmane.linux.scsi/54492
fail_all_cmds is called 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 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 873e594..0a3fce8 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -3298,6 +3298,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;
}
@@ -4553,8 +4554,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 */
@@ -4580,7 +4579,6 @@ static void fail_all_cmds(unsigned long ctlr)
complete_scsi_command(c, 0, 0);
#endif
}
- spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
return;
}
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2010-02-26 14:39 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-26 14:39 [PATCH][resubmit] 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.