|
@@ -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;
|
|
|
}
|
|
|
|
|
@@ -1095,6 +1107,7 @@ free_client(struct nfs4_client *clp)
|
|
|
WARN_ON_ONCE(atomic_read(&ses->se_ref));
|
|
|
free_session(ses);
|
|
|
}
|
|
|
+ rpc_destroy_wait_queue(&clp->cl_cb_waitq);
|
|
|
free_svc_cred(&clp->cl_cred);
|
|
|
kfree(clp->cl_name.data);
|
|
|
idr_destroy(&clp->cl_stateids);
|
|
@@ -1347,7 +1360,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 +1367,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);
|