1 /* 2 * malloc.h - NTFS kernel memory handling. Part of the Linux-NTFS project. 3 * 4 * Copyright (c) 2001-2004 Anton Altaparmakov 5 * 6 * This program/include file is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License as published 8 * by the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program/include file is distributed in the hope that it will be 12 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 13 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program (in the main directory of the Linux-NTFS 18 * distribution in the file COPYING); if not, write to the Free Software 19 * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 */ 21 22 #ifndef _LINUX_NTFS_MALLOC_H 23 #define _LINUX_NTFS_MALLOC_H 24 25 #include <linux/vmalloc.h> 26 #include <linux/slab.h> 27 #include <linux/highmem.h> 28 29 /** 30 * ntfs_malloc_nofs - allocate memory in multiples of pages 31 * @size number of bytes to allocate 32 * 33 * Allocates @size bytes of memory, rounded up to multiples of PAGE_SIZE and 34 * returns a pointer to the allocated memory. 35 * 36 * If there was insufficient memory to complete the request, return NULL. 37 */ 38 static inline void *ntfs_malloc_nofs(unsigned long size) 39 { 40 if (likely(size <= PAGE_SIZE)) { 41 BUG_ON(!size); 42 /* kmalloc() has per-CPU caches so is faster for now. */ 43 return kmalloc(PAGE_SIZE, GFP_NOFS); 44 /* return (void *)__get_free_page(GFP_NOFS | __GFP_HIGHMEM); */ 45 } 46 if (likely(size >> PAGE_SHIFT < num_physpages)) 47 return __vmalloc(size, GFP_NOFS | __GFP_HIGHMEM, PAGE_KERNEL); 48 return NULL; 49 } 50 51 static inline void ntfs_free(void *addr) 52 { 53 if (likely(((unsigned long)addr < VMALLOC_START) || 54 ((unsigned long)addr >= VMALLOC_END ))) { 55 kfree(addr); 56 /* free_page((unsigned long)addr); */ 57 return; 58 } 59 vfree(addr); 60 } 61 62 #endif /* _LINUX_NTFS_MALLOC_H */ 63