| 1 |
|
| 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 |
|
| 33 | return kmalloc(PAGE_SIZE, gfp_mask & ~__GFP_HIGHMEM);
|
| 34 |
|
| 35 | }
|
| 36 | if (likely((size >> PAGE_SHIFT) < totalram_pages()))
|
| 37 | return __vmalloc(size, gfp_mask);
|
| 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
|