diff options
Diffstat (limited to 'fs/dlm/memory.c')
-rw-r--r-- | fs/dlm/memory.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/fs/dlm/memory.c b/fs/dlm/memory.c index 8e0d00db004..da64df7576e 100644 --- a/fs/dlm/memory.c +++ b/fs/dlm/memory.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include "memory.h" | 16 | #include "memory.h" |
17 | 17 | ||
18 | static struct kmem_cache *lkb_cache; | 18 | static struct kmem_cache *lkb_cache; |
19 | static struct kmem_cache *rsb_cache; | ||
19 | 20 | ||
20 | 21 | ||
21 | int __init dlm_memory_init(void) | 22 | int __init dlm_memory_init(void) |
@@ -26,6 +27,14 @@ int __init dlm_memory_init(void) | |||
26 | __alignof__(struct dlm_lkb), 0, NULL); | 27 | __alignof__(struct dlm_lkb), 0, NULL); |
27 | if (!lkb_cache) | 28 | if (!lkb_cache) |
28 | ret = -ENOMEM; | 29 | ret = -ENOMEM; |
30 | |||
31 | rsb_cache = kmem_cache_create("dlm_rsb", sizeof(struct dlm_rsb), | ||
32 | __alignof__(struct dlm_rsb), 0, NULL); | ||
33 | if (!rsb_cache) { | ||
34 | kmem_cache_destroy(lkb_cache); | ||
35 | ret = -ENOMEM; | ||
36 | } | ||
37 | |||
29 | return ret; | 38 | return ret; |
30 | } | 39 | } |
31 | 40 | ||
@@ -33,6 +42,8 @@ void dlm_memory_exit(void) | |||
33 | { | 42 | { |
34 | if (lkb_cache) | 43 | if (lkb_cache) |
35 | kmem_cache_destroy(lkb_cache); | 44 | kmem_cache_destroy(lkb_cache); |
45 | if (rsb_cache) | ||
46 | kmem_cache_destroy(rsb_cache); | ||
36 | } | 47 | } |
37 | 48 | ||
38 | char *dlm_allocate_lvb(struct dlm_ls *ls) | 49 | char *dlm_allocate_lvb(struct dlm_ls *ls) |
@@ -48,16 +59,11 @@ void dlm_free_lvb(char *p) | |||
48 | kfree(p); | 59 | kfree(p); |
49 | } | 60 | } |
50 | 61 | ||
51 | /* FIXME: have some minimal space built-in to rsb for the name and | 62 | struct dlm_rsb *dlm_allocate_rsb(struct dlm_ls *ls) |
52 | kmalloc a separate name if needed, like dentries are done */ | ||
53 | |||
54 | struct dlm_rsb *dlm_allocate_rsb(struct dlm_ls *ls, int namelen) | ||
55 | { | 63 | { |
56 | struct dlm_rsb *r; | 64 | struct dlm_rsb *r; |
57 | 65 | ||
58 | DLM_ASSERT(namelen <= DLM_RESNAME_MAXLEN,); | 66 | r = kmem_cache_zalloc(rsb_cache, GFP_NOFS); |
59 | |||
60 | r = kzalloc(sizeof(*r) + namelen, GFP_NOFS); | ||
61 | return r; | 67 | return r; |
62 | } | 68 | } |
63 | 69 | ||
@@ -65,7 +71,7 @@ void dlm_free_rsb(struct dlm_rsb *r) | |||
65 | { | 71 | { |
66 | if (r->res_lvbptr) | 72 | if (r->res_lvbptr) |
67 | dlm_free_lvb(r->res_lvbptr); | 73 | dlm_free_lvb(r->res_lvbptr); |
68 | kfree(r); | 74 | kmem_cache_free(rsb_cache, r); |
69 | } | 75 | } |
70 | 76 | ||
71 | struct dlm_lkb *dlm_allocate_lkb(struct dlm_ls *ls) | 77 | struct dlm_lkb *dlm_allocate_lkb(struct dlm_ls *ls) |