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
xfs
kmem.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2000-2005 Silicon Graphics, Inc.
3
* All Rights Reserved.
4
*
5
* This program is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU General Public License as
7
* published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope that it would be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write the Free Software Foundation,
16
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
#ifndef __XFS_SUPPORT_KMEM_H__
19
#define __XFS_SUPPORT_KMEM_H__
20
21
#include <linux/slab.h>
22
#include <linux/sched.h>
23
#include <
linux/mm.h
>
24
#include <
linux/vmalloc.h
>
25
26
/*
27
* General memory allocation interfaces
28
*/
29
30
typedef
unsigned
__bitwise
xfs_km_flags_t
;
31
#define KM_SLEEP ((__force xfs_km_flags_t)0x0001u)
32
#define KM_NOSLEEP ((__force xfs_km_flags_t)0x0002u)
33
#define KM_NOFS ((__force xfs_km_flags_t)0x0004u)
34
#define KM_MAYFAIL ((__force xfs_km_flags_t)0x0008u)
35
36
/*
37
* We use a special process flag to avoid recursive callbacks into
38
* the filesystem during transactions. We will also issue our own
39
* warnings, so we explicitly skip any generic ones (silly of us).
40
*/
41
static
inline
gfp_t
42
kmem_flags_convert(
xfs_km_flags_t
flags
)
43
{
44
gfp_t
lflags;
45
46
BUG_ON
(flags & ~(
KM_SLEEP
|
KM_NOSLEEP
|
KM_NOFS
|
KM_MAYFAIL
));
47
48
if
(flags &
KM_NOSLEEP
) {
49
lflags =
GFP_ATOMIC
|
__GFP_NOWARN
;
50
}
else
{
51
lflags =
GFP_KERNEL
|
__GFP_NOWARN
;
52
if
((
current
->flags &
PF_FSTRANS
) || (flags &
KM_NOFS
))
53
lflags &= ~
__GFP_FS
;
54
}
55
return
lflags;
56
}
57
58
extern
void
*
kmem_alloc
(
size_t
,
xfs_km_flags_t
);
59
extern
void
*
kmem_zalloc
(
size_t
,
xfs_km_flags_t
);
60
extern
void
*
kmem_realloc
(
const
void
*,
size_t
,
size_t
,
xfs_km_flags_t
);
61
extern
void
kmem_free
(
const
void
*);
62
63
static
inline
void
*kmem_zalloc_large(
size_t
size
)
64
{
65
return
vzalloc
(size);
66
}
67
static
inline
void
kmem_free_large(
void
*
ptr
)
68
{
69
vfree
(ptr);
70
}
71
72
extern
void
*
kmem_zalloc_greedy
(
size_t
*,
size_t
,
size_t
);
73
74
/*
75
* Zone interfaces
76
*/
77
78
#define KM_ZONE_HWALIGN SLAB_HWCACHE_ALIGN
79
#define KM_ZONE_RECLAIM SLAB_RECLAIM_ACCOUNT
80
#define KM_ZONE_SPREAD SLAB_MEM_SPREAD
81
82
#define kmem_zone kmem_cache
83
#define kmem_zone_t struct kmem_cache
84
85
static
inline
kmem_zone_t
*
86
kmem_zone_init(
int
size
,
char
*zone_name)
87
{
88
return
kmem_cache_create
(zone_name, size, 0, 0,
NULL
);
89
}
90
91
static
inline
kmem_zone_t
*
92
kmem_zone_init_flags(
int
size
,
char
*zone_name,
unsigned
long
flags
,
93
void
(*construct)(
void
*))
94
{
95
return
kmem_cache_create
(zone_name, size, 0, flags, construct);
96
}
97
98
static
inline
void
99
kmem_zone_free(
kmem_zone_t
*
zone
,
void
*
ptr
)
100
{
101
kmem_cache_free
(zone, ptr);
102
}
103
104
static
inline
void
105
kmem_zone_destroy(
kmem_zone_t
*
zone
)
106
{
107
if
(zone)
108
kmem_cache_destroy
(zone);
109
}
110
111
extern
void
*
kmem_zone_alloc
(
kmem_zone_t
*,
xfs_km_flags_t
);
112
extern
void
*
kmem_zone_zalloc
(
kmem_zone_t
*,
xfs_km_flags_t
);
113
114
#endif
/* __XFS_SUPPORT_KMEM_H__ */
Generated on Thu Jan 10 2013 14:50:12 for Linux Kernel by
1.8.2