kern - Convert NFS from zalloc to objcache
authorSamuel J. Greear <sjg@thesjg.com>
Sat, 5 Feb 2011 04:17:41 +0000 (04:17 +0000)
committerSamuel J. Greear <sjg@thesjg.com>
Sat, 5 Feb 2011 04:17:41 +0000 (04:17 +0000)
Sponsored-By: Google Code-In
sys/vfs/nfs/nfs.h
sys/vfs/nfs/nfs_kerb.c
sys/vfs/nfs/nfs_node.c
sys/vfs/nfs/nfs_serv.c
sys/vfs/nfs/nfs_subs.c
sys/vfs/nfs/nfs_syscalls.c
sys/vfs/nfs/nfs_vfsops.c
sys/vfs/nfs/nfs_vnops.c
sys/vfs/nfs/nfsm_subs.c

index bc10a9c..fa9471a 100644 (file)
@@ -308,9 +308,7 @@ MALLOC_DECLARE(M_NFSBIGFH);
 MALLOC_DECLARE(M_NFSHASH);
 #endif
 
-#ifdef ZONE_INTERRUPT
-extern vm_zone_t nfsmount_zone;
-#endif
+extern struct objcache *nfsmount_objcache;
 
 extern struct callout nfs_timer_handle;
 extern int nfs_async;
index 2ac745f..15606bc 100644 (file)
@@ -50,8 +50,6 @@
 #include <sys/socketvar.h>
 #include <sys/protosw.h>
 
-#include <vm/vm_zone.h>
-
 #include <netinet/in.h>
 #include "rpcv2.h"
 #include "nfsproto.h"
index e88a818..3757517 100644 (file)
@@ -46,9 +46,9 @@
 #include <sys/namei.h>
 #include <sys/vnode.h>
 #include <sys/malloc.h>
+#include <sys/kernel.h>
 #include <sys/fnv_hash.h>
-
-#include <vm/vm_zone.h>
+#include <sys/objcache.h>
 
 #include "rpcv2.h"
 #include "nfsproto.h"
@@ -56,7 +56,9 @@
 #include "nfsmount.h"
 #include "nfsnode.h"
 
-static vm_zone_t nfsnode_zone;
+static MALLOC_DEFINE(M_NFSNODE, "NFS node", "NFS node");
+
+static struct objcache *nfsnode_objcache;
 static LIST_HEAD(nfsnodehashhead, nfsnode) *nfsnodehashtbl;
 static u_long nfsnodehash;
 static lwkt_token nfsnhash_token = LWKT_TOKEN_INITIALIZER(nfsnhash_token);
@@ -74,7 +76,7 @@ static struct lock nfsnhash_lock;
 void
 nfs_nhinit(void)
 {
-       nfsnode_zone = zinit("NFSNODE", sizeof(struct nfsnode), 0, 0, 1);
+       nfsnode_objcache = objcache_create_simple(M_NFSNODE, sizeof(struct nfsnode));
        nfsnodehashtbl = hashinit(desiredvnodes, M_NFSHASH, &nfsnodehash);
        lockinit(&nfsnhash_lock, "nfsnht", 0, 0);
 }
@@ -146,15 +148,15 @@ loop:
        /*
         * Allocate before getnewvnode since doing so afterward
         * might cause a bogus v_data pointer to get dereferenced
-        * elsewhere if zalloc should block.
+        * elsewhere if objcache should block.
         */
-       np = zalloc(nfsnode_zone);
+       np = objcache_get(nfsnode_objcache, M_WAITOK);
                
        error = getnewvnode(VT_NFS, mntp, &vp, 0, 0);
        if (error) {
                lockmgr(&nfsnhash_lock, LK_RELEASE);
                *npp = NULL;
-               zfree(nfsnode_zone, np);
+               objcache_put(nfsnode_objcache, np);
                lwkt_reltoken(&nfsnhash_token);
                return (error);
        }
@@ -187,7 +189,7 @@ loop:
                if (np->n_fhsize > NFS_SMALLFH)
                        FREE((caddr_t)np->n_fhp, M_NFSBIGFH);
                np->n_fhp = NULL;
-               zfree(nfsnode_zone, np);
+               objcache_put(nfsnode_objcache, np);
                goto retry;
        }
 
@@ -281,14 +283,14 @@ loop:
         *
         * Allocate before getnewvnode since doing so afterward
         * might cause a bogus v_data pointer to get dereferenced
-        * elsewhere if zalloc should block.
+        * elsewhere if objcache should block.
         */
-       np = zalloc(nfsnode_zone);
+       np = objcache_get(nfsnode_objcache, M_WAITOK);
 
        error = getnewvnode(VT_NFS, mntp, &vp, 0, 0);
        if (error) {
                lockmgr(&nfsnhash_lock, LK_RELEASE);
-               zfree(nfsnode_zone, np);
+               objcache_put(nfsnode_objcache, np);
                lwkt_reltoken(&nfsnhash_token);
                return (error);
        }
