linux/drivers
Chris Leech ffe0c49167 nvme-tcp: lockdep: annotate in-kernel sockets
[ Upstream commit 841aee4d75 ]

Put NVMe/TCP sockets in their own class to avoid some lockdep warnings.
Sockets created by nvme-tcp are not exposed to user-space, and will not
trigger certain code paths that the general socket API exposes.

Lockdep complains about a circular dependency between the socket and
filesystem locks, because setsockopt can trigger a page fault with a
socket lock held, but nvme-tcp sends requests on the socket while file
system locks are held.

  ======================================================
  WARNING: possible circular locking dependency detected
  5.15.0-rc3 #1 Not tainted
  ------------------------------------------------------
  fio/1496 is trying to acquire lock:
  (sk_lock-AF_INET){+.+.}-{0:0}, at: tcp_sendpage+0x23/0x80

  but task is already holding lock:
  (&xfs_dir_ilock_class/5){+.+.}-{3:3}, at: xfs_ilock+0xcf/0x290 [xfs]

  which lock already depends on the new lock.

  other info that might help us debug this:

  chain exists of:
   sk_lock-AF_INET --> sb_internal --> &xfs_dir_ilock_class/5

  Possible unsafe locking scenario:

        CPU0                    CPU1
        ----                    ----
   lock(&xfs_dir_ilock_class/5);
                                lock(sb_internal);
                                lock(&xfs_dir_ilock_class/5);
   lock(sk_lock-AF_INET);

  *** DEADLOCK ***

  6 locks held by fio/1496:
   #0: (sb_writers#13){.+.+}-{0:0}, at: path_openat+0x9fc/0xa20
   #1: (&inode->i_sb->s_type->i_mutex_dir_key){++++}-{3:3}, at: path_openat+0x296/0xa20
   #2: (sb_internal){.+.+}-{0:0}, at: xfs_trans_alloc_icreate+0x41/0xd0 [xfs]
   #3: (&xfs_dir_ilock_class/5){+.+.}-{3:3}, at: xfs_ilock+0xcf/0x290 [xfs]
   #4: (hctx->srcu){....}-{0:0}, at: hctx_lock+0x51/0xd0
   #5: (&queue->send_mutex){+.+.}-{3:3}, at: nvme_tcp_queue_rq+0x33e/0x380 [nvme_tcp]

This annotation lets lockdep analyze nvme-tcp controlled sockets
independently of what the user-space sockets API does.

Link: https://lore.kernel.org/linux-nvme/CAHj4cs9MDYLJ+q+2_GXUK9HxFizv2pxUryUR0toX974M040z7g@mail.gmail.com/

