aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/xprtrdma/xprt_rdma.h
diff options
context:
space:
mode:
authorScott Mayhew <smayhew@redhat.com>2017-12-05 13:55:44 -0500
committerAnna Schumaker <Anna.Schumaker@Netapp.com>2017-12-15 14:31:49 -0500
commitc156618e15101a9cc8c815108fec0300a0ec6637 (patch)
treeaa9384520ea1a224d5be11bfe2614f03580791d0 /net/sunrpc/xprtrdma/xprt_rdma.h
parentSUNRPC: Handle ENETDOWN errors (diff)
downloadlinux-dev-c156618e15101a9cc8c815108fec0300a0ec6637.tar.xz
linux-dev-c156618e15101a9cc8c815108fec0300a0ec6637.zip
nfs: fix a deadlock in nfs client initialization
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>
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions