Files
linux/drivers/scsi
Mike Christie c4244895dd Fix regressions in scsi_internal_device_block
commit 986fe6c7f5 upstream.

Deleting a SCSI device on a blocked fc_remote_port (before
fast_io_fail_tmo fires) results in a hanging thread:

  STACK:
  0 schedule+1108 [0x5cac48]
  1 schedule_timeout+528 [0x5cb7fc]
  2 wait_for_common+266 [0x5ca6be]
  3 blk_execute_rq+160 [0x354054]
  4 scsi_execute+324 [0x3b7ef4]
  5 scsi_execute_req+162 [0x3b80ca]
  6 sd_sync_cache+138 [0x3cf662]
  7 sd_shutdown+138 [0x3cf91a]
  8 sd_remove+112 [0x3cfe4c]
  9 __device_release_driver+124 [0x3a08b8]
10 device_release_driver+60 [0x3a0a5c]
11 bus_remove_device+266 [0x39fa76]
12 device_del+340 [0x39d818]
13 __scsi_remove_device+204 [0x3bcc48]
14 scsi_remove_device+66 [0x3bcc8e]
15 sysfs_schedule_callback_work+50 [0x260d66]
16 worker_thread+622 [0x162326]
17 kthread+160 [0x1680b0]
18 kernel_thread_starter+6 [0x10aaea]

During the delete, the SCSI device is in moved to SDEV_CANCEL.  When
the FC transport class later calls scsi_target_unblock, this has no
effect, since scsi_internal_device_unblock ignores SCSI devics in this
state.

It looks like all these are regressions caused by:
5c10e63c94
[SCSI] limit state transitions in scsi_internal_device_unblock

Fix by rejecting offline and cancel in the state transition.

Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
[jejb: Original patch by Christof Schmitt, modified by Mike Christie]
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-11-22 10:47:38 -08:00
..
2009-11-11 12:21:06 -05:00
2010-01-28 15:01:24 -08:00
2010-05-26 14:29:20 -07:00
2009-06-12 10:02:03 -05:00
2009-08-22 17:52:22 -05:00
2008-01-11 18:22:30 -06:00
2009-05-15 12:23:32 -04:00
2009-05-15 12:24:59 -04:00
2009-05-15 12:24:59 -04:00
2009-04-03 10:17:31 -05:00
2009-04-03 10:17:31 -05:00
2009-04-03 10:17:17 -05:00
2009-04-03 10:17:17 -05:00
2008-10-16 16:52:06 +02:00
2009-08-22 17:51:50 -05:00
2009-10-31 12:11:38 -07:00
2008-12-29 11:24:14 -06:00
2008-08-29 02:13:10 -07:00
2010-11-22 10:47:38 -08:00
2008-10-09 08:56:13 +02:00
2010-01-06 15:03:11 -08:00
2008-12-28 20:00:03 +01:00
2009-06-15 10:09:30 -05:00
2008-01-30 13:14:02 -06:00
2009-09-26 10:17:19 -07:00
2008-01-30 13:14:02 -06:00
2008-10-23 11:42:17 -05:00
2008-07-02 15:06:25 -06:00
2008-02-07 18:02:44 -06:00
2010-01-06 15:03:13 -08:00
2010-01-06 15:03:13 -08:00
2008-10-23 11:42:19 -05:00
2007-10-19 23:22:55 +02:00