2008-06-16 21:24:48

by J. Bruce Fields

[permalink] [raw]
Subject: Re: [PATCH 10/11] svcrdma: Create a kmem cache for the WR contexts

On Thu, May 29, 2008 at 12:54:55PM -0500, Tom Tucker wrote:
> 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 <[email protected]>
>
> ---
> net/sunrpc/xprtrdma/svc_rdma.c | 24 ++++++++++++++++++++----
> 1 files changed, 20 insertions(+), 4 deletions(-)
>
> diff --git a/net/sunrpc/xprtrdma/svc_rdma.c b/net/sunrpc/xprtrdma/svc_rdma.c
> index 1959a9d..8a7d34b 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;
> 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 = NULL;
> +struct kmem_cache *svc_rdma_ctxt_cachep = NULL;

No need to initialize this one either.

>
> /*
> * This function implements reading and resetting an atomic_t stat
> @@ -247,6 +248,8 @@ void svc_rdma_cleanup(void)
> svc_unreg_xprt_class(&svc_rdma_class);
> if (svc_rdma_map_cachep)
> kmem_cache_destroy(svc_rdma_map_cachep);
> + if (svc_rdma_ctxt_cachep)
> + kmem_cache_destroy(svc_rdma_ctxt_cachep);

And the conditional is probably unnecessary again.

--b.

> }
>
> int svc_rdma_init(void)
> @@ -269,14 +272,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:
> if (svcrdma_table_header) {
> unregister_sysctl_table(svcrdma_table_header);
> svcrdma_table_header = NULL;


2008-06-21 17:08:42

by Tom Tucker

[permalink] [raw]
Subject: Re: [PATCH 10/11] svcrdma: Create a kmem cache for the WR contexts

J. Bruce Fields wrote:
> On Thu, May 29, 2008 at 12:54:55PM -0500, Tom Tucker wrote:
>
>> 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 <[email protected]>
>>
>> ---
>> net/sunrpc/xprtrdma/svc_rdma.c | 24 ++++++++++++++++++++----
>> 1 files changed, 20 insertions(+), 4 deletions(-)
>>
>> diff --git a/net/sunrpc/xprtrdma/svc_rdma.c b/net/sunrpc/xprtrdma/svc_rdma.c
>> index 1959a9d..8a7d34b 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;
>> 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 = NULL;
>> +struct kmem_cache *svc_rdma_ctxt_cachep = NULL;
>>
>
> No need to initialize this one either.
>
>
Given the way it's used, agreed.
>>
>> /*
>> * This function implements reading and resetting an atomic_t stat
>> @@ -247,6 +248,8 @@ void svc_rdma_cleanup(void)
>> svc_unreg_xprt_class(&svc_rdma_class);
>> if (svc_rdma_map_cachep)
>> kmem_cache_destroy(svc_rdma_map_cachep);
>> + if (svc_rdma_ctxt_cachep)
>> + kmem_cache_destroy(svc_rdma_ctxt_cachep);
>>
>
> And the conditional is probably unnecessary again.
>
>
ok.
> --b.
>
>
>> }
>>
>> int svc_rdma_init(void)
>> @@ -269,14 +272,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:
>> if (svcrdma_table_header) {
>> unregister_sysctl_table(svcrdma_table_header);
>> svcrdma_table_header = NULL;
>>