Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
dlm
memory.c
Go to the documentation of this file.
1
/******************************************************************************
2
*******************************************************************************
3
**
4
** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
5
** Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
6
**
7
** This copyrighted material is made available to anyone wishing to use,
8
** modify, copy, or redistribute it subject to the terms and conditions
9
** of the GNU General Public License v.2.
10
**
11
*******************************************************************************
12
******************************************************************************/
13
14
#include "
dlm_internal.h
"
15
#include "
config.h
"
16
#include "
memory.h
"
17
18
static
struct
kmem_cache
*lkb_cache;
19
static
struct
kmem_cache
*rsb_cache;
20
21
22
int
__init
dlm_memory_init
(
void
)
23
{
24
lkb_cache =
kmem_cache_create
(
"dlm_lkb"
,
sizeof
(
struct
dlm_lkb
),
25
__alignof__(
struct
dlm_lkb
), 0,
NULL
);
26
if
(!lkb_cache)
27
return
-
ENOMEM
;
28
29
rsb_cache =
kmem_cache_create
(
"dlm_rsb"
,
sizeof
(
struct
dlm_rsb
),
30
__alignof__(
struct
dlm_rsb
), 0,
NULL
);
31
if
(!rsb_cache) {
32
kmem_cache_destroy
(lkb_cache);
33
return
-
ENOMEM
;
34
}
35
36
return
0;
37
}
38
39
void
dlm_memory_exit
(
void
)
40
{
41
if
(lkb_cache)
42
kmem_cache_destroy
(lkb_cache);
43
if
(rsb_cache)
44
kmem_cache_destroy
(rsb_cache);
45
}
46
47
char
*
dlm_allocate_lvb
(
struct
dlm_ls
*ls)
48
{
49
char
*
p
;
50
51
p = kzalloc(ls->
ls_lvblen
,
GFP_NOFS
);
52
return
p
;
53
}
54
55
void
dlm_free_lvb
(
char
*
p
)
56
{
57
kfree
(p);
58
}
59
60
struct
dlm_rsb
*
dlm_allocate_rsb
(
struct
dlm_ls
*ls)
61
{
62
struct
dlm_rsb
*
r
;
63
64
r = kmem_cache_zalloc(rsb_cache,
GFP_NOFS
);
65
return
r
;
66
}
67
68
void
dlm_free_rsb
(
struct
dlm_rsb
*
r
)
69
{
70
if
(r->
res_lvbptr
)
71
dlm_free_lvb
(r->
res_lvbptr
);
72
kmem_cache_free
(rsb_cache, r);
73
}
74
75
struct
dlm_lkb
*
dlm_allocate_lkb
(
struct
dlm_ls
*ls)
76
{
77
struct
dlm_lkb
*lkb;
78
79
lkb = kmem_cache_zalloc(lkb_cache,
GFP_NOFS
);
80
return
lkb;
81
}
82
83
void
dlm_free_lkb
(
struct
dlm_lkb
*lkb)
84
{
85
if
(lkb->
lkb_flags
&
DLM_IFL_USER
) {
86
struct
dlm_user_args
*
ua
;
87
ua = lkb->
lkb_ua
;
88
if
(ua) {
89
if
(ua->
lksb
.sb_lvbptr)
90
kfree
(ua->
lksb
.sb_lvbptr);
91
kfree
(ua);
92
}
93
}
94
kmem_cache_free
(lkb_cache, lkb);
95
}
96
Generated on Thu Jan 10 2013 13:05:53 for Linux Kernel by
1.8.2