svcrdma: Create a kmem cache for the WR contexts
authorTom Tucker <tom@opengridcomputing.com>
Wed, 28 May 2008 19:05:54 +0000 (14:05 -0500)
committerTom Tucker <tom@opengridcomputing.com>
Wed, 2 Jul 2008 20:02:01 +0000 (15:02 -0500)
Create a kmem cache to hold WR contexts. Next we will convert
the WR context get and put services to use this kmem cache.

Signed-off-by: Tom Tucker <tom@opengridcomputing.com>
net/sunrpc/xprtrdma/svc_rdma.c

index 527acfd..8710117 100644 (file)
@@ -69,8 +69,9 @@ atomic_t rdma_stat_rq_prod;
 atomic_t rdma_stat_sq_poll;
 atomic_t rdma_stat_sq_prod;
 
-/* Temporary NFS request map cache */
+/* Temporary NFS request map and context caches */
 struct kmem_cache *svc_rdma_map_cachep;
+struct kmem_cache *svc_rdma_ctxt_cachep;
 
 /*
  * This function implements reading and resetting an atomic_t stat
@@ -246,6 +247,7 @@ void svc_rdma_cleanup(void)
        }
        svc_unreg_xprt_class(&svc_rdma_class);
        kmem_cache_destroy(svc_rdma_map_cachep);
+       kmem_cache_destroy(svc_rdma_ctxt_cachep);
 }
 
 int svc_rdma_init(void)
@@ -268,14 +270,27 @@ int svc_rdma_init(void)
                                                NULL);
        if (!svc_rdma_map_cachep) {
                printk(KERN_INFO "Could not allocate map cache.\n");
-               goto err;
+               goto err0;
+       }
+
+       /* Create the temporary context cache */
+       svc_rdma_ctxt_cachep =
+               kmem_cache_create("svc_rdma_ctxt_cache",
+                                 sizeof(struct svc_rdma_op_ctxt),
+                                 0,
+                                 SLAB_HWCACHE_ALIGN,
+                                 NULL);
+       if (!svc_rdma_ctxt_cachep) {
+               printk(KERN_INFO "Could not allocate WR ctxt cache.\n");
+               goto err1;
        }
 
        /* Register RDMA with the SVC transport switch */
        svc_reg_xprt_class(&svc_rdma_class);
        return 0;
-
- err:
+ err1:
+       kmem_cache_destroy(svc_rdma_map_cachep);
+ err0:
        unregister_sysctl_table(svcrdma_table_header);
        return -ENOMEM;
 }