From: Trond Myklebust <trondmy@kernel.org>
To: Oleksandr Tymoshenko <ovt@google.com>, Anna Schumaker <anna@kernel.org>
Cc: linux-nfs@vger.kernel.org, jbongio@google.com, stable@vger.kernel.org
Subject: Re: [PATCH] NFSv4: fix a mount deadlock in NFS v4.1 client
Date: Sun, 08 Sep 2024 12:48:30 -0400 [thread overview]
Message-ID: <8f2e20f2fc894398da371517c6c8111aba072fb1.camel@kernel.org> (raw)
In-Reply-To: <20240906-nfs-mount-deadlock-fix-v1-1-ea1aef533f9c@google.com>
On Fri, 2024-09-06 at 00:57 +0000, Oleksandr Tymoshenko wrote:
> nfs41_init_clientid does not signal a failure condition from
> nfs4_proc_exchange_id and nfs4_proc_create_session to a client which
> may
> lead to mount syscall indefinitely blocked in the following stack
> trace:
> nfs_wait_client_init_complete
> nfs41_discover_server_trunking
> nfs4_discover_server_trunking
> nfs4_init_client
> nfs4_set_client
> nfs4_create_server
> nfs4_try_get_tree
> vfs_get_tree
> do_new_mount
> __se_sys_mount
>
> and the client stuck in uninitialized state.
>
> In addition to this all subsequent mount calls would also get blocked
> in
> nfs_match_client waiting for the uninitialized client to finish
> initialization:
> nfs_wait_client_init_complete
> nfs_match_client
> nfs_get_client
> nfs4_set_client
> nfs4_create_server
> nfs4_try_get_tree
> vfs_get_tree
> do_new_mount
> __se_sys_mount
>
> To avoid this situation propagate error condition to the mount thread
> and let mount syscall fail properly.
>
> Signed-off-by: Oleksandr Tymoshenko <ovt@google.com>
> ---
> fs/nfs/nfs4state.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
> index 877f682b45f2..54ad3440ad2b 100644
> --- a/fs/nfs/nfs4state.c
> +++ b/fs/nfs/nfs4state.c
> @@ -335,8 +335,8 @@ int nfs41_init_clientid(struct nfs_client *clp,
> const struct cred *cred)
> if (!(clp->cl_exchange_flags & EXCHGID4_FLAG_CONFIRMED_R))
> nfs4_state_start_reclaim_reboot(clp);
> nfs41_finish_session_reset(clp);
> - nfs_mark_client_ready(clp, NFS_CS_READY);
> out:
> + nfs_mark_client_ready(clp, status == 0 ? NFS_CS_READY :
> status);
> return status;
> }
NACK. This will break all sorts of recovery scenarios, because it
doesn't distinguish between an initial 'mount' and a server reboot
recovery situation.
Even in the case where we are in the initial mount, it also doesn't
distinguish between transient errors such as NFS4ERR_DELAY or reboot
errors such as NFS4ERR_STALE_CLIENTID, etc.
Exactly what is the scenario that is causing your hang? Let's try to
address that with a more targeted fix.
--
Trond Myklebust
Linux NFS client maintainer, Hammerspace
trond.myklebust@hammerspace.com
next prev parent reply other threads:[~2024-09-08 16:49 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-06 0:57 [PATCH] NFSv4: fix a mount deadlock in NFS v4.1 client Oleksandr Tymoshenko
2024-09-06 0:58 ` kernel test robot
2024-09-08 16:48 ` Trond Myklebust [this message]
2024-09-09 16:36 ` [PATCH 6.1.y] net: tls: handle backlogging of crypto requests Oleksandr Tymoshenko
2024-09-09 17:56 ` Trond Myklebust
2024-09-09 23:06 ` [PATCH] NFSv4: fix a mount deadlock in NFS v4.1 client Oleksandr Tymoshenko
2024-09-10 0:22 ` Trond Myklebust
2024-09-10 21:08 ` Oleksandr Tymoshenko
2024-09-23 20:15 ` Oleksandr Tymoshenko
2024-09-26 20:02 ` Trond Myklebust
2024-09-09 17:46 ` Oleksandr Tymoshenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8f2e20f2fc894398da371517c6c8111aba072fb1.camel@kernel.org \
--to=trondmy@kernel.org \
--cc=anna@kernel.org \
--cc=jbongio@google.com \
--cc=linux-nfs@vger.kernel.org \
--cc=ovt@google.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.