[PATCH 0/5] nbd: Fix deadlock during fs reclaim under lock_sock().
From: Kuniyuki Iwashima <kuniyu@google.com>
Date: 2026-03-25 06:38:48
Also in:
linux-block
Recently, syzbot has reported 100+ possible deadlock splats
involving NBD, typically following this pattern:
lock_sock(sk)
-> GFP_KERNEL memory allocation
-> fs reclaim
-> lock_sock(sk) at NBD
Instead of spreading memalloc_noio_{save,restore} over the
networking code, we want to fix it in the NBD layer.
This series introduces a try-lock version of lock_sock() and
use it in NBD to fix the deadlock.
The try-lock variant should not fail in practice because while
the socket remain exposed to userspace even after being handed
over to NBD, the socket should not be touched by userspace.
The series can be applied cleanly on block-7.0 and net.git.
Kuniyuki Iwashima (5):
nbd: Remove redundant sock->ops->shutdown() check in nbd_get_socket().
nbd: Reject unconnected sockets in nbd_get_socket().
net: Introduce lock_sock_try().
inet: Add inet_shutdown_locked().
nbd: Use lock_sock_try() for TCP sendmsg() and shutdown().
drivers/block/nbd.c | 44 ++++++++++++++++++++++++++++++++++-----
include/net/inet_common.h | 1 +
include/net/sock.h | 31 +++++++++++++++++++++++++++
net/ipv4/af_inet.c | 43 ++++++++++++++++++++++++++++----------
4 files changed, 103 insertions(+), 16 deletions(-)
--
2.53.0.1018.g2bb0e51243-goog