nfs41: Backchannel: Refactor nfs4_reset_slot_table()
authorRicardo Labiaga <Ricardo.Labiaga@netapp.com>
Wed, 1 Apr 2009 13:23:31 +0000 (09:23 -0400)
committerBenny Halevy <bhalevy@panasas.com>
Wed, 17 Jun 2009 21:11:41 +0000 (14:11 -0700)
Generalize nfs4_reset_slot_table() so it can be used to reset the
backchannel slot table in addition to the forechannel slot table.

Signed-off-by: Ricardo Labiaga <Ricardo.Labiaga@netapp.com>
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
fs/nfs/nfs4proc.c

index 5da939d577d5092d90615abb19943a18131f4711..a7b1d6c228cd82ca3457239251b756dc02e79d9d 100644 (file)
@@ -4370,19 +4370,21 @@ int nfs4_proc_get_lease_time(struct nfs_client *clp, struct nfs_fsinfo *fsinfo)
        return status;
 }
 
-/* Reset a slot table */
-static int nfs4_reset_slot_table(struct nfs4_session *session)
+/*
+ * Reset a slot table
+ */
+static int nfs4_reset_slot_table(struct nfs4_slot_table *tbl, int max_slots,
+               int old_max_slots, int ivalue)
 {
-       struct nfs4_slot_table *tbl = &session->fc_slot_table;
-       int i, max_slots = session->fc_attrs.max_reqs;
-       int old_max_slots = session->fc_slot_table.max_slots;
+       int i;
        int ret = 0;
 
-       dprintk("--> %s: max_reqs=%u, tbl %p\n", __func__,
-               session->fc_attrs.max_reqs, tbl);
+       dprintk("--> %s: max_reqs=%u, tbl %p\n", __func__, max_slots, tbl);
 
-       /* Until we have dynamic slot table adjustment, insist
-        * upon the same slot table size */
+       /*
+        * Until we have dynamic slot table adjustment, insist
+        * upon the same slot table size
+        */
        if (max_slots != old_max_slots) {
                dprintk("%s reset slot table does't match old\n",
                        __func__);
@@ -4391,7 +4393,7 @@ static int nfs4_reset_slot_table(struct nfs4_session *session)
        }
        spin_lock(&tbl->slot_tbl_lock);
        for (i = 0; i < max_slots; ++i)
-               tbl->slots[i].seq_nr = 1;
+               tbl->slots[i].seq_nr = ivalue;
        tbl->highest_used_slotid = -1;
        spin_unlock(&tbl->slot_tbl_lock);
        dprintk("%s: tbl=%p slots=%p max_slots=%d\n", __func__,
@@ -4401,6 +4403,20 @@ out:
        return ret;
 }
 
+/*
+ * Reset the forechannel and backchannel slot tables
+ */
+static int nfs4_reset_slot_tables(struct nfs4_session *session)
+{
+       int status;
+
+       status = nfs4_reset_slot_table(&session->fc_slot_table,
+                       session->fc_attrs.max_reqs,
+                       session->fc_slot_table.max_slots,
+                       1);
+       return status;
+}
+
 /*
  * Initialize slot table
  */
@@ -4639,7 +4655,7 @@ int nfs4_proc_create_session(struct nfs_client *clp, int reset)
 
        /* Init or reset the fore channel */
        if (reset)
-               status = nfs4_reset_slot_table(session);
+               status = nfs4_reset_slot_tables(session);
        else
                status = nfs4_init_slot_table(session);
        dprintk("fore channel slot table initialization returned %d\n", status);