]> git.baikalelectronics.ru Git - kernel.git/commitdiff
Revert "NFSv4: Retry LOCK on OLD_STATEID during delegation return"
authorBenjamin Coddington <bcodding@redhat.com>
Tue, 27 Jun 2023 18:31:49 +0000 (14:31 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 10 Oct 2023 20:00:36 +0000 (22:00 +0200)
[ Upstream commit 5b4a82a0724af1dfd1320826e0266117b6a57fbd ]

Olga Kornievskaia reports that this patch breaks NFSv4.0 state recovery.
It also introduces additional complexity in the error paths for cases not
related to the original problem.  Let's revert it for now, and address the
original problem in another manner.

This reverts commit f5ea16137a3fa2858620dc9084466491c128535f.

Fixes: f5ea16137a3f ("NFSv4: Retry LOCK on OLD_STATEID during delegation return")
Reported-by: Kornievskaia, Olga <Olga.Kornievskaia@netapp.com>
Signed-off-by: Benjamin Coddington <bcodding@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/nfs/nfs4proc.c

index b927a7d1b46d4fc9aa5bc9effa9dbcbd8afe4250..e1297c6bcfbe21868746cfe08d56b81a7d6a92eb 100644 (file)
@@ -7157,7 +7157,6 @@ static void nfs4_lock_done(struct rpc_task *task, void *calldata)
 {
        struct nfs4_lockdata *data = calldata;
        struct nfs4_lock_state *lsp = data->lsp;
-       struct nfs_server *server = NFS_SERVER(d_inode(data->ctx->dentry));
 
        if (!nfs4_sequence_done(task, &data->res.seq_res))
                return;
@@ -7165,7 +7164,8 @@ static void nfs4_lock_done(struct rpc_task *task, void *calldata)
        data->rpc_status = task->tk_status;
        switch (task->tk_status) {
        case 0:
-               renew_lease(server, data->timestamp);
+               renew_lease(NFS_SERVER(d_inode(data->ctx->dentry)),
+                               data->timestamp);
                if (data->arg.new_lock && !data->cancelled) {
                        data->fl.fl_flags &= ~(FL_SLEEP | FL_ACCESS);
                        if (locks_lock_inode_wait(lsp->ls_state->inode, &data->fl) < 0)
@@ -7193,8 +7193,6 @@ static void nfs4_lock_done(struct rpc_task *task, void *calldata)
                        if (!nfs4_stateid_match(&data->arg.open_stateid,
                                                &lsp->ls_state->open_stateid))
                                goto out_restart;
-                       else if (nfs4_async_handle_error(task, server, lsp->ls_state, NULL) == -EAGAIN)
-                               goto out_restart;
                } else if (!nfs4_stateid_match(&data->arg.lock_stateid,
                                                &lsp->ls_stateid))
                                goto out_restart;