forked from Minki/linux
a1d312de77
Based on 1 normalized pattern(s): 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 extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 43 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Richard Fontana <rfontana@redhat.com> Reviewed-by: Allison Randal <allison@lohutok.net> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190520075212.517001706@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
78 lines
2.3 KiB
C
78 lines
2.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* malloc.h - NTFS kernel memory handling. Part of the Linux-NTFS project.
|
|
*
|
|
* Copyright (c) 2001-2005 Anton Altaparmakov
|
|
*/
|
|
|
|
#ifndef _LINUX_NTFS_MALLOC_H
|
|
#define _LINUX_NTFS_MALLOC_H
|
|
|
|
#include <linux/vmalloc.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/highmem.h>
|
|
|
|
/**
|
|
* __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()...
|
|
*
|
|
* 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.
|
|
* Depending on @gfp_mask the allocation may be guaranteed to succeed.
|
|
*/
|
|
static inline void *__ntfs_malloc(unsigned long size, gfp_t gfp_mask)
|
|
{
|
|
if (likely(size <= PAGE_SIZE)) {
|
|
BUG_ON(!size);
|
|
/* kmalloc() has per-CPU caches so is faster for now. */
|
|
return kmalloc(PAGE_SIZE, gfp_mask & ~__GFP_HIGHMEM);
|
|
/* return (void *)__get_free_page(gfp_mask); */
|
|
}
|
|
if (likely((size >> PAGE_SHIFT) < totalram_pages()))
|
|
return __vmalloc(size, gfp_mask, PAGE_KERNEL);
|
|
return NULL;
|
|
}
|
|
|
|
/**
|
|
* 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);
|
|
}
|
|
|
|
static inline void ntfs_free(void *addr)
|
|
{
|
|
kvfree(addr);
|
|
}
|
|
|
|
#endif /* _LINUX_NTFS_MALLOC_H */
|