lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 709/917] NFS: Fix dentry verifier races
    Date
    From: Trond Myklebust <trond.myklebust@hammerspace.com>

    [ Upstream commit cec08f452a687fce9dfdf47946d00a1d12a8bec5 ]

    If the directory changed while we were revalidating the dentry, then
    don't update the dentry verifier. There is no value in setting the
    verifier to an older value, and we could end up overwriting a more up to
    date verifier from a parallel revalidation.

    Fixes: efeda80da38d ("NFSv4: Fix revalidation of dentries with delegations")
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Tested-by: Benjamin Coddington <bcodding@redhat.com>
    Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/nfs/dir.c | 7 +++----
    1 file changed, 3 insertions(+), 4 deletions(-)

    diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
    index 085b8ecdc17d9..5b68c44848caf 100644
    --- a/fs/nfs/dir.c
    +++ b/fs/nfs/dir.c
    @@ -1269,13 +1269,12 @@ static bool nfs_verifier_is_delegated(struct dentry *dentry)
    static void nfs_set_verifier_locked(struct dentry *dentry, unsigned long verf)
    {
    struct inode *inode = d_inode(dentry);
    + struct inode *dir = d_inode(dentry->d_parent);

    - if (!nfs_verifier_is_delegated(dentry) &&
    - !nfs_verify_change_attribute(d_inode(dentry->d_parent), verf))
    - goto out;
    + if (!nfs_verify_change_attribute(dir, verf))
    + return;
    if (inode && NFS_PROTO(inode)->have_delegation(inode, FMODE_READ))
    nfs_set_verifier_delegated(&verf);
    -out:
    dentry->d_time = verf;
    }

    --
    2.33.0


    \
     
     \ /
      Last update: 2021-11-16 01:35    [W:2.827 / U:0.120 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site