--- /dev/null
+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;