]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
NFS: Don't immediately return directory delegations when disabled
authorAnna Schumaker <anna.schumaker@oracle.com>
Fri, 9 Jan 2026 20:41:14 +0000 (15:41 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Mon, 12 Jan 2026 16:50:22 +0000 (11:50 -0500)
The function nfs_inode_evict_delegation() immediately and synchronously
returns a delegation when called. This means we can't call it from
nfs4_have_delegation(), since that function could be called under a
lock. Instead we should mark the delegation for return and let the state
manager handle it for us.

Fixes: b6d2a520f463 ("NFS: Add a module option to disable directory delegations")
Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/delegation.c

index c9fa4c1f68fce452d698b18be9a1a1a4dba3377a..8a3857a49d847376b3adf977540e92548ff47ced 100644 (file)
@@ -149,7 +149,7 @@ static int nfs4_do_check_delegation(struct inode *inode, fmode_t type,
 int nfs4_have_delegation(struct inode *inode, fmode_t type, int flags)
 {
        if (S_ISDIR(inode->i_mode) && !directory_delegations)
-               nfs_inode_evict_delegation(inode);
+               nfs4_inode_set_return_delegation_on_close(inode);
        return nfs4_do_check_delegation(inode, type, flags, true);
 }