diff mbox series

[1/2] Revert "NFSv4: Retry LOCK on OLD_STATEID during delegation return"

Message ID 5577791deaa898578c8e8f86336eaca053d9efdd.1687890438.git.bcodding@redhat.com (mailing list archive)
State New, archived
Headers show
Series [1/2] Revert "NFSv4: Retry LOCK on OLD_STATEID during delegation return" | expand

Commit Message

Benjamin Coddington June 27, 2023, 6:31 p.m. UTC
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>
---
 fs/nfs/nfs4proc.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

Comments

Anna Schumaker Oct. 5, 2023, 8:39 p.m. UTC | #1
Hi Stable Kernel Team,

Can this patch be backported to v6.1+ kernels? The commit id is
5b4a82a0724a and has been upstream since v6.5. As was mentioned in the
original patch description (below), the commit being reverted by this
patch breaks state recovery in a way that is worse than the initial
bug that it was attempting to fix.

Thanks,
Anna

On Tue, Jun 27, 2023 at 2:31 PM Benjamin Coddington <bcodding@redhat.com> wrote:
>
> 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>
> ---
>  fs/nfs/nfs4proc.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
> index d3665390c4cb..6bb14f6cfbc0 100644
> --- a/fs/nfs/nfs4proc.c
> +++ b/fs/nfs/nfs4proc.c
> @@ -7159,7 +7159,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;
> @@ -7167,7 +7166,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)
> @@ -7188,8 +7188,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;
> --
> 2.40.1
>
Sasha Levin Oct. 6, 2023, 1:44 p.m. UTC | #2
On Thu, Oct 05, 2023 at 04:39:58PM -0400, Anna Schumaker wrote:
>Hi Stable Kernel Team,
>
>Can this patch be backported to v6.1+ kernels? The commit id is
>5b4a82a0724a and has been upstream since v6.5. As was mentioned in the
>original patch description (below), the commit being reverted by this
>patch breaks state recovery in a way that is worse than the initial
>bug that it was attempting to fix.

Queued up, thanks!
diff mbox series

Patch

diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index d3665390c4cb..6bb14f6cfbc0 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -7159,7 +7159,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;
@@ -7167,7 +7166,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)
@@ -7188,8 +7188,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;