target: Fix interrupt context bug with stats_lock and core_tmr_alloc_req
authorNicholas Bellinger <nab@linux-iscsi.org>
Fri, 20 May 2011 03:19:10 +0000 (20:19 -0700)
committerSteve Conklin <sconklin@canonical.com>
Fri, 15 Jul 2011 17:21:00 +0000 (12:21 -0500)
commita39af7662feaa59d7a66db4fbb9318639a4e45fe
tree4de2f63fd0769798a3189cb2ab1497f4ce978984
parentae13b9c8b4d38cef997274929a72f619bbadbd37
target: Fix interrupt context bug with stats_lock and core_tmr_alloc_req

BugLink: http://bugs.launchpad.net/bugs/793702

commit 53ab6709b4d35b1924240854d794482fd7d33d4a upstream.

This patch fixes two bugs wrt to the interrupt context usage of target
core with HW target mode drivers.  It first converts the usage of struct
se_device->stats_lock in transport_get_lun_for_cmd() and core_tmr_lun_reset()
to properly use spin_lock_irq() to address an BUG with CONFIG_LOCKDEP_SUPPORT=y
enabled.

This patch also adds a 'in_interrupt()' check to allow GFP_ATOMIC usage from
core_tmr_alloc_req() to fix a 'sleeping in interrupt context' BUG with HW
target fabrics that require this logic to function.

Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: James Bottomley <jbottomley@parallels.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
drivers/target/target_core_device.c
drivers/target/target_core_tmr.c