aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/kmem.h
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2011-08-12 17:21:35 -0400
committerAlex Elder <aelder@sgi.com>2011-08-12 17:21:35 -0400
commitc59d87c460767bc35dafd490139d3cfe78fb8da4 (patch)
tree2aad8261f86488e501d9645bd35d1398906da46d /fs/xfs/kmem.h
parent06f8e2d6754dc631732415b741b5aa58a0f7133f (diff)
xfs: remove subdirectories
Use the move from Linux 2.6 to Linux 3.x as an excuse to kill the annoying subdirectories in the XFS source code. Besides the large amount of file rename the only changes are to the Makefile, a few files including headers with the subdirectory prefix, and the binary sysctl compat code that includes a header under fs/xfs/ from kernel/. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Alex Elder <aelder@sgi.com>
Diffstat (limited to 'fs/xfs/kmem.h')
-rw-r--r--fs/xfs/kmem.h124
1 files changed, 124 insertions, 0 deletions
diff --git a/fs/xfs/kmem.h b/fs/xfs/kmem.h
new file mode 100644
index 000000000000..f7c8f7a9ea6d
--- /dev/null
+++ b/fs/xfs/kmem.h
@@ -0,0 +1,124 @@
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#define KM_SLEEP 0x0001u
31#define KM_NOSLEEP 0x0002u
32#define KM_NOFS 0x0004u
33#define KM_MAYFAIL 0x0008u
34
35/*
36 * We use a special process flag to avoid recursive callbacks into
37 * the filesystem during transactions. We will also issue our own
38 * warnings, so we explicitly skip any generic ones (silly of us).
39 */
40static inline gfp_t
41kmem_flags_convert(unsigned int __nocast flags)
42{
43 gfp_t lflags;
44
45 BUG_ON(flags & ~(KM_SLEEP|KM_NOSLEEP|KM_NOFS|KM_MAYFAIL));
46
47 if (flags & KM_NOSLEEP) {
48 lflags = GFP_ATOMIC | __GFP_NOWARN;
49 } else {
50 lflags = GFP_KERNEL | __GFP_NOWARN;
51 if ((current->flags & PF_FSTRANS) || (flags & KM_NOFS))
52 lflags &= ~__GFP_FS;
53 }
54 return lflags;
55}
56
57extern void *kmem_alloc(size_t, unsigned int __nocast);
58extern void *kmem_zalloc(size_t, unsigned int __nocast);
59extern void *kmem_realloc(const void *, size_t, size_t, unsigned int __nocast);
60extern void kmem_free(const void *);
61
62static inline void *kmem_zalloc_large(size_t size)
63{
64 void *ptr;
65
66 ptr = vmalloc(size);
67 if (ptr)
68 memset(ptr, 0, size);
69 return ptr;
70}
71static inline void kmem_free_large(void *ptr)
72{
73 vfree(ptr);
74}
75
76extern void *kmem_zalloc_greedy(size_t *, size_t, size_t);
77
78/*
79 * Zone interfaces
80 */
81
82#define KM_ZONE_HWALIGN SLAB_HWCACHE_ALIGN
83#define KM_ZONE_RECLAIM SLAB_RECLAIM_ACCOUNT
84#define KM_ZONE_SPREAD SLAB_MEM_SPREAD
85
86#define kmem_zone kmem_cache
87#define kmem_zone_t struct kmem_cache
88
89static inline kmem_zone_t *
90kmem_zone_init(int size, char *zone_name)
91{
92 return kmem_cache_create(zone_name, size, 0, 0, NULL);
93}
94
95static inline kmem_zone_t *
96kmem_zone_init_flags(int size, char *zone_name, unsigned long flags,
97 void (*construct)(void *))
98{
99 return kmem_cache_create(zone_name, size, 0, flags, construct);
100}
101
102static inline void
103kmem_zone_free(kmem_zone_t *zone, void *ptr)
104{
105 kmem_cache_free(zone, ptr);
106}
107
108static inline void
109kmem_zone_destroy(kmem_zone_t *zone)
110{
111 if (zone)
112 kmem_cache_destroy(zone);
113}
114
115extern void *kmem_zone_alloc(kmem_zone_t *, unsigned int __nocast);
116extern void *kmem_zone_zalloc(kmem_zone_t *, unsigned int __nocast);
117
118static inline int
119kmem_shake_allow(gfp_t gfp_mask)
120{
121 return ((gfp_mask & __GFP_WAIT) && (gfp_mask & __GFP_FS));
122}
123
124#endif /* __XFS_SUPPORT_KMEM_H__ */