diff options
Diffstat (limited to 'fs/dlm/memory.c')
| -rw-r--r-- | fs/dlm/memory.c | 28 | 
1 files changed, 16 insertions, 12 deletions
diff --git a/fs/dlm/memory.c b/fs/dlm/memory.c index 8e0d00db004..7cd24bccd4f 100644 --- a/fs/dlm/memory.c +++ b/fs/dlm/memory.c @@ -16,23 +16,32 @@  #include "memory.h"  static struct kmem_cache *lkb_cache; +static struct kmem_cache *rsb_cache;  int __init dlm_memory_init(void)  { -	int ret = 0; -  	lkb_cache = kmem_cache_create("dlm_lkb", sizeof(struct dlm_lkb),  				__alignof__(struct dlm_lkb), 0, NULL);  	if (!lkb_cache) -		ret = -ENOMEM; -	return ret; +		return -ENOMEM; + +	rsb_cache = kmem_cache_create("dlm_rsb", sizeof(struct dlm_rsb), +				__alignof__(struct dlm_rsb), 0, NULL); +	if (!rsb_cache) { +		kmem_cache_destroy(lkb_cache); +		return -ENOMEM; +	} + +	return 0;  }  void dlm_memory_exit(void)  {  	if (lkb_cache)  		kmem_cache_destroy(lkb_cache); +	if (rsb_cache) +		kmem_cache_destroy(rsb_cache);  }  char *dlm_allocate_lvb(struct dlm_ls *ls) @@ -48,16 +57,11 @@ void dlm_free_lvb(char *p)  	kfree(p);  } -/* FIXME: have some minimal space built-in to rsb for the name and -   kmalloc a separate name if needed, like dentries are done */ - -struct dlm_rsb *dlm_allocate_rsb(struct dlm_ls *ls, int namelen) +struct dlm_rsb *dlm_allocate_rsb(struct dlm_ls *ls)  {  	struct dlm_rsb *r; -	DLM_ASSERT(namelen <= DLM_RESNAME_MAXLEN,); - -	r = kzalloc(sizeof(*r) + namelen, GFP_NOFS); +	r = kmem_cache_zalloc(rsb_cache, GFP_NOFS);  	return r;  } @@ -65,7 +69,7 @@ void dlm_free_rsb(struct dlm_rsb *r)  {  	if (r->res_lvbptr)  		dlm_free_lvb(r->res_lvbptr); -	kfree(r); +	kmem_cache_free(rsb_cache, r);  }  struct dlm_lkb *dlm_allocate_lkb(struct dlm_ls *ls)  | 
