[PATCH] nfsd4: remove debugging counters
[powerpc.git] / fs / nfsd / nfs4state.c
index 260c1cb..f03a418 100644 (file)
@@ -65,16 +65,6 @@ static u32 nfs4_init;
 stateid_t zerostateid;             /* bits all 0 */
 stateid_t onestateid;              /* bits all 1 */
 
-/* debug counters */
-u32 list_add_perfile = 0; 
-u32 list_del_perfile = 0;
-u32 add_perclient = 0;
-u32 del_perclient = 0;
-u32 vfsopen = 0;
-u32 vfsclose = 0;
-u32 alloc_delegation= 0;
-u32 free_delegation= 0;
-
 /* forward declarations */
 struct nfs4_stateid * find_stateid(stateid_t *stid, int flags);
 static struct nfs4_delegation * find_delegation_stateid(struct inode *ino, stateid_t *stid);
@@ -90,6 +80,8 @@ static DECLARE_MUTEX(client_sema);
 
 kmem_cache_t *stateowner_slab = NULL;
 kmem_cache_t *file_slab = NULL;
+kmem_cache_t *stateid_slab = NULL;
+kmem_cache_t *deleg_slab = NULL;
 
 void
 nfs4_lock_state(void)
@@ -137,8 +129,8 @@ alloc_init_deleg(struct nfs4_client *clp, struct nfs4_stateid *stp, struct svc_f
        struct nfs4_callback *cb = &stp->st_stateowner->so_client->cl_callback;
 
        dprintk("NFSD alloc_init_deleg\n");
-       if ((dp = kmalloc(sizeof(struct nfs4_delegation),
-               GFP_KERNEL)) == NULL)
+       dp = kmem_cache_alloc(deleg_slab, GFP_KERNEL);
+       if (dp == NULL)
                return dp;
        INIT_LIST_HEAD(&dp->dl_del_perfile);
        INIT_LIST_HEAD(&dp->dl_del_perclnt);
@@ -163,7 +155,6 @@ alloc_init_deleg(struct nfs4_client *clp, struct nfs4_stateid *stp, struct svc_f
        atomic_set(&dp->dl_count, 1);
        list_add(&dp->dl_del_perfile, &fp->fi_del_perfile);
        list_add(&dp->dl_del_perclnt, &clp->cl_del_perclnt);
-       alloc_delegation++;
        return dp;
 }
 
@@ -172,8 +163,7 @@ nfs4_put_delegation(struct nfs4_delegation *dp)
 {
        if (atomic_dec_and_test(&dp->dl_count)) {
                dprintk("NFSD: freeing dp %p\n",dp);
-               kfree(dp);
-               free_delegation++;
+               kmem_cache_free(deleg_slab, dp);
        }
 }
 
@@ -194,7 +184,6 @@ nfs4_close_delegation(struct nfs4_delegation *dp)
        if (dp->dl_flock)
                setlease(filp, F_UNLCK, &dp->dl_flock);
        nfsd_close(filp);
-       vfsclose++;
 }
 
 /* Called under the state lock. */
@@ -1010,6 +999,8 @@ nfsd4_free_slabs(void)
 {
        nfsd4_free_slab(&stateowner_slab);
        nfsd4_free_slab(&file_slab);
+       nfsd4_free_slab(&stateid_slab);
+       nfsd4_free_slab(&deleg_slab);
 }
 
 static int
@@ -1023,6 +1014,14 @@ nfsd4_init_slabs(void)
                        sizeof(struct nfs4_file), 0, 0, NULL, NULL);
        if (file_slab == NULL)
                goto out_nomem;
+       stateid_slab = kmem_cache_create("nfsd4_stateids",
+                       sizeof(struct nfs4_stateid), 0, 0, NULL, NULL);
+       if (stateid_slab == NULL)
+               goto out_nomem;
+       deleg_slab = kmem_cache_create("nfsd4_delegations",
+                       sizeof(struct nfs4_delegation), 0, 0, NULL, NULL);
+       if (deleg_slab == NULL)
+               goto out_nomem;
        return 0;
 out_nomem:
        nfsd4_free_slabs();
