Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.23-rc2 109 lines 3.0 kB view raw
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 25/* 26 * General memory allocation interfaces 27 */ 28 29#define KM_SLEEP 0x0001u 30#define KM_NOSLEEP 0x0002u 31#define KM_NOFS 0x0004u 32#define KM_MAYFAIL 0x0008u 33#define KM_LARGE 0x0010u 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|KM_LARGE)); 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_zalloc_greedy(size_t *, size_t, size_t, unsigned int __nocast); 60extern void *kmem_realloc(void *, size_t, size_t, unsigned int __nocast); 61extern void kmem_free(void *, size_t); 62 63/* 64 * Zone interfaces 65 */ 66 67#define KM_ZONE_HWALIGN SLAB_HWCACHE_ALIGN 68#define KM_ZONE_RECLAIM SLAB_RECLAIM_ACCOUNT 69#define KM_ZONE_SPREAD SLAB_MEM_SPREAD 70 71#define kmem_zone kmem_cache 72#define kmem_zone_t struct kmem_cache 73 74static inline kmem_zone_t * 75kmem_zone_init(int size, char *zone_name) 76{ 77 return kmem_cache_create(zone_name, size, 0, 0, NULL); 78} 79 80static inline kmem_zone_t * 81kmem_zone_init_flags(int size, char *zone_name, unsigned long flags, 82 void (*construct)(void *, kmem_zone_t *, unsigned long)) 83{ 84 return kmem_cache_create(zone_name, size, 0, flags, construct); 85} 86 87static inline void 88kmem_zone_free(kmem_zone_t *zone, void *ptr) 89{ 90 kmem_cache_free(zone, ptr); 91} 92 93static inline void 94kmem_zone_destroy(kmem_zone_t *zone) 95{ 96 if (zone) 97 kmem_cache_destroy(zone); 98} 99 100extern void *kmem_zone_alloc(kmem_zone_t *, unsigned int __nocast); 101extern void *kmem_zone_zalloc(kmem_zone_t *, unsigned int __nocast); 102 103static inline int 104kmem_shake_allow(gfp_t gfp_mask) 105{ 106 return (gfp_mask & __GFP_WAIT); 107} 108 109#endif /* __XFS_SUPPORT_KMEM_H__ */