diff options
author | Josef Bacik <josef@redhat.com> | 2011-09-21 15:05:58 -0400 |
---|---|---|
committer | Josef Bacik <josef@redhat.com> | 2011-10-19 15:12:45 -0400 |
commit | 3b16a4e3c355ee3c790473decfcf83d4faeb8ce0 (patch) | |
tree | 5c3dad941468cf6952623cc18d6b1e682ee3f264 /fs/btrfs/file.c | |
parent | 455757c322cc0a0f2a692c5625dd88aaf6a7b889 (diff) |
Btrfs: use the inode's mapping mask for allocating pages
Johannes pointed out we were allocating only kernel pages for doing writes,
which is kind of a big deal if you are on 32bit and have more than a gig of ram.
So fix our allocations to use the mapping's gfp but still clear __GFP_FS so we
don't re-enter. Thanks,
Reported-by: Johannes Weiner <jweiner@redhat.com>
Signed-off-by: Josef Bacik <josef@redhat.com>
Diffstat (limited to 'fs/btrfs/file.c')
-rw-r--r-- | fs/btrfs/file.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index de569af766fe..f2e928289600 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c | |||
@@ -1069,6 +1069,7 @@ static noinline int prepare_pages(struct btrfs_root *root, struct file *file, | |||
1069 | int i; | 1069 | int i; |
1070 | unsigned long index = pos >> PAGE_CACHE_SHIFT; | 1070 | unsigned long index = pos >> PAGE_CACHE_SHIFT; |
1071 | struct inode *inode = fdentry(file)->d_inode; | 1071 | struct inode *inode = fdentry(file)->d_inode; |
1072 | gfp_t mask = btrfs_alloc_write_mask(inode->i_mapping); | ||
1072 | int err = 0; | 1073 | int err = 0; |
1073 | int faili = 0; | 1074 | int faili = 0; |
1074 | u64 start_pos; | 1075 | u64 start_pos; |
@@ -1080,7 +1081,7 @@ static noinline int prepare_pages(struct btrfs_root *root, struct file *file, | |||
1080 | again: | 1081 | again: |
1081 | for (i = 0; i < num_pages; i++) { | 1082 | for (i = 0; i < num_pages; i++) { |
1082 | pages[i] = find_or_create_page(inode->i_mapping, index + i, | 1083 | pages[i] = find_or_create_page(inode->i_mapping, index + i, |
1083 | GFP_NOFS); | 1084 | mask); |
1084 | if (!pages[i]) { | 1085 | if (!pages[i]) { |
1085 | faili = i - 1; | 1086 | faili = i - 1; |
1086 | err = -ENOMEM; | 1087 | err = -ENOMEM; |