On Wed, Jan 23, 2019 at 11:00:24PM -0800, Qian Lu wrote:
From: Scott Mayhew smayhew@redhat.com
The following deadlock can occur between a process waiting for a client to initialize in while walking the client list during nfsv4 server trunking detection and another process waiting for the nfs_clid_init_mutex so it can initialize that client:
Process 1 Process 2
spin_lock(&nn->nfs_client_lock); list_add_tail(&CLIENTA->cl_share_link, &nn->nfs_client_list); spin_unlock(&nn->nfs_client_lock); spin_lock(&nn->nfs_client_lock); list_add_tail(&CLIENTB->cl_share_link, &nn->nfs_client_list); spin_unlock(&nn->nfs_client_lock); mutex_lock(&nfs_clid_init_mutex); nfs41_walk_client_list(clp, result, cred); nfs_wait_client_init_complete(CLIENTA); (waiting for nfs_clid_init_mutex)
Make sure nfs_match_client() only evaluates clients that have completed initialization in order to prevent that deadlock.
This patch also fixes v4.0 trunking behavior by not marking the client NFS_CS_READY until the clientid has been confirmed.
Signed-off-by: Scott Mayhew smayhew@redhat.com Signed-off-by: Anna Schumaker Anna.Schumaker@Netapp.com Signed-off-by: Qian Lu luqia@amazon.com
fs/nfs/client.c | 11 +++++++++++ fs/nfs/nfs4client.c | 17 +++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-)
You forgot to mention the sha1 of the commit :(
I dug it up this time...
greg k-h