mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
f6fe0b2d35
the nvme_handle_cqe() interrupt handler calls nvme_complete_async_event()
but the latter may call nvme_auth_stop() which is a blocking function.
Sleeping functions can't be called in interrupt context
BUG: sleeping function called from invalid context
in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 0, name: swapper/15
Call Trace:
<IRQ>
__cancel_work_timer+0x31e/0x460
? nvme_change_ctrl_state+0xcf/0x3c0 [nvme_core]
? nvme_change_ctrl_state+0xcf/0x3c0 [nvme_core]
nvme_complete_async_event+0x365/0x480 [nvme_core]
nvme_poll_cq+0x262/0xe50 [nvme]
Fix the bug by moving nvme_auth_stop() to fw_act_work
(executed by the nvme_wq workqueue)
Fixes:
|
||
---|---|---|
.. | ||
apple.c | ||
auth.c | ||
constants.c | ||
core.c | ||
fabrics.c | ||
fabrics.h | ||
fault_inject.c | ||
fc.c | ||
fc.h | ||
hwmon.c | ||
ioctl.c | ||
Kconfig | ||
Makefile | ||
multipath.c | ||
nvme.h | ||
pci.c | ||
pr.c | ||
rdma.c | ||
sysfs.c | ||
tcp.c | ||
trace.c | ||
trace.h | ||
zns.c |