lkml.org 
[lkml]   [2020]   [Sep]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.8 02/29] NFSv4.1 handle ERR_DELAY error reclaiming locking state on delegation recall
    Date
    From: Olga Kornievskaia <kolga@netapp.com>

    [ Upstream commit 3d7a9520f0c3e6a68b6de8c5812fc8b6d7a52626 ]

    A client should be able to handle getting an ERR_DELAY error
    while doing a LOCK call to reclaim state due to delegation being
    recalled. This is a transient error that can happen due to server
    moving its volumes and invalidating its file location cache and
    upon reference to it during the LOCK call needing to do an
    expensive lookup (leading to an ERR_DELAY error on a PUTFH).

    Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/nfs/nfs4proc.c | 7 ++++++-
    1 file changed, 6 insertions(+), 1 deletion(-)

    diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
    index 45e0585e0667c..7f337188a2829 100644
    --- a/fs/nfs/nfs4proc.c
    +++ b/fs/nfs/nfs4proc.c
    @@ -7271,7 +7271,12 @@ int nfs4_lock_delegation_recall(struct file_lock *fl, struct nfs4_state *state,
    err = nfs4_set_lock_state(state, fl);
    if (err != 0)
    return err;
    - err = _nfs4_do_setlk(state, F_SETLK, fl, NFS_LOCK_NEW);
    + do {
    + err = _nfs4_do_setlk(state, F_SETLK, fl, NFS_LOCK_NEW);
    + if (err != -NFS4ERR_DELAY)
    + break;
    + ssleep(1);
    + } while (err == -NFS4ERR_DELAY);
    return nfs4_handle_delegation_recall_error(server, state, stateid, fl, err);
    }

    --
    2.25.1
    \
     
     \ /
      Last update: 2020-09-14 15:14    [W:4.411 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site