[SCSI] ibmvfc: Fix deadlock in EH
Fixes the following deadlock scenario shown below. We currently allow
queuecommand to send commands when the ibmvfc workqueue is scanning for
new rports, so we should also allow EH to function at this time as well.
scsi_eh_3 D
0000000000000000 12304 1279 2
Call Trace:
[
c0000002f7257730] [
c0000002f72577e0] 0xc0000002f72577e0 (unreliable)
[
c0000002f7257900] [
c0000000000118f4] .__switch_to+0x158/0x1a0
[
c0000002f72579a0] [
c0000000004f8b40] .schedule+0x8d4/0x9dc
[
c0000002f7257b60] [
c0000000004f8f08] .schedule_timeout+0xa8/0xe8
[
c0000002f7257c50] [
d0000000001d23e0] .ibmvfc_wait_while_resetting+0xe4/0x140 [ibmvfc]
[
c0000002f7257d20] [
d0000000001d3984] .ibmvfc_eh_abort_handler+0x60/0xe4 [ibmvfc]
[
c0000002f7257dc0] [
d000000000366714] .scsi_error_handler+0x38c/0x674 [scsi_mod]
[
c0000002f7257f00] [
c0000000000a7470] .kthread+0x78/0xc4
[
c0000002f7257f90] [
c000000000029b8c] .kernel_thread+0x4c/0x68
ibmvfc_3 D
0000000000000000 12432 1280 2
Call Trace:
[
c0000002f7253540] [
c0000002f72535f0] 0xc0000002f72535f0 (unreliable)
[
c0000002f7253710] [
c0000000000118f4] .__switch_to+0x158/0x1a0
[
c0000002f72537b0] [
c0000000004f8b40] .schedule+0x8d4/0x9dc
[
c0000002f7253970] [
c0000000004f8e98] .schedule_timeout+0x38/0xe8
[
c0000002f7253a60] [
c0000000004f80cc] .wait_for_common+0x138/0x220
[
c0000002f7253b40] [
c0000000000a2784] .flush_cpu_workqueue+0xac/0xcc
[
c0000002f7253c10] [
c0000000000a2960] .flush_workqueue+0x58/0xa0
[
c0000002f7253ca0] [
d0000000000827fc] .fc_flush_work+0x4c/0x64 [scsi_transport_fc]
[
c0000002f7253d20] [
d000000000082db4] .fc_remote_port_add+0x48/0x6c4 [scsi_transport_fc]
[
c0000002f7253dd0] [
d0000000001d7d04] .ibmvfc_work+0x820/0xa7c [ibmvfc]
[
c0000002f7253f00] [
c0000000000a7470] .kthread+0x78/0xc4
[
c0000002f7253f90] [
c000000000029b8c] .kernel_thread+0x4c/0x68
fc_wq_3 D
0000000000000000 10720 1283 2
Call Trace:
[
c0000002f559ac30] [
c0000002f559ace0] 0xc0000002f559ace0 (unreliable)
[
c0000002f559ae00] [
c0000000000118f4] .__switch_to+0x158/0x1a0
[
c0000002f559aea0] [
c0000000004f8b40] .schedule+0x8d4/0x9dc
[
c0000002f559b060] [
c0000000004f8e98] .schedule_timeout+0x38/0xe8
[
c0000002f559b150] [
c0000000004f80cc] .wait_for_common+0x138/0x220
[
c0000002f559b230] [
c0000000002721c4] .blk_execute_rq+0xb4/0x100
[
c0000002f559b360] [
d00000000036a1f8] .scsi_execute+0x118/0x194 [scsi_mod]
[
c0000002f559b420] [
d00000000036a32c] .scsi_execute_req+0xb8/0x124 [scsi_mod]
[
c0000002f559b500] [
d0000000000c1330] .sd_sync_cache+0x8c/0x108 [sd_mod]
[
c0000002f559b5e0] [
d0000000000c15b4] .sd_shutdown+0x9c/0x158 [sd_mod]
[
c0000002f559b660] [
d0000000000c16d0] .sd_remove+0x60/0xb4 [sd_mod]
[
c0000002f559b700] [
c000000000392ecc] .__device_release_driver+0xd0/0x118
[
c0000002f559b7a0] [
c000000000393080] .device_release_driver+0x30/0x54
[
c0000002f559b830] [
c000000000392108] .bus_remove_device+0x128/0x16c
[
c0000002f559b8d0] [
c00000000038f94c] .device_del+0x158/0x234
[
c0000002f559b960] [
d00000000036f078] .__scsi_remove_device+0x5c/0xd4 [scsi_mod]
[
c0000002f559b9f0] [
d00000000036f124] .scsi_remove_device+0x34/0x58 [scsi_mod]
[
c0000002f559ba80] [
d00000000036f204] .__scsi_remove_target+0xb4/0x120 [scsi_mod]
[
c0000002f559bb10] [
d00000000036f338] .__remove_child+0x2c/0x44 [scsi_mod]
[
c0000002f559bb90] [
c00000000038f11c] .device_for_each_child+0x54/0xb4
[
c0000002f559bc50] [
d00000000036f2e0] .scsi_remove_target+0x70/0x9c [scsi_mod]
[
c0000002f559bce0] [
d000000000083454] .fc_starget_delete+0x24/0x3c [scsi_transport_fc]
[
c0000002f559bd70] [
c0000000000a2368] .run_workqueue+0x118/0x208
[
c0000002f559be30] [
c0000000000a2580] .worker_thread+0x128/0x154
[
c0000002f559bf00] [
c0000000000a7470] .kthread+0x78/0xc4
[
c0000002f559bf90] [
c000000000029b8c] .kernel_thread+0x4c/0x68
Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>