linux-stable/drivers/scsi
Bart Van Assche 5480e299b5 scsi: iscsi: Fix a potential deadlock in the timeout handler
Some time ago the block layer was modified such that timeout handlers are
called from thread context instead of interrupt context. Make it safe to
run the iSCSI timeout handler in thread context. This patch fixes the
following lockdep complaint:

================================
WARNING: inconsistent lock state
5.5.1-dbg+ #11 Not tainted
--------------------------------
inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
kworker/7:1H/206 [HC0[0]:SC0[0]:HE1:SE1] takes:
ffff88802d9827e8 (&(&session->frwd_lock)->rlock){+.?.}, at: iscsi_eh_cmd_timed_out+0xa6/0x6d0 [libiscsi]
{IN-SOFTIRQ-W} state was registered at:
  lock_acquire+0x106/0x240
  _raw_spin_lock+0x38/0x50
  iscsi_check_transport_timeouts+0x3e/0x210 [libiscsi]
  call_timer_fn+0x132/0x470
  __run_timers.part.0+0x39f/0x5b0
  run_timer_softirq+0x63/0xc0
  __do_softirq+0x12d/0x5fd
  irq_exit+0xb3/0x110
  smp_apic_timer_interrupt+0x131/0x3d0
  apic_timer_interrupt+0xf/0x20
  default_idle+0x31/0x230
  arch_cpu_idle+0x13/0x20
  default_idle_call+0x53/0x60
  do_idle+0x38a/0x3f0
  cpu_startup_entry+0x24/0x30
  start_secondary+0x222/0x290
  secondary_startup_64+0xa4/0xb0
irq event stamp: 1383705
hardirqs last  enabled at (1383705): [<ffffffff81aace5c>] _raw_spin_unlock_irq+0x2c/0x50
hardirqs last disabled at (1383704): [<ffffffff81aacb98>] _raw_spin_lock_irq+0x18/0x50
softirqs last  enabled at (1383690): [<ffffffffa0e2efea>] iscsi_queuecommand+0x76a/0xa20 [libiscsi]
softirqs last disabled at (1383682): [<ffffffffa0e2e998>] iscsi_queuecommand+0x118/0xa20 [libiscsi]

other info that might help us debug this:
 Possible unsafe locking scenario:

       CPU0
       ----
  lock(&(&session->frwd_lock)->rlock);
  <Interrupt>
    lock(&(&session->frwd_lock)->rlock);

 *** DEADLOCK ***

2 locks held by kworker/7:1H/206:
 #0: ffff8880d57bf928 ((wq_completion)kblockd){+.+.}, at: process_one_work+0x472/0xab0
 #1: ffff88802b9c7de8 ((work_completion)(&q->timeout_work)){+.+.}, at: process_one_work+0x476/0xab0

stack backtrace:
CPU: 7 PID: 206 Comm: kworker/7:1H Not tainted 5.5.1-dbg+ #11
Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
Workqueue: kblockd blk_mq_timeout_work
Call Trace:
 dump_stack+0xa5/0xe6
 print_usage_bug.cold+0x232/0x23b
 mark_lock+0x8dc/0xa70
 __lock_acquire+0xcea/0x2af0
 lock_acquire+0x106/0x240
 _raw_spin_lock+0x38/0x50
 iscsi_eh_cmd_timed_out+0xa6/0x6d0 [libiscsi]
 scsi_times_out+0xf4/0x440 [scsi_mod]
 scsi_timeout+0x1d/0x20 [scsi_mod]
 blk_mq_check_expired+0x365/0x3a0
 bt_iter+0xd6/0xf0
 blk_mq_queue_tag_busy_iter+0x3de/0x650
 blk_mq_timeout_work+0x1af/0x380
 process_one_work+0x56d/0xab0
 worker_thread+0x7a/0x5d0
 kthread+0x1bc/0x210
 ret_from_fork+0x24/0x30

