GFS2: Change truncate page allocation to be GFP_NOFS
Bob Peterson [Mon, 19 Mar 2012 19:25:50 +0000 (15:25 -0400)]
This patch changes the page allocation in gfs2_block_truncate_page
and two others to GFP_NOFS to avoid deadlock in low-memory conditions.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>

fs/gfs2/bmap.c
fs/gfs2/quota.c

index 14a7040..197c5c4 100644 (file)
@@ -60,7 +60,7 @@ static int gfs2_unstuffer_page(struct gfs2_inode *ip, struct buffer_head *dibh,
        int release = 0;
 
        if (!page || page->index) {
-               page = grab_cache_page(inode->i_mapping, 0);
+               page = find_or_create_page(inode->i_mapping, 0, GFP_NOFS);
                if (!page)
                        return -ENOMEM;
                release = 1;
@@ -930,7 +930,7 @@ static int gfs2_block_truncate_page(struct address_space *mapping, loff_t from)
        struct page *page;
        int err;
 
-       page = grab_cache_page(mapping, index);
+       page = find_or_create_page(mapping, index, GFP_NOFS);
        if (!page)
                return 0;
 
index a45b21b..4856c66 100644 (file)
@@ -681,7 +681,7 @@ static int gfs2_adjust_quota(struct gfs2_inode *ip, loff_t loc,
        ptr = qp;
        nbytes = sizeof(struct gfs2_quota);
 get_a_page:
-       page = grab_cache_page(mapping, index);
+       page = find_or_create_page(mapping, index, GFP_NOFS);
        if (!page)
                return -ENOMEM;