]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Add spb2 deadlock fix from Stefan Richter
authorChris Wright <chrisw@sous-sol.org>
Mon, 27 Feb 2006 21:07:42 +0000 (13:07 -0800)
committerChris Wright <chrisw@sous-sol.org>
Mon, 27 Feb 2006 21:07:42 +0000 (13:07 -0800)
queue/sbp2-fix-another-deadlock-after-disconnection.patch [new file with mode: 0644]
queue/series

diff --git a/queue/sbp2-fix-another-deadlock-after-disconnection.patch b/queue/sbp2-fix-another-deadlock-after-disconnection.patch
new file mode 100644 (file)
index 0000000..1a6789f
--- /dev/null
@@ -0,0 +1,43 @@
+From stable-bounces@linux.kernel.org  Sun Feb 26 15:58:24 2006
+Date: Mon, 27 Feb 2006 00:52:53 +0100 (CET)
+From: Stefan Richter <stefanr@s5r6.in-berlin.de>
+To: stable@kernel.org
+Cc: linux-kernel@vger.kernel.org
+Subject: [PATCH] sbp2: fix another deadlock after disconnection
+
+sbp2: fix another deadlock after disconnection
+
+If there were commands enqueued but not completed before an SBP-2 unit
+was unplugged (or an attempt to reconnect failed), knodemgrd or any
+process which tried to remove the device would sleep uninterruptibly
+in blk_execute_rq().  Therefore make sure that all commands are
+completed when sbp2 retreats.
+
+Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+Same as commit bf637ec3ef4159da3dd156ecf6f6987d8c8c5dae in Linus' tree.
+
+ drivers/ieee1394/sbp2.c |   10 ++++++++--
+ 1 files changed, 8 insertions(+), 2 deletions(-)
+
+--- linux-2.6.15.4.orig/drivers/ieee1394/sbp2.c
++++ linux-2.6.15.4/drivers/ieee1394/sbp2.c
+@@ -650,9 +650,15 @@ static int sbp2_remove(struct device *de
+       if (!scsi_id)
+               return 0;
+-      /* Trigger shutdown functions in scsi's highlevel. */
+-      if (scsi_id->scsi_host)
++      if (scsi_id->scsi_host) {
++              /* Get rid of enqueued commands if there is no chance to
++               * send them. */
++              if (!sbp2util_node_is_available(scsi_id))
++                      sbp2scsi_complete_all_commands(scsi_id, DID_NO_CONNECT);
++              /* scsi_remove_device() will trigger shutdown functions of SCSI
++               * highlevel drivers which would deadlock if blocked. */
+               scsi_unblock_requests(scsi_id->scsi_host);
++      }
+       sdev = scsi_id->sdev;
+       if (sdev) {
+               scsi_id->sdev = NULL;
index ccae94f9d1da468fde0d79da99b696ebefe1f2fe..b2d484be1640163ddec295b1d67980ffcbbd7604 100644 (file)
@@ -33,3 +33,4 @@ skge-fix-smp-race.patch
 x86_64-check-for-bad-elf-entry-address.patch
 fix-a-severe-bug.patch
 sd-fix-memory-corruption-with-broken-mode-page-headers.patch
+sbp2-fix-another-deadlock-after-disconnection.patch