Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 7755
b: refs/heads/master
c: 06d0e3c
h: refs/heads/master
i:
  7753: 5fca37b
  7751: f942bd4
v: v3
  • Loading branch information
Anton Altaparmakov committed Sep 8, 2005
1 parent 310483a commit ac5c945
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e7a1033b946f4f2622f2b338ab107f559aad542c
refs/heads/master: 06d0e3cf3d527f927681773c6ffbe697ccc5db7f
6 changes: 6 additions & 0 deletions trunk/fs/ntfs/ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ ToDo/Notes:
journals with two different restart pages. We sanity check both and
either use the only sane one or the more recent one of the two in the
case that both are valid.
- Modify fs/ntfs/malloc.h::ntfs_malloc_nofs() to do the kmalloc() based
allocations with __GFP_HIGHMEM, analogous to how the vmalloc() based
allocations are done.
- Add fs/ntfs/malloc.h::ntfs_malloc_nofs_nofail() which is analogous to
ntfs_malloc_nofs() but it performs allocations with __GFP_NOFAIL and
hence cannot fail.

2.1.23 - Implement extension of resident files and make writing safe as well as
many bug fixes, cleanups, and enhancements...
Expand Down
48 changes: 42 additions & 6 deletions trunk/fs/ntfs/malloc.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,27 +27,63 @@
#include <linux/highmem.h>

/**
* ntfs_malloc_nofs - allocate memory in multiples of pages
* @size number of bytes to allocate
* __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_nofs(unsigned long size)
static inline void *__ntfs_malloc(unsigned long size,
unsigned int __nocast 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_NOFS);
/* return (void *)__get_free_page(GFP_NOFS | __GFP_HIGHMEM); */
return kmalloc(PAGE_SIZE, gfp_mask);
/* return (void *)__get_free_page(gfp_mask); */
}
if (likely(size >> PAGE_SHIFT < num_physpages))
return __vmalloc(size, GFP_NOFS | __GFP_HIGHMEM, PAGE_KERNEL);
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)
{
if (likely(((unsigned long)addr < VMALLOC_START) ||
Expand Down

0 comments on commit ac5c945

Please sign in to comment.