nfs: minor cleanup of session draining
authorAlexandros Batsakis <batsakis@netapp.com>
Wed, 9 Dec 2009 09:50:11 +0000 (01:50 -0800)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Tue, 15 Dec 2009 18:50:01 +0000 (13:50 -0500)
Signed-off-by: Alexandros Batsakis <batsakis@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/nfs4proc.c

index 9f5f11ecfd93853ac3e18fe5b19a95f4b24d8645..d117a7befd466833ff7c6561ed7399584c5c34c0 100644 (file)
@@ -341,6 +341,23 @@ nfs4_free_slot(struct nfs4_slot_table *tbl, u8 free_slotid)
                free_slotid, tbl->highest_used_slotid);
 }
 
+/*
+ * Signal state manager thread if session is drained
+ */
+static void nfs41_check_drain_session_complete(struct nfs4_session *ses)
+{
+       if (!test_bit(NFS4CLNT_SESSION_DRAINING, &ses->clp->cl_state)) {
+               rpc_wake_up_next(&ses->fc_slot_table.slot_tbl_waitq);
+               return;
+       }
+
+       if (ses->fc_slot_table.highest_used_slotid != -1)
+               return;
+
+       dprintk("%s COMPLETE: Session Drained\n", __func__);
+       complete(&ses->complete);
+}
+
 static void nfs41_sequence_free_slot(const struct nfs_client *clp,
                              struct nfs4_sequence_res *res)
 {
@@ -356,15 +373,7 @@ static void nfs41_sequence_free_slot(const struct nfs_client *clp,
 
        spin_lock(&tbl->slot_tbl_lock);
        nfs4_free_slot(tbl, res->sr_slotid);
-
-       /* Signal state manager thread if session is drained */
-       if (test_bit(NFS4CLNT_SESSION_DRAINING, &clp->cl_state)) {
-               if (tbl->highest_used_slotid == -1) {
-                       dprintk("%s COMPLETE: Session Drained\n", __func__);
-                       complete(&clp->cl_session->complete);
-               }
-       } else
-               rpc_wake_up_next(&tbl->slot_tbl_waitq);
+       nfs41_check_drain_session_complete(clp->cl_session);
        spin_unlock(&tbl->slot_tbl_lock);
        res->sr_slotid = NFS4_MAX_SLOT_TABLE;
 }