NFSd: Move default initialisers from create_client() to alloc_client()
Aside from making it clearer what is non-trivial in create_client(), it also fixes a bug whereby we can call free_client() before idr_init() has been called. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com> Cc: stable@vger.kernel.org Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
fc208d026b
commit
5694c93e6c
1 changed files with 12 additions and 12 deletions
|
@ -1078,6 +1078,18 @@ static struct nfs4_client *alloc_client(struct xdr_netobj name)
|
|||
return NULL;
|
||||
}
|
||||
clp->cl_name.len = name.len;
|
||||
INIT_LIST_HEAD(&clp->cl_sessions);
|
||||
idr_init(&clp->cl_stateids);
|
||||
atomic_set(&clp->cl_refcount, 0);
|
||||
clp->cl_cb_state = NFSD4_CB_UNKNOWN;
|
||||
INIT_LIST_HEAD(&clp->cl_idhash);
|
||||
INIT_LIST_HEAD(&clp->cl_openowners);
|
||||
INIT_LIST_HEAD(&clp->cl_delegations);
|
||||
INIT_LIST_HEAD(&clp->cl_lru);
|
||||
INIT_LIST_HEAD(&clp->cl_callbacks);
|
||||
INIT_LIST_HEAD(&clp->cl_revoked);
|
||||
spin_lock_init(&clp->cl_lock);
|
||||
rpc_init_wait_queue(&clp->cl_cb_waitq, "Backchannel slot table");
|
||||
return clp;
|
||||
}
|
||||
|
||||
|
@ -1347,7 +1359,6 @@ static struct nfs4_client *create_client(struct xdr_netobj name,
|
|||
if (clp == NULL)
|
||||
return NULL;
|
||||
|
||||
INIT_LIST_HEAD(&clp->cl_sessions);
|
||||
ret = copy_cred(&clp->cl_cred, &rqstp->rq_cred);
|
||||
if (ret) {
|
||||
spin_lock(&nn->client_lock);
|
||||
|
@ -1355,20 +1366,9 @@ static struct nfs4_client *create_client(struct xdr_netobj name,
|
|||
spin_unlock(&nn->client_lock);
|
||||
return NULL;
|
||||
}
|
||||
idr_init(&clp->cl_stateids);
|
||||
atomic_set(&clp->cl_refcount, 0);
|
||||
clp->cl_cb_state = NFSD4_CB_UNKNOWN;
|
||||
INIT_LIST_HEAD(&clp->cl_idhash);
|
||||
INIT_LIST_HEAD(&clp->cl_openowners);
|
||||
INIT_LIST_HEAD(&clp->cl_delegations);
|
||||
INIT_LIST_HEAD(&clp->cl_lru);
|
||||
INIT_LIST_HEAD(&clp->cl_callbacks);
|
||||
INIT_LIST_HEAD(&clp->cl_revoked);
|
||||
spin_lock_init(&clp->cl_lock);
|
||||
nfsd4_init_callback(&clp->cl_cb_null);
|
||||
clp->cl_time = get_seconds();
|
||||
clear_bit(0, &clp->cl_cb_slot_busy);
|
||||
rpc_init_wait_queue(&clp->cl_cb_waitq, "Backchannel slot table");
|
||||
copy_verf(clp, verf);
|
||||
rpc_copy_addr((struct sockaddr *) &clp->cl_addr, sa);
|
||||
gen_confirm(clp);
|
||||
|
|
Loading…
Reference in a new issue