~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/dlm/memory.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0-only
  2 /******************************************************************************
  3 *******************************************************************************
  4 **
  5 **  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
  6 **  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
  7 **
  8 **
  9 *******************************************************************************
 10 ******************************************************************************/
 11 
 12 #include "dlm_internal.h"
 13 #include "midcomms.h"
 14 #include "lowcomms.h"
 15 #include "config.h"
 16 #include "memory.h"
 17 #include "ast.h"
 18 
 19 static struct kmem_cache *writequeue_cache;
 20 static struct kmem_cache *mhandle_cache;
 21 static struct kmem_cache *msg_cache;
 22 static struct kmem_cache *lkb_cache;
 23 static struct kmem_cache *rsb_cache;
 24 static struct kmem_cache *cb_cache;
 25 
 26 
 27 int __init dlm_memory_init(void)
 28 {
 29         writequeue_cache = dlm_lowcomms_writequeue_cache_create();
 30         if (!writequeue_cache)
 31                 goto out;
 32 
 33         mhandle_cache = dlm_midcomms_cache_create();
 34         if (!mhandle_cache)
 35                 goto mhandle;
 36 
 37         lkb_cache = kmem_cache_create("dlm_lkb", sizeof(struct dlm_lkb),
 38                                 __alignof__(struct dlm_lkb), 0, NULL);
 39         if (!lkb_cache)
 40                 goto lkb;
 41 
 42         msg_cache = dlm_lowcomms_msg_cache_create();
 43         if (!msg_cache)
 44                 goto msg;
 45 
 46         rsb_cache = kmem_cache_create("dlm_rsb", sizeof(struct dlm_rsb),
 47                                 __alignof__(struct dlm_rsb), 0, NULL);
 48         if (!rsb_cache)
 49                 goto rsb;
 50 
 51         cb_cache = kmem_cache_create("dlm_cb", sizeof(struct dlm_callback),
 52                                      __alignof__(struct dlm_callback), 0,
 53                                      NULL);
 54         if (!cb_cache)
 55                 goto cb;
 56 
 57         return 0;
 58 
 59 cb:
 60         kmem_cache_destroy(rsb_cache);
 61 rsb:
 62         kmem_cache_destroy(msg_cache);
 63 msg:
 64         kmem_cache_destroy(lkb_cache);
 65 lkb:
 66         kmem_cache_destroy(mhandle_cache);
 67 mhandle:
 68         kmem_cache_destroy(writequeue_cache);
 69 out:
 70         return -ENOMEM;
 71 }
 72 
 73 void dlm_memory_exit(void)
 74 {
 75         rcu_barrier();
 76 
 77         kmem_cache_destroy(writequeue_cache);
 78         kmem_cache_destroy(mhandle_cache);
 79         kmem_cache_destroy(msg_cache);
 80         kmem_cache_destroy(lkb_cache);
 81         kmem_cache_destroy(rsb_cache);
 82         kmem_cache_destroy(cb_cache);
 83 }
 84 
 85 char *dlm_allocate_lvb(struct dlm_ls *ls)
 86 {
 87         char *p;
 88 
 89         p = kzalloc(ls->ls_lvblen, GFP_ATOMIC);
 90         return p;
 91 }
 92 
 93 void dlm_free_lvb(char *p)
 94 {
 95         kfree(p);
 96 }
 97 
 98 struct dlm_rsb *dlm_allocate_rsb(struct dlm_ls *ls)
 99 {
100         struct dlm_rsb *r;
101 
102         r = kmem_cache_zalloc(rsb_cache, GFP_ATOMIC);
103         return r;
104 }
105 
106 static void __free_rsb_rcu(struct rcu_head *rcu)
107 {
108         struct dlm_rsb *r = container_of(rcu, struct dlm_rsb, rcu);
109         if (r->res_lvbptr)
110                 dlm_free_lvb(r->res_lvbptr);
111         kmem_cache_free(rsb_cache, r);
112 }
113 
114 void dlm_free_rsb(struct dlm_rsb *r)
115 {
116         call_rcu(&r->rcu, __free_rsb_rcu);
117 }
118 
119 struct dlm_lkb *dlm_allocate_lkb(struct dlm_ls *ls)
120 {
121         struct dlm_lkb *lkb;
122 
123         lkb = kmem_cache_zalloc(lkb_cache, GFP_ATOMIC);
124         return lkb;
125 }
126 
127 void dlm_free_lkb(struct dlm_lkb *lkb)
128 {
129         if (test_bit(DLM_DFL_USER_BIT, &lkb->lkb_dflags)) {
130                 struct dlm_user_args *ua;
131                 ua = lkb->lkb_ua;
132                 if (ua) {
133                         kfree(ua->lksb.sb_lvbptr);
134                         kfree(ua);
135                 }
136         }
137 
138         kmem_cache_free(lkb_cache, lkb);
139 }
140 
141 struct dlm_mhandle *dlm_allocate_mhandle(void)
142 {
143         return kmem_cache_alloc(mhandle_cache, GFP_ATOMIC);
144 }
145 
146 void dlm_free_mhandle(struct dlm_mhandle *mhandle)
147 {
148         kmem_cache_free(mhandle_cache, mhandle);
149 }
150 
151 struct writequeue_entry *dlm_allocate_writequeue(void)
152 {
153         return kmem_cache_alloc(writequeue_cache, GFP_ATOMIC);
154 }
155 
156 void dlm_free_writequeue(struct writequeue_entry *writequeue)
157 {
158         kmem_cache_free(writequeue_cache, writequeue);
159 }
160 
161 struct dlm_msg *dlm_allocate_msg(void)
162 {
163         return kmem_cache_alloc(msg_cache, GFP_ATOMIC);
164 }
165 
166 void dlm_free_msg(struct dlm_msg *msg)
167 {
168         kmem_cache_free(msg_cache, msg);
169 }
170 
171 struct dlm_callback *dlm_allocate_cb(void)
172 {
173         return kmem_cache_alloc(cb_cache, GFP_ATOMIC);
174 }
175 
176 void dlm_free_cb(struct dlm_callback *cb)
177 {
178         kmem_cache_free(cb_cache, cb);
179 }
180 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php