@@ -1075,7 +1074,6 @@ alloc_init_open_stateowner(unsigned int strhashval, struct nfs4_client *clp, str
        list_add(&sop->so_idhash, &ownerid_hashtbl[idhashval]);
        list_add(&sop->so_strhash, &ownerstr_hashtbl[strhashval]);
        list_add(&sop->so_perclient, &clp->cl_perclient);
-       add_perclient++;
        sop->so_is_open_owner = 1;
        sop->so_id = current_ownerid++;
        sop->so_client = clp;
@@ -1109,10 +1107,8 @@ unhash_stateowner(struct nfs4_stateowner *sop)
 
        list_del(&sop->so_idhash);
        list_del(&sop->so_strhash);
-       if (sop->so_is_open_owner) {
+       if (sop->so_is_open_owner)
                list_del(&sop->so_perclient);
-               del_perclient++;
-       }
        list_del(&sop->so_perlockowner);
        while (!list_empty(&sop->so_perfilestate)) {
                stp = list_entry(sop->so_perfilestate.next, 
@@ -1143,7 +1139,6 @@ init_stateid(struct nfs4_stateid *stp, struct nfs4_file *fp, struct nfsd4_open *
        INIT_LIST_HEAD(&stp->st_perfile);
        list_add(&stp->st_hash, &stateid_hashtbl[hashval]);
        list_add(&stp->st_perfilestate, &sop->so_perfilestate);
-       list_add_perfile++;
        list_add(&stp->st_perfile, &fp->fi_perfile);
        stp->st_stateowner = sop;
        stp->st_file = fp;
@@ -1163,17 +1158,15 @@ release_stateid(struct nfs4_stateid *stp, int flags)
        struct file *filp = stp->st_vfs_file;
 
        list_del(&stp->st_hash);
-       list_del_perfile++;
        list_del(&stp->st_perfile);
        list_del(&stp->st_perfilestate);
        if (flags & OPEN_STATE) {
                release_stateid_lockowners(stp);
                stp->st_vfs_file = NULL;
                nfsd_close(filp);
-               vfsclose++;
        } else if (flags & LOCK_STATE)
                locks_remove_posix(filp, (fl_owner_t) stp->st_stateowner);
-       kfree(stp);
+       kmem_cache_free(stateid_slab, stp);
        stp = NULL;
 }
 
@@ -1606,6 +1599,12 @@ out:
        return status;
 }
 
+static inline struct nfs4_stateid *
+nfs4_alloc_stateid(void)
+{
+       return kmem_cache_alloc(stateid_slab, GFP_KERNEL);
+}
+
 static int
 nfs4_new_open(struct svc_rqst *rqstp, struct nfs4_stateid **stpp,
                struct nfs4_delegation *dp,
@@ -1613,7 +1612,7 @@ nfs4_new_open(struct svc_rqst *rqstp, struct nfs4_stateid **stpp,
 {
        struct nfs4_stateid *stp;
 
-       stp = kmalloc(sizeof(struct nfs4_stateid), GFP_KERNEL);
+       stp = nfs4_alloc_stateid();
        if (stp == NULL)
                return nfserr_resource;
 
@@ -1627,11 +1626,10 @@ nfs4_new_open(struct svc_rqst *rqstp, struct nfs4_stateid **stpp,
                if (status) {
                        if (status == nfserr_dropit)
                                status = nfserr_jukebox;
-                       kfree(stp);
+                       kmem_cache_free(stateid_slab, stp);
                        return status;
                }
        }
-       vfsopen++;
        *stpp = stp;
        return 0;
 }
@@ -2627,8 +2625,8 @@ alloc_init_lock_stateid(struct nfs4_stateowner *sop, struct nfs4_file *fp, struc
        struct nfs4_stateid *stp;
        unsigned int hashval = stateid_hashval(sop->so_id, fp->fi_id);
 
-       if ((stp = kmalloc(sizeof(struct nfs4_stateid), 
-                                       GFP_KERNEL)) == NULL)
+       stp = nfs4_alloc_stateid();
+       if (stp == NULL)
                goto out;
        INIT_LIST_HEAD(&stp->st_hash);
        INIT_LIST_HEAD(&stp->st_perfile);
@@ -2636,7 +2634,6 @@ alloc_init_lock_stateid(struct nfs4_stateowner *sop, struct nfs4_file *fp, struc
        INIT_LIST_HEAD(&stp->st_perlockowner); /* not used */
        list_add(&stp->st_hash, &lockstateid_hashtbl[hashval]);
        list_add(&stp->st_perfile, &fp->fi_perfile);
-       list_add_perfile++;
        list_add(&stp->st_perfilestate, &sop->so_perfilestate);
        stp->st_stateowner = sop;
        stp->st_file = fp;
@@ -3294,15 +3291,6 @@ __nfs4_state_shutdown(void)
        cancel_delayed_work(&laundromat_work);
        flush_scheduled_work();
        nfs4_init = 0;
-       dprintk("NFSD: list_add_perfile %d list_del_perfile %d\n",
-                       list_add_perfile, list_del_perfile);
-       dprintk("NFSD: add_perclient %d del_perclient %d\n",
-                       add_perclient, del_perclient);
-       dprintk("NFSD: vfsopen %d vfsclose %d\n",
-                       vfsopen, vfsclose);
-       dprintk("NFSD: alloc_delegation %d free_delegation %d\n",
-                       alloc_delegation, free_delegation);
-
 }
 
 void