Signed-off-by: Chris Leech <cleech@redhat.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-04-08 14:23:56 +02:00
..
accessibility speakup-dectlk: Restore pitch setting 2022-02-16 12:56:37 +01:00
acpi ACPI/APEI: Limit printable size of BERT table data 2022-04-08 14:23:56 +02:00
amba
android binder: avoid potential data leakage when copying txn 2022-01-27 11:04:09 +01:00
ata ata: pata_hpt37x: fix PCI clock detection 2022-03-08 19:12:33 +01:00
atm atm: eni: Add check for dma_map_single 2022-03-23 09:16:41 +01:00
auxdisplay auxdisplay: lcd2s: Use proper API to free the instance of charlcd object 2022-03-08 19:12:47 +01:00
base PM: core: keep irq flags in device_pm_check_callbacks() 2022-04-08 14:23:56 +02:00
bcma
block loop: use sysfs_emit() in the sysfs xxx show() 2022-04-08 14:23:55 +02:00
bluetooth Bluetooth: btmtksdio: Fix kernel oops in btmtksdio_interrupt 2022-04-08 14:23:41 +02:00
bus mips: cdmm: Fix refcount leak in mips_cdmm_phys_base 2022-04-08 14:23:39 +02:00
cdrom
char hwrng: nomadik - Change clk_disable to clk_disable_unprepare 2022-04-08 14:23:09 +02:00
clk clk: Initialize orphan req_rate 2022-04-08 14:23:52 +02:00
clocksource clocksource: acpi_pm: fix return value of __setup handler 2022-04-08 14:23:09 +02:00
comedi
connector
counter
cpufreq cpufreq: qcom-cpufreq-nvmem: fix reading of PVS Valid fuse 2022-04-08 14:23:44 +02:00
cpuidle
crypto crypto: hisilicon/sec - not need to enable sm4 extra mode at HW V3 2022-04-08 14:23:55 +02:00
cxl cxl/regs: Fix size of CXL Capability Header Register 2022-04-08 14:23:30 +02:00
dax dax: make sure inodes are flushed before destroy cache 2022-04-08 14:23:31 +02:00
dca
devfreq
dio
dma dmaengine: hisi_dma: fix MSI allocate fail when reload hisi_dma 2022-04-08 14:23:47 +02:00
dma-buf udmabuf: validate ubuf->pagecount 2022-04-08 14:23:24 +02:00
edac EDAC: Fix calculation of returned address and next offset in edac_align_ptr() 2022-02-23 12:03:20 +01:00
eisa
extcon
firewire
firmware firmware: google: Properly state IOMEM dependency 2022-04-08 14:23:50 +02:00
fpga
fsi fsi: Aspeed: Fix a potential double free 2022-04-08 14:23:44 +02:00
gnss
gpio Revert "gpio: Revert regression in sysfs-gpio (gpiolib.c)" 2022-04-08 14:22:47 +02:00
gpu drm/i915/display: Fix HPD short pulse handling for eDP 2022-04-08 14:23:40 +02:00
greybus greybus: svc: fix an error handling bug in gb_svc_hello() 2022-04-08 14:22:50 +02:00
hid HID: i2c-hid: fix GET/SET_REPORT for unnumbered reports 2022-04-08 14:23:31 +02:00
hsi HSI: core: Fix return freed object in hsi_new_client 2022-01-27 11:04:31 +01:00
hv hv_balloon: rate-limit "Unhandled message" warning 2022-04-08 14:23:37 +02:00
hwmon hwmon: (pmbus) Add Vin unit off handling 2022-04-08 14:23:09 +02:00
hwspinlock
hwtracing coresight: syscfg: Fix memleak on registration failure in cscfg_create_device 2022-04-08 14:22:50 +02:00
i2c i2c: mux: demux-pinctrl: do not deactivate a master that is not active 2022-04-08 14:23:42 +02:00
i3c i3c: master: dw: check return of dw_i3c_master_get_free_pos() 2022-03-08 19:12:37 +01:00
idle
iio iio: adc: Add check for devm_request_threaded_irq 2022-04-08 14:23:46 +02:00
infiniband RDMA/mlx5: Fix memory leak in error flow for subscribe event routine 2022-04-08 14:23:39 +02:00
input Revert "Input: clear BTN_RIGHT/MIDDLE on buttonpads" 2022-04-08 14:22:55 +02:00
interconnect interconnect: qcom: rpm: Prevent integer overflow in rate 2022-01-27 11:05:00 +01:00
iommu iommu/ipmmu-vmsa: Check for error num after setting mask 2022-04-08 14:23:31 +02:00
ipack
irqchip irqchip/nvic: Release nvic_base upon failure 2022-04-08 14:23:56 +02:00
isdn isdn: hfcpci: check the return value of dma_set_mask() in setup_hw() 2022-03-16 14:23:36 +01:00
leds leds: lp55xx: initialise output direction from dts 2022-01-27 11:04:21 +01:00
macintosh
mailbox mailbox: imx: fix crash in resume on i.mx8ulp 2022-04-08 14:23:48 +02:00
mcb
md dm crypt: fix get_key_size compiler warning if !CONFIG_KEYS 2022-04-08 14:23:33 +02:00
media ivtv: fix incorrect device_caps for ivtvfb 2022-04-08 14:23:21 +02:00
memory memory: emif: check the pointer temp in get_device_details() 2022-04-08 14:23:20 +02:00
memstick
message
mfd mfd: asic3: Add missing iounmap() on error asic3_mfd_probe 2022-04-08 14:23:43 +02:00
misc kgdbts: fix return value of __setup handler 2022-04-08 14:23:50 +02:00
mmc mmc: davinci_mmc: Handle error for clk_enable 2022-04-08 14:23:22 +02:00
most
mtd mtd: rawnand: atmel: fix refcount issue in atmel_nand_controller_init 2022-04-08 14:23:39 +02:00
mux
net net: dsa: bcm_sf2_cfp: fix an incorrect NULL check on list iterator 2022-04-08 14:23:54 +02:00
nfc nfc: st21nfca: Fix potential buffer overflows in EVT_TRANSACTION 2022-03-28 09:58:42 +02:00
ntb ntb: intel: fix port config status offset for SPR 2022-03-08 19:12:44 +01:00
nubus
nvdimm nvdimm/region: Fix default alignment for small regions 2022-04-08 14:23:48 +02:00
nvme nvme-tcp: lockdep: annotate in-kernel sockets 2022-04-08 14:23:56 +02:00
nvmem nvmem: core: Fix a conflict between MTD and NVMEM on wp-gpios property 2022-03-02 11:48:06 +01:00
of of: net: move of_net under net/ 2022-03-08 19:12:41 +01:00
opp
parisc parisc: Fix sglist access in ccio-dma.c 2022-02-23 12:03:03 +01:00
parport
pci PCI: Avoid broken MSI on SB600 USB devices 2022-04-08 14:23:42 +02:00
pcmcia pcmcia: fix setting of kthread task states 2022-01-27 11:04:02 +01:00
perf perf/arm-cmn: Fix CPU hotplug unregistration 2022-01-27 11:03:36 +01:00
phy phy: phy-brcm-usb: fixup BCM4908 support 2022-04-08 14:23:46 +02:00
pinctrl pinctrl: npcm: Fix broken references to chip->parent_device 2022-04-08 14:23:54 +02:00
platform platform/x86: huawei-wmi: check the return value of device_create_file() 2022-04-08 14:23:38 +02:00
pnp
power power: ab8500_chargalg: Use CLOCK_MONOTONIC 2022-04-08 14:23:39 +02:00
powercap
pps pps: clients: gpio: Propagate return value from pps_gpio_probe 2022-04-08 14:23:44 +02:00
ps3
ptp ptp: unregister virtual clocks when unregistering physical clock. 2022-04-08 14:23:28 +02:00
pwm pwm: lpc18xx-sct: Initialize driver data and hardware before pwmchip_add() 2022-04-08 14:23:44 +02:00
rapidio
ras
regulator regulator: rpi-panel: Handle I2C errors/timing to the Atmel 2022-04-08 14:23:54 +02:00
remoteproc remoteproc: qcom_q6v5_mss: Fix some leaks in q6v5_alloc_memory_region 2022-04-08 14:23:47 +02:00
reset reset: renesas: Fix Runtime PM usage 2022-01-11 15:35:16 +01:00
rpmsg rpmsg: char: Fix race between the release of rpmsg_eptdev and cdev 2022-02-01 17:27:07 +01:00
rtc rtc: pl031: fix rtc features null pointer dereference 2022-04-08 14:22:56 +02:00
s390 block: drop unused includes in <linux/genhd.h> 2022-03-16 14:23:46 +01:00
sbus
scsi scsi: mpt3sas: Fix incorrect 4GB boundary check 2022-04-08 14:23:38 +02:00
sh
siox
slimbus
soc soc: mediatek: pm-domains: Add wakeup capacity support in power domain 2022-04-08 14:23:18 +02:00
soundwire soundwire: intel: fix wrong register name in intel_shim_wake 2022-04-08 14:23:44 +02:00
spi spi: spi-zynqmp-gqspi: Handle error for dma_set_mask 2022-04-08 14:23:07 +02:00
spmi
ssb
staging staging: mt7621-dts: fix GB-PC2 devicetree 2022-04-08 14:23:49 +02:00
target scsi: target: iscsi: Make sure the np under each tpg is unique 2022-02-16 12:56:12 +01:00
tc
tee optee: use driver internal tee_context for some rpc 2022-03-02 11:47:51 +01:00
thermal thermal: int340x: Check for NULL after calling kmemdup() 2022-04-08 14:23:05 +02:00
thunderbolt thunderbolt: Runtime PM activate both ends of the device link 2022-01-27 11:04:36 +01:00
tty serial: 8250: fix XOFF/XON sending when DMA is used 2022-04-08 14:23:50 +02:00
uio
usb USB: storage: ums-realtek: fix error code in rts51x_read_mem() 2022-04-08 14:23:40 +02:00
vdpa vdpa/mlx5: should verify CTRL_VQ feature exists for MQ 2022-04-08 14:22:46 +02:00
vfio vfio/pci: wake-up devices around reset functions 2022-04-08 14:23:33 +02:00
vhost vsock: each transport cycles only on its own sockets 2022-03-23 09:16:41 +01:00
video video: fbdev: omapfb: Add missing of_node_put() in dvic_probe_of 2022-04-08 14:23:21 +02:00
virt virt: acrn: fix a memory leak in acrn_dev_ioctl() 2022-04-08 14:23:50 +02:00
virtio virtio: acknowledge all features before access 2022-03-16 14:23:43 +01:00
visorbus
vlynq
vme
w1 w1: Misuse of get_user()/put_user() reported by sparse 2022-01-27 11:04:59 +01:00
watchdog
xen xen/gnttab: fix gnttab_end_foreign_access() without page specified 2022-03-11 12:22:37 +01:00
zorro
Kconfig
Makefile virtio: always enter drivers/virtio/ 2021-12-22 09:32:39 +01:00