2005-04-17 02:20:36 +04:00
/*
* malloc . h - NTFS kernel memory handling . Part of the Linux - NTFS project .
*
2005-09-19 12:41:39 +04:00
* Copyright ( c ) 2001 - 2005 Anton Altaparmakov
2005-04-17 02:20:36 +04:00
*
* This program / include file is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License as published
* by the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program / include file is distributed in the hope that it will be
* useful , but WITHOUT ANY WARRANTY ; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ( in the main directory of the Linux - NTFS
* distribution in the file COPYING ) ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
# ifndef _LINUX_NTFS_MALLOC_H
# define _LINUX_NTFS_MALLOC_H
# include <linux/vmalloc.h>
# include <linux/slab.h>
# include <linux/highmem.h>
/**
2005-09-08 19:28:25 +04:00
* __ntfs_malloc - allocate memory in multiples of pages
* @ size : number of bytes to allocate
* @ gfp_mask : extra flags for the allocator
*
* Internal function . You probably want ntfs_malloc_nofs ( ) . . .
2005-04-17 02:20:36 +04:00
*
* Allocates @ size bytes of memory , rounded up to multiples of PAGE_SIZE and
* returns a pointer to the allocated memory .
*
* If there was insufficient memory to complete the request , return NULL .
2005-09-08 19:28:25 +04:00
* Depending on @ gfp_mask the allocation may be guaranteed to succeed .
2005-04-17 02:20:36 +04:00
*/
2005-10-11 17:54:42 +04:00
static inline void * __ntfs_malloc ( unsigned long size , gfp_t gfp_mask )
2005-04-17 02:20:36 +04:00
{
if ( likely ( size < = PAGE_SIZE ) ) {
BUG_ON ( ! size ) ;
/* kmalloc() has per-CPU caches so is faster for now. */
2005-09-12 18:43:03 +04:00
return kmalloc ( PAGE_SIZE , gfp_mask & ~ __GFP_HIGHMEM ) ;
2005-09-08 19:28:25 +04:00
/* return (void *)__get_free_page(gfp_mask); */
2005-04-17 02:20:36 +04:00
}
2009-09-22 04:03:05 +04:00
if ( likely ( ( size > > PAGE_SHIFT ) < totalram_pages ) )
2005-09-08 19:28:25 +04:00
return __vmalloc ( size , gfp_mask , PAGE_KERNEL ) ;
2005-04-17 02:20:36 +04:00
return NULL ;
}
2005-09-08 19:28:25 +04:00
/**
* ntfs_malloc_nofs - allocate memory in multiples of pages
* @ size : number of bytes to allocate
*
* Allocates @ size bytes of memory , rounded up to multiples of PAGE_SIZE and
* returns a pointer to the allocated memory .
*
* If there was insufficient memory to complete the request , return NULL .
*/
static inline void * ntfs_malloc_nofs ( unsigned long size )
{
return __ntfs_malloc ( size , GFP_NOFS | __GFP_HIGHMEM ) ;
}
/**
* ntfs_malloc_nofs_nofail - allocate memory in multiples of pages
* @ size : number of bytes to allocate
*
* Allocates @ size bytes of memory , rounded up to multiples of PAGE_SIZE and
* returns a pointer to the allocated memory .
*
* This function guarantees that the allocation will succeed . It will sleep
* for as long as it takes to complete the allocation .
*
* If there was insufficient memory to complete the request , return NULL .
*/
static inline void * ntfs_malloc_nofs_nofail ( unsigned long size )
{
return __ntfs_malloc ( size , GFP_NOFS | __GFP_HIGHMEM | __GFP_NOFAIL ) ;
}
2005-04-17 02:20:36 +04:00
static inline void ntfs_free ( void * addr )
{
2015-06-25 02:54:48 +03:00
kvfree ( addr ) ;
2005-04-17 02:20:36 +04:00
}
# endif /* _LINUX_NTFS_MALLOC_H */