[SCSI] zfcp: fix req_list_locking.
The per adapter req_list_lock must be held with interrupts disabled, otherwise
we might end up with nice deadlocks as lockdep tells us (see below).
zfcp 0.0.1804: QDIO problem occurred.
=========================================================
[ INFO: possible irq lock inversion dependency detected ]
2.6.27-rc8-00035-g4a77035-dirty #86
---------------------------------------------------------
swapper/0 just changed the state of lock:
(&adapter->erp_lock){++..}, at: [<
00000000002c82ae>] zfcp_erp_adapter_reopen+0x4e/0x8c
but this lock took another, hard-irq-unsafe lock in the past:
(&adapter->req_list_lock){-+..}
and interrupts could create inverse lock ordering between them.
[tons of backtraces, but only the interesting part follows]
the second lock's dependencies:
-> (&adapter->req_list_lock){-+..} ops:
2280627634176 {
initial-use at:
[<
0000000000071f10>] __lock_acquire+0x504/0x18bc
[<
000000000007335c>] lock_acquire+0x94/0xbc
[<
00000000003d7224>] _spin_lock_irqsave+0x6c/0xb0
[<
00000000002cf684>] zfcp_fsf_req_dismiss_all+0x50/0x140
[<
00000000002c87ee>] zfcp_erp_adapter_strategy_generic+0x66/0x3d0
[<
00000000002c9498>] zfcp_erp_thread+0x88c/0x1318
[<
000000000001b0d2>] kernel_thread_starter+0x6/0xc
[<
000000000001b0cc>] kernel_thread_starter+0x0/0xc
in-softirq-W at:
[<
0000000000072172>] __lock_acquire+0x766/0x18bc
[<
000000000007335c>] lock_acquire+0x94/0xbc
[<
00000000003d7224>] _spin_lock_irqsave+0x6c/0xb0
[<
00000000002ca73e>] zfcp_qdio_int_resp+0xbe/0x2ac
[<
000000000027a1d6>] qdio_kick_inbound_handler+0x82/0xa0
[<
000000000027daba>] tiqdio_inbound_processing+0x62/0xf8
[<
0000000000047ba4>] tasklet_action+0x100/0x1f4
[<
0000000000048b5a>] __do_softirq+0xae/0x154
[<
0000000000021e4a>] do_softirq+0xea/0xf0
[<
00000000000485de>] irq_exit+0xde/0xe8
[<
0000000000268c64>] do_IRQ+0x160/0x1fc
[<
00000000000261a2>] io_return+0x0/0x8
[<
000000000001b8f8>] cpu_idle+0x17c/0x224
hardirq-on-W at:
[<
0000000000072190>] __lock_acquire+0x784/0x18bc
[<
000000000007335c>] lock_acquire+0x94/0xbc
[<
00000000003d702c>] _spin_lock+0x5c/0x9c
[<
00000000002caff6>] zfcp_fsf_req_send+0x3e/0x158
[<
00000000002ce7fe>] zfcp_fsf_exchange_config_data+0x106/0x124
[<
00000000002c8948>] zfcp_erp_adapter_strategy_generic+0x1c0/0x3d0
[<
00000000002c98ea>] zfcp_erp_thread+0xcde/0x1318
[<
000000000001b0d2>] kernel_thread_starter+0x6/0xc
[<
000000000001b0cc>] kernel_thread_starter+0x0/0xc
}
... key at: [<
0000000000e356c8>] __key.26629+0x0/0x8
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Christof Schmitt <christof.schmit@de.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>