aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/xprtrdma/svc_rdma.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sunrpc/xprtrdma/svc_rdma.c')
-rw-r--r--net/sunrpc/xprtrdma/svc_rdma.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/net/sunrpc/xprtrdma/svc_rdma.c b/net/sunrpc/xprtrdma/svc_rdma.c
index 527acfd38284..87101177825b 100644
--- a/net/sunrpc/xprtrdma/svc_rdma.c
+++ b/net/sunrpc/xprtrdma/svc_rdma.c
@@ -69,8 +69,9 @@ atomic_t rdma_stat_rq_prod;
69atomic_t rdma_stat_sq_poll; 69atomic_t rdma_stat_sq_poll;
70atomic_t rdma_stat_sq_prod; 70atomic_t rdma_stat_sq_prod;
71 71
72/* Temporary NFS request map cache */ 72/* Temporary NFS request map and context caches */
73struct kmem_cache *svc_rdma_map_cachep; 73struct kmem_cache *svc_rdma_map_cachep;
74struct kmem_cache *svc_rdma_ctxt_cachep;
74 75
75/* 76/*
76 * This function implements reading and resetting an atomic_t stat 77 * This function implements reading and resetting an atomic_t stat
@@ -246,6 +247,7 @@ void svc_rdma_cleanup(void)
246 } 247 }
247 svc_unreg_xprt_class(&svc_rdma_class); 248 svc_unreg_xprt_class(&svc_rdma_class);
248 kmem_cache_destroy(svc_rdma_map_cachep); 249 kmem_cache_destroy(svc_rdma_map_cachep);
250 kmem_cache_destroy(svc_rdma_ctxt_cachep);
249} 251}
250 252
251int svc_rdma_init(void) 253int svc_rdma_init(void)
@@ -268,14 +270,27 @@ int svc_rdma_init(void)
268 NULL); 270 NULL);
269 if (!svc_rdma_map_cachep) { 271 if (!svc_rdma_map_cachep) {
270 printk(KERN_INFO "Could not allocate map cache.\n"); 272 printk(KERN_INFO "Could not allocate map cache.\n");
271 goto err; 273 goto err0;
274 }
275
276 /* Create the temporary context cache */
277 svc_rdma_ctxt_cachep =
278 kmem_cache_create("svc_rdma_ctxt_cache",
279 sizeof(struct svc_rdma_op_ctxt),
280 0,
281 SLAB_HWCACHE_ALIGN,
282 NULL);
283 if (!svc_rdma_ctxt_cachep) {
284 printk(KERN_INFO "Could not allocate WR ctxt cache.\n");
285 goto err1;
272 } 286 }
273 287
274 /* Register RDMA with the SVC transport switch */ 288 /* Register RDMA with the SVC transport switch */
275 svc_reg_xprt_class(&svc_rdma_class); 289 svc_reg_xprt_class(&svc_rdma_class);
276 return 0; 290 return 0;
277 291 err1:
278 err: 292 kmem_cache_destroy(svc_rdma_map_cachep);
293 err0:
279 unregister_sysctl_table(svcrdma_table_header); 294 unregister_sysctl_table(svcrdma_table_header);
280 return -ENOMEM; 295 return -ENOMEM;
281} 296}