diff options
Diffstat (limited to 'net/sunrpc/xprtrdma/svc_rdma.c')
-rw-r--r-- | net/sunrpc/xprtrdma/svc_rdma.c | 23 |
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; | |||
69 | atomic_t rdma_stat_sq_poll; | 69 | atomic_t rdma_stat_sq_poll; |
70 | atomic_t rdma_stat_sq_prod; | 70 | atomic_t rdma_stat_sq_prod; |
71 | 71 | ||
72 | /* Temporary NFS request map cache */ | 72 | /* Temporary NFS request map and context caches */ |
73 | struct kmem_cache *svc_rdma_map_cachep; | 73 | struct kmem_cache *svc_rdma_map_cachep; |
74 | struct 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 | ||
251 | int svc_rdma_init(void) | 253 | int 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 | } |