2019-05-22 09:51:42 +02:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2005-04-16 15:20:36 -07:00
/*
* malloc . h - NTFS kernel memory handling . Part of the Linux - NTFS project .
*
2005-09-19 09:41:39 +01:00
* Copyright ( c ) 2001 - 2005 Anton Altaparmakov
2005-04-16 15:20:36 -07: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 16:28:25 +01: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-16 15:20:36 -07: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 16:28:25 +01:00
* Depending on @ gfp_mask the allocation may be guaranteed to succeed .
2005-04-16 15:20:36 -07:00
*/
2005-10-11 14:54:42 +01:00
static inline void * __ntfs_malloc ( unsigned long size , gfp_t gfp_mask )
2005-04-16 15:20:36 -07:00
{
if ( likely ( size < = PAGE_SIZE ) ) {
BUG_ON ( ! size ) ;
/* kmalloc() has per-CPU caches so is faster for now. */
2005-09-12 15:43:03 +01:00
return kmalloc ( PAGE_SIZE , gfp_mask & ~ __GFP_HIGHMEM ) ;
2005-09-08 16:28:25 +01:00
/* return (void *)__get_free_page(gfp_mask); */
2005-04-16 15:20:36 -07:00
}
2018-12-28 00:34:29 -08:00
if ( likely ( ( size > > PAGE_SHIFT ) < totalram_pages ( ) ) )
2020-06-01 21:51:40 -07:00
return __vmalloc ( size , gfp_mask ) ;
2005-04-16 15:20:36 -07:00
return NULL ;
}
2005-09-08 16:28:25 +01: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-16 15:20:36 -07:00
static inline void ntfs_free ( void * addr )
{
2015-06-24 16:54:48 -07:00
kvfree ( addr ) ;
2005-04-16 15:20:36 -07:00
}
# endif /* _LINUX_NTFS_MALLOC_H */