NFSv41: nfs4_reset_session must always set NFS4CLNT_SESSION_DRAINING
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Sat, 5 Dec 2009 20:03:20 +0000 (15:03 -0500)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Sat, 5 Dec 2009 20:03:20 +0000 (15:03 -0500)
Otherwise we have no guarantees that other processes won't start another
RPC call while we're resetting the session.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/nfs4state.c

index a86f3ac..bc4ca6f 100644 (file)
@@ -1211,8 +1211,8 @@ static int nfs4_reset_session(struct nfs_client *clp)
 
        INIT_COMPLETION(ses->complete);
        spin_lock(&tbl->slot_tbl_lock);
+       set_bit(NFS4CLNT_SESSION_DRAINING, &clp->cl_state);
        if (tbl->highest_used_slotid != -1) {
-               set_bit(NFS4CLNT_SESSION_DRAINING, &clp->cl_state);
                spin_unlock(&tbl->slot_tbl_lock);
                status = wait_for_completion_interruptible(&ses->complete);
                if (status) /* -ERESTARTSYS */