ieee1394: sbp2: prevent rare deadlock in shutdown
authorStefan Richter <stefanr@s5r6.in-berlin.de>
Mon, 14 Aug 2006 16:59:00 +0000 (18:59 +0200)
committerStefan Richter <stefanr@s5r6.in-berlin.de>
Sun, 17 Sep 2006 17:34:44 +0000 (19:34 +0200)
commit2cccbb555c77e641de9008660e08bdf17fc4206a
tree62cd3291088cce86f8a4ef9e25b1072b5c16ae2e
parent902abed1587805fe8513e10aef6643f58a6de0a6
ieee1394: sbp2: prevent rare deadlock in shutdown

Scsi_remove_device() may go into uninterruptible sleep if blocked.
Therefore sbp2_remove() unblocks the Scsi_Host before the device is
requested to be removed.  But there could be another 1394 bus reset
after that which would block the host again.  The 1394 subsystem won't
call sbp2_update() concurrently to sbp2_remove(), which is why there is
no chance for sbp2_remove() to be unblocked by sbp2_update().

The fix is to tell sbp2's bus reset handler when a device is to be shut
down so that it skips scsi_block_requests() on that host.  As before,
any new commands after a reset without reconnect will be failed quickly
by sbp2scsi_queuecommand().

In the long term, means to go without scsi_block_requests() should be
found.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
drivers/ieee1394/sbp2.c
drivers/ieee1394/sbp2.h