]> git.baikalelectronics.ru Git - kernel.git/commit
scsi: target: core: Remove in_interrupt() check in transport_handle_cdb_direct()
authorAhmed S. Darwish <a.darwish@linutronix.de>
Sun, 20 Dec 2020 20:36:38 +0000 (21:36 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 23 Jan 2021 01:25:25 +0000 (20:25 -0500)
commit3038a012ce3e205d2124ca7616dfc42f886f16ac
treee62678b4b0166116c3e5a09a71da1c8bfbcd0a71
parentaf57f7d556dedda0dcb75d2e68606b1480f75470
scsi: target: core: Remove in_interrupt() check in transport_handle_cdb_direct()

transport_handle_cdb_direct() uses in_interrupt() to detect if it is safe
to sleep. It produces a stack trace and returns with an error which is
clearly for debugging.

The usage of in_interrupt() in drivers is phased out and Linus clearly
requested that code which changes behaviour depending on context should
either be separated or the context be conveyed in an argument passed by the
caller, which usually knows the context.

transport_handle_cdb_direct() has a comment saying that it may only be
invoked from process context. It invokes transport_generic_new_cmd() which
performs GFP_KERNEL memory allocations. in_interrupt() does not detect all
the contexts where it is invalid to sleep (for the blocking GFP_KERNEL
allocation) as it fails to detect sections with disabled preemption.

Replace the in_interrupt() based check with a might_sleep() annotation.

Link: https://lore.kernel.org/r/20201220203638.43615-7-bigeasy@linutronix.de
Signed-off-by: Ahmed S. Darwish <a.darwish@linutronix.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/target_core_transport.c