@@ -321,7 +323,7 @@ loop:
                if (np->n_fhsize > NFS_SMALLFH)
                        FREE((caddr_t)np->n_fhp, M_NFSBIGFH);
                np->n_fhp = NULL;
-               zfree(nfsnode_zone, np);
+               objcache_put(nfsnode_objcache, np);
 
                /*
                 * vp state is retained on retry/loop so we must NULL it
@@ -453,7 +455,7 @@ nfs_reclaim(struct vop_reclaim_args *ap)
        vp->v_data = NULL;
 
        lwkt_reltoken(&nmp->nm_token);
-       zfree(nfsnode_zone, np);
+       objcache_put(nfsnode_objcache, np);
 
        return (0);
 }
index 2d5d243..8b1f7bc 100644 (file)
@@ -84,7 +84,6 @@
 
 #include <vm/vm.h>
 #include <vm/vm_extern.h>
-#include <vm/vm_zone.h>
 #include <vm/vm_object.h>
 
 #include <sys/buf2.h>
index 6b12d6f..97f902d 100644 (file)
@@ -64,7 +64,6 @@
 #include <vm/vm.h>
 #include <vm/vm_object.h>
 #include <vm/vm_extern.h>
-#include <vm/vm_zone.h>
 
 #include <sys/buf2.h>
 
@@ -79,6 +78,8 @@
 
 #include <netinet/in.h>
 
+MALLOC_DEFINE(M_NFSMOUNT, "NFS mount", "NFS mount");
+
 /*
  * Data items converted to xdr at startup, since they are constant
  * This is kinda hokey, but may save a little time doing byte swaps
@@ -571,7 +572,7 @@ int
 nfs_init(struct vfsconf *vfsp)
 {
        callout_init(&nfs_timer_handle);
-       nfsmount_zone = zinit("NFSMOUNT", sizeof(struct nfsmount), 0, 0, 1);
+       nfsmount_objcache = objcache_create_simple(M_NFSMOUNT, sizeof(struct nfsmount));
 
        nfs_mount_type = vfsp->vfc_typenum;
        nfsrtt.pos = 0;
index de4c03c..2f9e9bf 100644 (file)
@@ -58,7 +58,6 @@
 #include <sys/domain.h>
 #include <sys/protosw.h>
 #include <sys/nlookup.h>
-#include <vm/vm_zone.h>
 
 #include <sys/mutex2.h>
 #include <sys/thread2.h>
index 0e58e87..4ebf91d 100644 (file)
 #include <sys/socket.h>
 #include <sys/socketvar.h>
 #include <sys/systm.h>
+#include <sys/objcache.h>
 
 #include <vm/vm.h>
 #include <vm/vm_extern.h>
-#include <vm/vm_zone.h>
 
 #include <net/if.h>
 #include <net/route.h>
@@ -91,7 +91,7 @@ MALLOC_DEFINE(M_NFSRVDESC, "NFSV3 srvdesc", "NFS server socket descriptor");
 MALLOC_DEFINE(M_NFSUID, "NFS uid", "Nfs uid mapping structure");
 MALLOC_DEFINE(M_NFSHASH, "NFS hash", "NFS hash tables");
 
-vm_zone_t nfsmount_zone;
+struct objcache *nfsmount_objcache;
 
 struct nfsstats        nfsstats;
 SYSCTL_NODE(_vfs, OID_AUTO, nfs, CTLFLAG_RW, 0, "NFS filesystem");
@@ -1037,7 +1037,7 @@ mountnfs(struct nfs_args *argp, struct mount *mp, struct sockaddr *nam,
                FREE(nam, M_SONAME);
                return (0);
        } else {
-               nmp = zalloc(nfsmount_zone);
+               nmp = objcache_get(nfsmount_objcache, M_WAITOK);
                bzero((caddr_t)nmp, sizeof (struct nfsmount));
                mtx_init(&nmp->nm_rxlock);
                mtx_init(&nmp->nm_txlock);
@@ -1267,7 +1267,7 @@ nfs_free_mount(struct nfsmount *nmp)
                FREE(nmp->nm_nam, M_SONAME);
                nmp->nm_nam = NULL;
        }
-       zfree(nfsmount_zone, nmp);
+       objcache_put(nfsmount_objcache, nmp);
 }
 
 /*
index 8f210f6..1a9c21b 100644 (file)
@@ -67,7 +67,6 @@
 
 #include <vm/vm.h>
 #include <vm/vm_extern.h>
-#include <vm/vm_zone.h>
 
 #include <sys/buf2.h>
 
index e38c6f4..2db5709 100644 (file)
@@ -93,7 +93,6 @@
 #include <vm/vm.h>
 #include <vm/vm_object.h>
 #include <vm/vm_extern.h>
-#include <vm/vm_zone.h>
 
 #include <sys/buf2.h>