nfsd: Don't unlock the state while it's not locked
authorYanchuan Nian <ycnian@gmail.com>
Mon, 24 Dec 2012 10:11:45 +0000 (18:11 +0800)
committerJ. Bruce Fields <bfields@redhat.com>
Wed, 23 Jan 2013 23:17:37 +0000 (18:17 -0500)
In the procedure of CREATE_SESSION, the state is locked after
alloc_conn_from_crses(). If the allocation fails, the function
goes to "out_free_session", and then "out" where there is an
unlock function.

Signed-off-by: Yanchuan Nian <ycnian@gmail.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4state.c

index 29924a04cf3d828762618a6987d43f8c3a07a6a9..cc41bf4bcab292de460c14def91c1c971ff42c34 100644 (file)
@@ -1844,11 +1844,12 @@ nfsd4_create_session(struct svc_rqst *rqstp,
 
        /* cache solo and embedded create sessions under the state lock */
        nfsd4_cache_create_session(cr_ses, cs_slot, status);
-out:
        nfs4_unlock_state();
+out:
        dprintk("%s returns %d\n", __func__, ntohl(status));
        return status;
 out_free_conn:
+       nfs4_unlock_state();
        free_conn(conn);
 out_free_session:
        __free_session(new);