From: Sasha Levin <Alexander.Levin@microsoft.com>
To: "stable@vger.kernel.org" <stable@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Cc: Bart Van Assche <bart.vanassche@wdc.com>,
"Martin K . Petersen" <martin.petersen@oracle.com>,
James Bottomley <jejb@linux.vnet.ibm.com>,
Sasha Levin <Alexander.Levin@microsoft.com>
Subject: [PATCH AUTOSEL 4.14 35/87] scsi: klist: Make it safe to use klists in atomic context
Date: Mon, 17 Sep 2018 03:02:46 +0000 [thread overview]
Message-ID: <20180917030220.245686-35-alexander.levin@microsoft.com> (raw)
In-Reply-To: <20180917030220.245686-1-alexander.levin@microsoft.com>
From: Bart Van Assche <bart.vanassche@wdc.com>
[ Upstream commit 624fa7790f80575a4ec28fbdb2034097dc18d051 ]
In the scsi_transport_srp implementation it cannot be avoided to
iterate over a klist from atomic context when using the legacy block
layer instead of blk-mq. Hence this patch that makes it safe to use
klists in atomic context. This patch avoids that lockdep reports the
following:
WARNING: SOFTIRQ-safe -> SOFTIRQ-unsafe lock order detected
Possible interrupt unsafe locking scenario:
CPU0 CPU1
---- ----
lock(&(&k->k_lock)->rlock);
local_irq_disable();
lock(&(&q->__queue_lock)->rlock);
lock(&(&k->k_lock)->rlock);
<Interrupt>
lock(&(&q->__queue_lock)->rlock);
stack backtrace:
Workqueue: kblockd blk_timeout_work
Call Trace:
dump_stack+0xa4/0xf5
check_usage+0x6e6/0x700
__lock_acquire+0x185d/0x1b50
lock_acquire+0xd2/0x260
_raw_spin_lock+0x32/0x50
klist_next+0x47/0x190
device_for_each_child+0x8e/0x100
srp_timed_out+0xaf/0x1d0 [scsi_transport_srp]
scsi_times_out+0xd4/0x410 [scsi_mod]
blk_rq_timed_out+0x36/0x70
blk_timeout_work+0x1b5/0x220
process_one_work+0x4fe/0xad0
worker_thread+0x63/0x5a0
kthread+0x1c1/0x1e0
ret_from_fork+0x24/0x30
See also commit c9ddf73476ff ("scsi: scsi_transport_srp: Fix shost to
rport translation").
Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
Cc: Martin K. Petersen <martin.petersen@oracle.com>
Cc: James Bottomley <jejb@linux.vnet.ibm.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
lib/klist.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/lib/klist.c b/lib/klist.c
index 0507fa5d84c5..f6b547812fe3 100644
--- a/lib/klist.c
+++ b/lib/klist.c
@@ -336,8 +336,9 @@ struct klist_node *klist_prev(struct klist_iter *i)
void (*put)(struct klist_node *) = i->i_klist->put;
struct klist_node *last = i->i_cur;
struct klist_node *prev;
+ unsigned long flags;
- spin_lock(&i->i_klist->k_lock);
+ spin_lock_irqsave(&i->i_klist->k_lock, flags);
if (last) {
prev = to_klist_node(last->n_node.prev);
@@ -356,7 +357,7 @@ struct klist_node *klist_prev(struct klist_iter *i)
prev = to_klist_node(prev->n_node.prev);
}
- spin_unlock(&i->i_klist->k_lock);
+ spin_unlock_irqrestore(&i->i_klist->k_lock, flags);
if (put && last)
put(last);
@@ -377,8 +378,9 @@ struct klist_node *klist_next(struct klist_iter *i)
void (*put)(struct klist_node *) = i->i_klist->put;
struct klist_node *last = i->i_cur;
struct klist_node *next;
+ unsigned long flags;
- spin_lock(&i->i_klist->k_lock);
+ spin_lock_irqsave(&i->i_klist->k_lock, flags);
if (last) {
next = to_klist_node(last->n_node.next);
@@ -397,7 +399,7 @@ struct klist_node *klist_next(struct klist_iter *i)
next = to_klist_node(next->n_node.next);
}
- spin_unlock(&i->i_klist->k_lock);
+ spin_unlock_irqrestore(&i->i_klist->k_lock, flags);
if (put && last)
put(last);
--
2.17.1
next prev parent reply other threads:[~2018-09-17 3:23 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-17 3:02 [PATCH AUTOSEL 4.14 01/87] crypto: skcipher - Fix -Wstringop-truncation warnings Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 02/87] iio: adc: ina2xx: avoid kthread_stop() with stale task_struct Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 04/87] vmci: type promotion bug in qp_host_get_user_memory() Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 03/87] tsl2550: fix lux1_input error in low light Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 05/87] x86/numa_emulation: Fix emulated-to-physical node mapping Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 06/87] staging: rts5208: fix missing error check on call to rtsx_write_register Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 07/87] power: supply: axp288_charger: Fix initial constant_charge_current value Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 08/87] misc: sram: enable clock before registering regions Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 09/87] serial: sh-sci: Stop RX FIFO timer during port shutdown Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 10/87] uwb: hwa-rc: fix memory leak at probe Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 11/87] power: vexpress: fix corruption in notifier registration Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 12/87] iommu/amd: make sure TLB to be flushed before IOVA freed Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 13/87] Bluetooth: Add a new Realtek 8723DE ID 0bda:b009 Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 15/87] 6lowpan: iphc: reset mac_header after decompress to fix panic Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 14/87] USB: serial: kobil_sct: fix modem-status error handling Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 16/87] iommu/msm: Don't call iommu_device_{,un}link from atomic context Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 18/87] power: remove possible deadlock when unregistering power_supply Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 17/87] s390/mm: correct allocate_pgste proc_handler callback Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 20/87] RDMA/bnxt_re: Fix a couple off by one bugs Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 19/87] md-cluster: clear another node's suspend_area after the copy is finished Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 21/87] RDMA/i40w: Hold read semaphore while looking after VMA Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 22/87] arm64: fix infinite stacktrace Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 23/87] IB/core: type promotion bug in rdma_rw_init_one_mr() Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 25/87] IB/mlx4: Test port number before querying type Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 24/87] media: exynos4-is: Prevent NULL pointer dereference in __isp_video_try_fmt() Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 27/87] media: fsl-viu: fix error handling in viu_of_probe() Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 26/87] powerpc/kdump: Handle crashkernel memory reservation failure Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 28/87] media: staging/imx: fill vb2_v4l2_buffer field entry Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 30/87] x86/tsc: Add missing header to tsc_msr.c Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 29/87] media: sta2x11: Add video_device and vb2_queue locks Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 31/87] ARM: hwmod: RTC: Don't assume lock/unlock will be called with irq enabled Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 33/87] ARM: dts: ls1021a: Add missing cooling device properties for CPUs Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 32/87] x86/entry/64: Add two more instruction suffixes Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 34/87] scsi: target/iscsi: Make iscsit_ta_authentication() respect the output buffer size Sasha Levin
2018-09-17 3:02 ` Sasha Levin [this message]
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 36/87] scsi: ibmvscsi: Improve strings handling Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 37/87] scsi: target: Avoid that EXTENDED COPY commands trigger lock inversion Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 38/87] usb: wusbcore: security: cast sizeof to int for comparison Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 39/87] ath10k: sdio: use same endpoint id for all packets in a bundle Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 40/87] ath10k: sdio: set skb len for all rx packets Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 41/87] powerpc/powernv/ioda2: Reduce upper limit for DMA window size Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 43/87] alarmtimer: Prevent overflow for relative nanosleep Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 42/87] s390/sysinfo: add missing #ifdef CONFIG_PROC_FS Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 44/87] s390/dasd: correct numa_node in dasd_alloc_queue Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 45/87] s390/scm_blk: correct numa_node in scm_blk_dev_setup Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 47/87] mtd: rawnand: atmel: add module param to avoid using dma Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 46/87] s390/extmem: fix gcc 8 stringop-overflow warning Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 48/87] iio: accel: adxl345: convert address field usage in iio_chan_spec Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 50/87] posix-timers: Sanitize overrun handling Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 49/87] posix-timers: Make forward callback return s64 Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 52/87] nfp: fail probe if serial or interface id is missing Sasha Levin
2018-09-17 14:03 ` Jakub Kicinski
2018-09-27 19:50 ` Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 51/87] ALSA: snd-aoa: add of_node_put() in error path Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 53/87] media: s3c-camif: ignore -ENOIOCTLCMD from v4l2_subdev_call for s_power Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 54/87] media: soc_camera: ov772x: correct setting of banding filter Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 55/87] media: omap3isp: zero-initialize the isp cam_xclk{a,b} initial data Sasha Levin
2018-09-17 3:02 ` [PATCH AUTOSEL 4.14 56/87] staging: android: ashmem: Fix mmap size validation Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 57/87] drivers/tty: add error handling for pcmcia_loop_config Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 58/87] media: tm6000: add error handling for dvb_register_adapter Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 59/87] ALSA: hda: Add AZX_DCAPS_PM_RUNTIME for AMD Raven Ridge Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 60/87] net: phy: xgmiitorgmii: Check read_status results Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 61/87] ath10k: protect ath10k_htt_rx_ring_free with rx_ring.lock Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 63/87] drm/sun4i: Fix releasing node when enumerating enpoints Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 62/87] net: phy: xgmiitorgmii: Check phy_driver ready before accessing Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 64/87] ath10k: transmit queued frames after processing rx packets Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 65/87] rndis_wlan: potential buffer overflow in rndis_wlan_auth_indication() Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 67/87] wlcore: Add missing PM call for wlcore_cmd_wait_for_event_or_timeout() Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 66/87] brcmsmac: fix wrap around in conversion from constant to s16 Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 68/87] ARM: mvebu: declare asm symbols as character arrays in pmsu.c Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 69/87] arm: dts: mediatek: Add missing cooling device properties for CPUs Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 71/87] MIPS: boot: fix build rule of vmlinux.its.S Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 70/87] HID: hid-ntrig: add error handling for sysfs_create_group Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 72/87] perf/x86/intel/lbr: Fix incomplete LBR call stack Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 73/87] scsi: bnx2i: add error handling for ioremap_nocache Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 75/87] audit: Fix extended comparison of GID/EGID Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 74/87] iomap: complete partial direct I/O writes synchronously Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 76/87] scsi: megaraid_sas: Update controller info during resume Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 78/87] ASoC: dapm: Fix potential DAI widget pointer deref when linking DAIs Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 80/87] gpio: Fix wrong rounding in gpio-menz127 Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 79/87] module: exclude SHN_UNDEF symbols from kallsyms api Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 81/87] nfsd: fix corrupted reply to badly ordered compound Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 83/87] fs/lock: skip lock owner pid translation in case we are in init_pid_ns Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 84/87] Input: xen-kbdfront - fix multi-touch XenStore node's locations Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 85/87] iio: 104-quad-8: Fix off-by-one error in register selection Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 86/87] ARM: dts: dra7: fix DCAN node addresses Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 87/87] PCI: Whitelist Thunderbolt ports for runtime D3 Sasha Levin
2018-09-17 8:25 ` Lukas Wunner
2018-09-27 19:43 ` Sasha Levin
-- strict thread matches above, loose matches on Subject: below --
2018-09-17 3:03 [AUTOSEL,4.14,77/87] EDAC, i7core: Fix memleaks and use-after-free on probe and remove Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 77/87] " Sasha Levin
2018-09-17 3:03 [AUTOSEL,4.14,82/87] EDAC: Fix memleak in module init error path Sasha Levin
2018-09-17 3:03 ` [PATCH AUTOSEL 4.14 82/87] " Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180917030220.245686-35-alexander.levin@microsoft.com \
--to=alexander.levin@microsoft.com \
--cc=bart.vanassche@wdc.com \
--cc=jejb@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.