2019-05-22 10:51:42 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
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
*/
# 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
}
2018-12-28 11:34:29 +03:00
if ( likely ( ( size > > PAGE_SHIFT ) < totalram_pages ( ) ) )
2020-06-02 07:51:40 +03:00
return __vmalloc ( size , gfp_mask ) ;
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 */