root/fs/ntfs/malloc.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. __ntfs_malloc
  2. ntfs_malloc_nofs
  3. ntfs_malloc_nofs_nofail
  4. ntfs_free

   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /*
   3  * malloc.h - NTFS kernel memory handling. Part of the Linux-NTFS project.
   4  *
   5  * Copyright (c) 2001-2005 Anton Altaparmakov
   6  */
   7 
   8 #ifndef _LINUX_NTFS_MALLOC_H
   9 #define _LINUX_NTFS_MALLOC_H
  10 
  11 #include <linux/vmalloc.h>
  12 #include <linux/slab.h>
  13 #include <linux/highmem.h>
  14 
  15 /**
  16  * __ntfs_malloc - allocate memory in multiples of pages
  17  * @size:       number of bytes to allocate
  18  * @gfp_mask:   extra flags for the allocator
  19  *
  20  * Internal function.  You probably want ntfs_malloc_nofs()...
  21  *
  22  * Allocates @size bytes of memory, rounded up to multiples of PAGE_SIZE and
  23  * returns a pointer to the allocated memory.
  24  *
  25  * If there was insufficient memory to complete the request, return NULL.
  26  * Depending on @gfp_mask the allocation may be guaranteed to succeed.
  27  */
  28 static inline void *__ntfs_malloc(unsigned long size, gfp_t gfp_mask)
  29 {
  30         if (likely(size <= PAGE_SIZE)) {
  31                 BUG_ON(!size);
  32                 /* kmalloc() has per-CPU caches so is faster for now. */
  33                 return kmalloc(PAGE_SIZE, gfp_mask & ~__GFP_HIGHMEM);
  34                 /* return (void *)__get_free_page(gfp_mask); */
  35         }
  36         if (likely((size >> PAGE_SHIFT) < totalram_pages()))
  37                 return __vmalloc(size, gfp_mask, PAGE_KERNEL);
  38         return NULL;
  39 }
  40 
  41 /**
  42  * ntfs_malloc_nofs - allocate memory in multiples of pages
  43  * @size:       number of bytes to allocate
  44  *
  45  * Allocates @size bytes of memory, rounded up to multiples of PAGE_SIZE and
  46  * returns a pointer to the allocated memory.
  47  *
  48  * If there was insufficient memory to complete the request, return NULL.
  49  */
  50 static inline void *ntfs_malloc_nofs(unsigned long size)
  51 {
  52         return __ntfs_malloc(size, GFP_NOFS | __GFP_HIGHMEM);
  53 }
  54 
  55 /**
  56  * ntfs_malloc_nofs_nofail - allocate memory in multiples of pages
  57  * @size:       number of bytes to allocate
  58  *
  59  * Allocates @size bytes of memory, rounded up to multiples of PAGE_SIZE and
  60  * returns a pointer to the allocated memory.
  61  *
  62  * This function guarantees that the allocation will succeed.  It will sleep
  63  * for as long as it takes to complete the allocation.
  64  *
  65  * If there was insufficient memory to complete the request, return NULL.
  66  */
  67 static inline void *ntfs_malloc_nofs_nofail(unsigned long size)
  68 {
  69         return __ntfs_malloc(size, GFP_NOFS | __GFP_HIGHMEM | __GFP_NOFAIL);
  70 }
  71 
  72 static inline void ntfs_free(void *addr)
  73 {
  74         kvfree(addr);
  75 }
  76 
  77 #endif /* _LINUX_NTFS_MALLOC_H */

/* [<][>][^][v][top][bottom][index][help] */