aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/file.c')
-rw-r--r--fs/btrfs/file.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 23d1d811e2b2..41ca5fdaee6c 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -1082,7 +1082,8 @@ static noinline int prepare_pages(struct btrfs_root *root, struct file *file,
1082 1082
1083again: 1083again:
1084 for (i = 0; i < num_pages; i++) { 1084 for (i = 0; i < num_pages; i++) {
1085 pages[i] = grab_cache_page(inode->i_mapping, index + i); 1085 pages[i] = find_or_create_page(inode->i_mapping, index + i,
1086 GFP_NOFS);
1086 if (!pages[i]) { 1087 if (!pages[i]) {
1087 faili = i - 1; 1088 faili = i - 1;
1088 err = -ENOMEM; 1089 err = -ENOMEM;
@@ -1239,9 +1240,11 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
1239 * managed to copy. 1240 * managed to copy.
1240 */ 1241 */
1241 if (num_pages > dirty_pages) { 1242 if (num_pages > dirty_pages) {
1242 if (copied > 0) 1243 if (copied > 0) {
1243 atomic_inc( 1244 spin_lock(&BTRFS_I(inode)->lock);
1244 &BTRFS_I(inode)->outstanding_extents); 1245 BTRFS_I(inode)->outstanding_extents++;
1246 spin_unlock(&BTRFS_I(inode)->lock);
1247 }
1245 btrfs_delalloc_release_space(inode, 1248 btrfs_delalloc_release_space(inode,
1246 (num_pages - dirty_pages) << 1249 (num_pages - dirty_pages) <<
1247 PAGE_CACHE_SHIFT); 1250 PAGE_CACHE_SHIFT);