2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00
linux/fs/nfs
Trond Myklebust 76d2e3890f NFS: Fix a race when updating an existing write
After nfs_lock_and_join_requests() tests for whether the request is
still attached to the mapping, nothing prevents a call to
nfs_inode_remove_request() from succeeding until we actually lock the
page group.
The reason is that whoever called nfs_inode_remove_request() doesn't
necessarily have a lock on the page group head.

So in order to avoid races, let's take the page group lock earlier in
nfs_lock_and_join_requests(), and hold it across the removal of the
request in nfs_inode_remove_request().

Reported-by: Jeff Layton <jlayton@kernel.org>
Tested-by: Joe Quanaim <jdq@meta.com>
Tested-by: Andrew Steffen <aksteffen@meta.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Fixes: bd37d6fce1 ("NFSv4: Convert nfs_lock_and_join_requests() to use nfs_page_find_head_request()")
Cc: stable@vger.kernel.org
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
2025-08-19 11:16:02 -07:00
..
blocklayout NFS client updates for Linux 6.17 2025-08-09 07:20:44 +03:00
filelayout nfs: don't share pNFS DS connections between net namespaces 2025-04-27 23:25:44 -04:00
flexfilelayout pNFS/flexfiles: don't attempt pnfs on fatal DS errors 2025-07-22 08:10:17 -04:00
cache_lib.c
cache_lib.h
callback_proc.c NFS: CB_OFFLOAD can return NFS4ERR_DELAY 2025-01-21 11:34:50 -05:00
callback_xdr.c nfsd: don't use sv_nrthreads in connection limiting calculations. 2025-01-06 09:37:36 -05:00
callback.c nfsd: don't use sv_nrthreads in connection limiting calculations. 2025-01-06 09:37:36 -05:00
callback.h NFSv4: Add CB_GETATTR support for delegated attributes 2024-07-08 13:47:25 -04:00
client.c NFS: Fix the setting of capabilities when automounting a new filesystem 2025-08-04 09:16:45 -07:00
delegation.c NFS: use a hash table for delegation lookup 2025-07-22 08:10:41 -04:00
delegation.h NFS: use a hash table for delegation lookup 2025-07-22 08:10:41 -04:00
dir.c NFS: Fix wakeup of __nfs_lookup_revalidate() in unblock_revalidate() 2025-07-22 08:10:41 -04:00
direct.c nfs: direct: drop useless initializer in nfs_direct_write_completion() 2025-04-27 23:25:44 -04:00
dns_resolve.c NFS: Move common includes outside ifdef 2023-08-24 13:24:15 -04:00
dns_resolve.h
export.c NFS: Fix filehandle bounds checking in nfs_fh_to_dentry() 2025-07-22 09:50:56 -04:00
file.c vfs-6.17-rc1.mmap_prepare 2025-07-28 13:43:25 -07:00
fs_context.c NFS: support the kernel keyring for TLS 2025-07-14 15:20:27 -07:00
fscache.c netfs: Fix undifferentiation of DIO reads from unbuffered reads 2025-05-23 10:35:03 +02:00
fscache.h netfs: Drop the was_async arg from netfs_read_subreq_terminated() 2024-12-20 22:34:03 +01:00
getroot.c nfs: fix the comment of nfs_get_root 2024-09-23 15:03:13 -04:00
inode.c NFS: drop __exit from nfs_exit_keyring 2025-07-22 08:10:17 -04:00
internal.h NFS client updates for Linux 6.17 2025-08-09 07:20:44 +03:00
io.c fs/nfs/io: make nfs_start_io_*() killable 2024-11-28 12:55:33 -05:00
iostat.h mm: add comments for allocation helpers explaining why they are macros 2024-07-12 15:52:20 -07:00
Kconfig nfs: add missing selections of CONFIG_CRC32 2025-04-13 16:39:42 -04:00
localio.c nfs/localio: use read_seqbegin() rather than read_seqbegin_or_lock() 2025-08-03 12:45:47 -07:00
Makefile nfs: add LOCALIO support 2024-09-23 15:03:30 -04:00
mount_clnt.c NFS: Remove unused function nfs_umount 2025-07-14 15:20:28 -07:00
namespace.c saner calling conventions for ->d_automount() 2025-05-05 13:42:49 -04:00
netns.h nfs: move the nfs4_data_server_cache into struct nfs_net 2025-04-27 23:25:44 -04:00
nfs2super.c fs: nfs: add missing MODULE_DESCRIPTION() macros 2024-07-08 13:47:24 -04:00
nfs2xdr.c nfs_common: factor out nfs_errtbl and nfs_stat_to_errno 2024-09-23 15:03:29 -04:00
nfs3_fs.h fs: drop unused posix acl handlers 2023-03-06 09:57:12 +01:00
nfs3acl.c nfs: nfs3acl: drop useless assignment in nfs3_get_acl() 2025-04-27 23:25:44 -04:00
nfs3client.c pNFS/flexfiles: Treat ENETUNREACH errors as fatal in containers 2025-03-21 12:44:24 -04:00
nfs3proc.c NFS client updates for Linux 6.15 2025-04-02 17:06:31 -07:00
nfs3super.c fs: nfs: add missing MODULE_DESCRIPTION() macros 2024-07-08 13:47:24 -04:00
nfs3xdr.c nfs_common: factor out nfs_errtbl and nfs_stat_to_errno 2024-09-23 15:03:29 -04:00
nfs4_fs.h NFSv4: Remove duplicate lookups, capability probes and fsinfo calls 2025-08-04 09:48:16 -07:00
nfs4client.c NFS: Fix the setting of capabilities when automounting a new filesystem 2025-08-04 09:16:45 -07:00
nfs4file.c NFS client updates for Linux 6.17 2025-08-09 07:20:44 +03:00
nfs4getroot.c NFSv4: Remove duplicate lookups, capability probes and fsinfo calls 2025-08-04 09:48:16 -07:00
nfs4idmap.c rpc_mkpipe_dentry(): saner calling conventions 2025-07-02 22:44:55 -04:00
nfs4idmap.h NFS: Move nfs_idmap.h into fs/nfs/ 2015-04-23 15:16:14 -04:00
nfs4namespace.c
nfs4proc.c NFSv4: Remove duplicate lookups, capability probes and fsinfo calls 2025-08-04 09:48:16 -07:00
nfs4renewd.c
nfs4session.c
nfs4session.h nfs: add missing selections of CONFIG_CRC32 2025-04-13 16:39:42 -04:00
nfs4state.c NFSv4: Treat ENETUNREACH errors as fatal for state recovery 2025-03-26 12:19:58 -04:00
nfs4super.c fs: nfs: add missing MODULE_DESCRIPTION() macros 2024-07-08 13:47:24 -04:00
nfs4sysctl.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
nfs4trace.c pNFS: Add prepare commit trace to block/scsi layout 2025-07-14 15:20:28 -07:00
nfs4trace.h pNFS: Add prepare commit trace to block/scsi layout 2025-07-14 15:20:28 -07:00
nfs4xdr.c nfs: Add timecreate to nfs inode 2025-07-14 15:20:02 -07:00
nfs42.h NFS: Add support for fallocate(FALLOC_FL_ZERO_RANGE) 2025-05-28 17:17:13 -04:00
nfs42proc.c NFS: Add support for fallocate(FALLOC_FL_ZERO_RANGE) 2025-05-28 17:17:13 -04:00
nfs42xattr.c mm/list_lru: simplify the list_lru walk callback function 2024-11-11 17:22:26 -08:00
nfs42xdr.c NFS: Add support for fallocate(FALLOC_FL_ZERO_RANGE) 2025-05-28 17:17:13 -04:00
nfs.h NFS: Implement get_nfs_version() 2024-11-08 14:17:37 -05:00
nfsroot.c NFS: Fix an off by one in root_nfs_cat() 2024-03-09 09:14:51 -05:00
nfstrace.c
nfstrace.h nfs: add cache_validity to the nfs_inode_event tracepoints 2025-07-14 15:20:27 -07:00
pagelist.c NFS: Fix a race when updating an existing write 2025-08-19 11:16:02 -07:00
pnfs_dev.c nfs: remove the unused max_deviceinfo_size field from struct pnfs_layoutdriver_type 2024-07-10 13:23:17 -04:00
pnfs_nfs.c pnfs: add pnfs_ds_connect trace point 2025-07-14 15:20:03 -07:00
pnfs.c NFS: Clean up pnfs_put_layout_hdr()/pnfs_destroy_layout_final() 2025-07-22 08:10:41 -04:00
pnfs.h nfs: don't share pNFS DS connections between net namespaces 2025-04-27 23:25:44 -04:00
proc.c nfs: change mkdir inode_operation to return alternate dentry if needed. 2025-03-05 11:52:50 +01:00
read.c fs/nfs/read: fix double-unlock bug in nfs_return_empty_folio() 2025-05-28 17:17:13 -04:00
super.c new helper: set_default_d_op() 2025-06-10 22:21:16 -04:00
symlink.c fs: Pass a folio to page_put_link() 2025-05-15 12:14:29 +02:00
sysctl.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
sysfs.c NFS: add localio to sysfs 2025-05-28 17:17:13 -04:00
sysfs.h NFS: Add sysfs links to sunrpc clients for nfs_clients 2023-06-19 15:04:13 -04:00
unlink.c VFS: rename lookup_one_len family to lookup_noperm and remove permission check 2025-04-08 11:24:36 +02:00
write.c NFS: Fix a race when updating an existing write 2025-08-19 11:16:02 -07:00