[PATCH RFC 12/12] nfs: remove files with the parent directory locked shared on NFSv4
From: Jonathan Flynn
Date: Thu Oct 29 2026 - 14:16:33 EST
Let removals of different files in one NFSv4 directory proceed at the
same time, instead of queuing one behind another on the directory's
lock. The server orders removals of different names. The client
orders a removal against lookups and opens of the same name through its
cached entry for that name, and against listings through that entry and
a count of such removals kept per directory, as set out in the changes
before this one. A removal it cannot order that way is done with the
directory locked exclusive, as before. On a server that reports itself
case-insensitive or not case-preserving, every removal is done that way
from the start. A server that treats names differing in other ways as
one, as Unicode normalization does, is not detected, and there a
removal is not ordered against a lookup or open of another spelling.
This covers every NFSv4 minor version, NFSv4.0 included: nothing here
depends on sessions. NFSv2 and NFSv3 are unchanged.
Signed-off-by: Jonathan Flynn <jonathan.flynn@xxxxxxxxxxxxxxx>
---
fs/nfs/nfs4proc.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index fbf9e97815..0acc03dfe6 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -10860,6 +10860,8 @@ static const struct inode_operations nfs4_dir_inode_operations = {
.atomic_open = nfs_atomic_open,
.link = nfs_link,
.unlink = nfs_unlink,
+ .unlink_shared = nfs_unlink_shared,
+ .unlink_shared_done = nfs_unlink_shared_done,
.symlink = nfs_symlink,
.mkdir = nfs_mkdir,
.rmdir = nfs_rmdir,
--
2.43.0