Fixes: 287922eb0b ("block: defer timeouts to a workqueue")
Cc: Christoph Hellwig <hch@lst.de>
Cc: Keith Busch <keith.busch@intel.com>
Cc: Lee Duncan <lduncan@suse.com>
Cc: Chris Leech <cleech@redhat.com>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20191209173457.187370-1-bvanassche@acm.org
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Lee Duncan <lduncan@suse.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2019-12-09 19:19:28 -05:00
..
aacraid scsi: aacraid: bump version 2019-10-18 19:34:18 -04:00
aic7xxx SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
aic94xx scsi: aic94xx: Remove unnecessary null check 2019-07-30 12:12:59 -04:00
arcmsr scsi: arcmsr: fix indentation issues 2019-11-19 21:37:34 -05:00
arm scsi: Fix various misspellings of "connect" 2019-10-24 21:22:32 -04:00
be2iscsi
bfa scsi: bfa: Make restart_bfa static 2019-09-30 23:59:53 -04:00
bnx2fc scsi: bnx2fc: timeout calculation invalid for bnx2fc_eh_abort() 2019-11-19 22:31:18 -05:00
bnx2i scsi: bnx2i: fix potential use after free 2019-11-19 21:37:34 -05:00
csiostor scsi: csiostor: Remove set but not used variable 'rln' 2019-11-12 22:21:34 -05:00
cxgbi scsi: cxgb4i: remove set but not used variable 'ppmax' 2019-10-24 21:15:30 -04:00
cxlflash SCSI misc on 20191130 2019-12-02 13:37:02 -08:00
device_handler SCSI fixes on 20191101 2019-11-07 06:43:18 -07:00
dpt
esas2r SCSI misc on 20191130 2019-12-02 13:37:02 -08:00
fcoe SCSI misc on 20190919 2019-09-21 10:50:15 -07:00
fnic scsi: fnic: fix use after free 2019-11-06 00:04:02 -05:00
hisi_sas scsi: hisi_sas: Stop converting a bool into a bool 2019-11-12 22:21:34 -05:00
ibmvscsi SCSI misc on 20190919 2019-09-21 10:50:15 -07:00
ibmvscsi_tgt scsi: ibmvscsi_tgt: Remove unneeded variable rc 2019-11-21 20:47:17 -05:00
isci scsi: Fix various misspellings of "connect" 2019-10-24 21:22:32 -04:00
libfc scsi: fcoe: Embed fc_rport_priv in fcoe_rport structure 2019-07-29 21:12:35 -04:00
libsas scsi: libsas: stop discovering if oob mode is disconnected 2019-12-09 19:15:52 -05:00
lpfc scsi: lpfc: Fix memory leak on lpfc_bsg_write_ebuf_set func 2019-12-09 18:07:34 -05:00
megaraid SCSI misc on 20191207 2019-12-08 12:23:42 -08:00
mpt3sas scsi: mpt3sas: change allocation option 2019-10-24 21:20:31 -04:00
mvsas scsi: mvsas: remove redundant assignment to variable rc 2019-09-30 22:42:41 -04:00
pcmcia scsi: nsp_cs: enable compile-testing on 64-bit 2019-11-12 22:21:34 -05:00
pm8001 SCSI misc on 20191207 2019-12-08 12:23:42 -08:00
qedf scsi: Fix various misspellings of "connect" 2019-10-24 21:22:32 -04:00
qedi scsi: Fix various misspellings of "connect" 2019-10-24 21:22:32 -04:00
qla2xxx scsi: qla2xxx: Add debug dump of LOGO payload and ELS IOCB 2019-12-09 18:29:38 -05:00
qla4xxx scsi: iscsi: qla4xxx: fix double free in probe 2019-12-09 19:01:51 -05:00
smartpqi scsi: smartpqi: bump version 2019-10-09 23:11:32 -04:00
snic
sym53c8xx_2 scsi: sym53c8xx_2: remove redundant assignment to retv 2019-08-12 21:58:07 -04:00
ufs scsi: ufs: Disable autohibern8 feature in Cadence UFS 2019-12-09 19:03:38 -05:00
.gitignore
3w-9xxx.c
3w-9xxx.h
3w-sas.c
3w-sas.h
3w-xxxx.c compat_ioctl: move more drivers to compat_ptr_ioctl 2019-10-23 17:23:44 +02:00
3w-xxxx.h
53c700.c
53c700.h
53c700.scr
53c700_d.h_shipped
a100u2w.c
a100u2w.h
a2091.c
a2091.h
a3000.c scsi: Use pr_warn instead of pr_warning 2019-10-18 15:01:54 +02:00
a3000.h
a4000t.c
advansys.c SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
aha152x.c SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
aha152x.h
aha1542.c
aha1542.h
aha1740.c
aha1740.h
am53c974.c
atari_scsi.c scsi: atari_scsi: sun3_scsi: Set sg_tablesize to 1 instead of SG_NONE 2019-11-12 22:21:34 -05:00
atp870u.c scsi: core: Clean up SG_NONE 2019-11-12 22:21:35 -05:00
atp870u.h
BusLogic.c
BusLogic.h
bvme6000_scsi.c
ch.c scsi: ch: Make it possible to open a ch device multiple times again 2019-10-09 23:39:35 -04:00
constants.c
dc395x.c
dc395x.h
dmx3191d.c
dpt_i2o.c
dpti.h
esp_scsi.c SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
esp_scsi.h scsi: esp: use sg helper to iterate over scatterlist 2019-06-20 15:21:33 -04:00
fdomain.c scsi: fdomain: use BSTAT_{MSG|CMD|IO} in fdomain_work() 2019-07-30 12:17:28 -04:00
fdomain.h scsi: fdomain: Add register definitions 2019-06-18 19:46:22 -04:00
fdomain_isa.c scsi: fdomain_isa: use CFG1_IRQ_MASK 2019-07-30 12:18:24 -04:00
fdomain_pci.c
FlashPoint.c
g_NCR5380.c
gdth.c
gdth.h
gdth_ioctl.h
gdth_proc.c
gdth_proc.h
gvp11.c
gvp11.h
hosts.c scsi: core: avoid host-wide host_busy counter for scsi_mq 2019-11-01 20:12:50 -04:00
hpsa.c SCSI fixes on 20191101 2019-11-07 06:43:18 -07:00
hpsa.h
hpsa_cmd.h SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
hptiop.c
hptiop.h
imm.c SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
imm.h
initio.c
initio.h
ipr.c SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
ipr.h
ips.c scsi: ips: make array 'options' static const, makes object smaller 2019-09-30 22:46:40 -04:00
ips.h
iscsi_boot_sysfs.c
iscsi_tcp.c scsi: iscsi: Don't send data to unbound connection 2019-11-19 21:37:35 -05:00
iscsi_tcp.h
jazz_esp.c
Kconfig SCSI fixes on 20191101 2019-11-07 06:43:18 -07:00
lasi700.c
libiscsi.c scsi: iscsi: Fix a potential deadlock in the timeout handler 2019-12-09 19:19:28 -05:00
libiscsi_tcp.c SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
mac53c94.c
mac53c94.h
mac_esp.c
mac_scsi.c scsi: atari_scsi: sun3_scsi: Set sg_tablesize to 1 instead of SG_NONE 2019-11-12 22:21:34 -05:00
Makefile scsi: remove pointless $(MODVERDIR)/$(obj)/53c700.ver 2019-07-17 22:39:27 +09:00
megaraid.c scsi: megaraid: disable device when probe failed after enabled device 2019-09-23 23:09:42 -04:00
megaraid.h
mesh.c
mesh.h
mvme16x_scsi.c
mvme147.c
mvme147.h
mvumi.c SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
mvumi.h
myrb.c
myrb.h
myrs.c
myrs.h
ncr53c8xx.c scsi: Fix various misspellings of "connect" 2019-10-24 21:22:32 -04:00
ncr53c8xx.h
NCR5380.c scsi: NCR5380: Add disconnect_mask module parameter 2019-11-19 21:37:34 -05:00
NCR5380.h Revert "scsi: ncr5380: Increase register polling limit" 2019-06-20 15:37:02 -04:00
nsp32.c scsi: Fix various misspellings of "connect" 2019-10-24 21:22:32 -04:00
nsp32.h
nsp32_debug.c
nsp32_io.h
pmcraid.c compat_ioctl: move more drivers to compat_ptr_ioctl 2019-10-23 17:23:44 +02:00
pmcraid.h
ppa.c scsi: ppa: use sg helper to iterate over scatterlist 2019-06-20 15:21:33 -04:00
ppa.h
ps3rom.c
qla1280.c qla1280: remove SGI SN2 support 2019-08-16 11:33:56 -07:00
qla1280.h qla1280: remove SGI SN2 support 2019-08-16 11:33:56 -07:00
qlogicfas.c
qlogicfas408.c
qlogicfas408.h
qlogicpti.c scsi: qlogicpti: Mark expected switch fall-throughs 2019-08-07 21:32:53 -04:00
qlogicpti.h
raid_class.c
script_asm.pl
scsi.c SCSI misc on 20191130 2019-12-02 13:37:02 -08:00
scsi.h
scsi_common.c
scsi_debug.c scsi: scsi_debug: num_tgts must be >= 0 2019-11-19 21:37:34 -05:00
scsi_debugfs.c scsi: scsi_debugfs: Use for_each_set_bit to simplify code 2019-07-30 12:42:55 -04:00
scsi_debugfs.h
scsi_devinfo.c scsi: devinfo: BLIST_TRY_VPD_PAGES for SanDisk Cruzer Blade 2019-07-11 20:39:22 -04:00
scsi_dh.c
scsi_error.c scsi: core: save/restore command resid for error handling 2019-10-03 21:43:04 -04:00
scsi_ioctl.c
scsi_lib.c SCSI misc on 20191130 2019-12-02 13:37:02 -08:00
scsi_lib_dma.c
scsi_logging.c scsi: core: Log SCSI command age with errors 2019-09-30 23:07:16 -04:00
scsi_logging.h
scsi_netlink.c
scsi_pm.c scsi: core: remove dummy q->dev check 2019-09-12 07:11:58 -06:00
scsi_priv.h scsi: core: avoid host-wide host_busy counter for scsi_mq 2019-11-01 20:12:50 -04:00
scsi_proc.c drivers: Add generic helper to match any device 2019-07-30 13:07:42 +02:00
scsi_sas_internal.h
scsi_scan.c
scsi_sysctl.c
scsi_sysfs.c SCSI misc on 20191130 2019-12-02 13:37:02 -08:00
scsi_trace.c scsi: tracing: Fix handling of TRANSFER LENGTH == 0 for READ(6) and WRITE(6) 2019-11-06 00:06:03 -05:00
scsi_transport_api.h
scsi_transport_fc.c SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
scsi_transport_iscsi.c
scsi_transport_sas.c scsi: scsi_transport_sas: Fix memory leak when removing devices 2019-11-21 21:12:39 -05:00
scsi_transport_spi.c
scsi_transport_srp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 502 2019-06-19 17:09:56 +02:00
scsicam.c
sd.c SCSI misc on 20191207 2019-12-08 12:23:42 -08:00
sd.h SCSI misc on 20191207 2019-12-08 12:23:42 -08:00
sd_dif.c
sd_zbc.c SCSI misc on 20191207 2019-12-08 12:23:42 -08:00
sense_codes.h
ses.c SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
sg.c SCSI misc on 20191130 2019-12-02 13:37:02 -08:00
sgiwd93.c
sim710.c
sni_53c710.c scsi: sni_53c710: fix compilation error 2019-10-09 23:35:42 -04:00
sr.c
sr.h
sr_ioctl.c
sr_vendor.c sr_vendor: support Beurer GL50 evo CD-on-a-chip devices. 2019-11-26 13:02:26 -07:00
st.c compat_ioctl: move tape handling into drivers 2019-10-23 17:23:44 +02:00
st.h
st_options.h
stex.c
storvsc_drv.c scsi: storvsc: Add the support of hibernation 2019-11-21 20:10:44 -05:00
sun3_scsi.c scsi: atari_scsi: sun3_scsi: Set sg_tablesize to 1 instead of SG_NONE 2019-11-12 22:21:34 -05:00
sun3_scsi_vme.c
sun3x_esp.c
sun_esp.c
virtio_scsi.c scsi: virtio_scsi: unplug LUNs when events missed 2019-09-10 22:10:17 -04:00
vmw_pvscsi.c SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
vmw_pvscsi.h
wd33c93.c scsi: wd33c93: Mark expected switch fall-through 2019-08-07 21:35:59 -04:00
wd33c93.h
wd719x.c SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
wd719x.h
xen-scsifront.c
zalon.c
zorro7xx.c
zorro_esp.c scsi: zorro_esp: Limit DMA transfers to 65536 bytes (except on Fastlane) 2019-11-12 22:21:34 -05:00