From: Tomas Henzl <thenzl@redhat.com>
To: linux-scsi@vger.kernel.org
Cc: andrew.patterson@hp.com, "Miller,
Mike (OS Dev)" <Mike.Miller@hp.com>,
James Bottomley <James.Bottomley@HansenPartnership.com>
Subject: [PATCH] cciss: resubmit - fix spinlock use
Date: Fri, 18 Sep 2009 17:42:23 +0300 [thread overview]
Message-ID: <4AB39C4F.6070001@redhat.com> (raw)
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
next reply other threads:[~2009-09-18 14:42 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-18 14:42 Tomas Henzl [this message]
2009-09-18 15:59 ` [PATCH] cciss: resubmit - fix spinlock use Miller, Mike (OS Dev)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4AB39C4F.6070001@redhat.com \
--to=thenzl@redhat.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=Mike.Miller@hp.com \
--cc=andrew.patterson@hp.com \
--cc=linux-scsi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.