| From 5694c93e6c4954fa9424c215f75eeb919bddad64 Mon Sep 17 00:00:00 2001 |
| From: Trond Myklebust <trond.myklebust@primarydata.com> |
| Date: Fri, 18 Apr 2014 14:43:56 -0400 |
| Subject: NFSd: Move default initialisers from create_client() to |
| alloc_client() |
| |
| From: Trond Myklebust <trond.myklebust@primarydata.com> |
| |
| commit 5694c93e6c4954fa9424c215f75eeb919bddad64 upstream. |
| |
| 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> |
| Signed-off-by: J. Bruce Fields <bfields@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/nfsd/nfs4state.c | 24 ++++++++++++------------ |
| 1 file changed, 12 insertions(+), 12 deletions(-) |
| |
| --- a/fs/nfsd/nfs4state.c |
| +++ b/fs/nfsd/nfs4state.c |
| @@ -1081,6 +1081,18 @@ static struct nfs4_client *alloc_client( |
| 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; |
| } |
| |
| @@ -1315,7 +1327,6 @@ static struct nfs4_client *create_client |
| 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); |
| @@ -1323,20 +1334,9 @@ static struct nfs4_client *create_client |
| 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); |