nfsd: Ensure lookup_clientid() takes client_lock
Ensure that the client lookup is done safely under the client_lock, so we're not relying on the client_mutex. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
6b10ad193d
commit
3e339f964b
|
@ -3451,13 +3451,17 @@ static __be32 lookup_clientid(clientid_t *clid,
|
|||
* will be false.
|
||||
*/
|
||||
WARN_ON_ONCE(cstate->session);
|
||||
spin_lock(&nn->client_lock);
|
||||
found = find_confirmed_client(clid, false, nn);
|
||||
if (!found)
|
||||
if (!found) {
|
||||
spin_unlock(&nn->client_lock);
|
||||
return nfserr_expired;
|
||||
}
|
||||
atomic_inc(&found->cl_refcount);
|
||||
spin_unlock(&nn->client_lock);
|
||||
|
||||
/* Cache the nfs4_client in cstate! */
|
||||
cstate->clp = found;
|
||||
atomic_inc(&found->cl_refcount);
|
||||
return nfs_ok;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue