diff options
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r-- | fs/btrfs/inode.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index fb8d671d00e6..f4d901786b3c 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -6620,6 +6620,7 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
6620 | u64 page_start; | 6620 | u64 page_start; |
6621 | u64 page_end; | 6621 | u64 page_end; |
6622 | 6622 | ||
6623 | sb_start_pagefault(inode->i_sb); | ||
6623 | ret = btrfs_delalloc_reserve_space(inode, PAGE_CACHE_SIZE); | 6624 | ret = btrfs_delalloc_reserve_space(inode, PAGE_CACHE_SIZE); |
6624 | if (!ret) { | 6625 | if (!ret) { |
6625 | ret = file_update_time(vma->vm_file); | 6626 | ret = file_update_time(vma->vm_file); |
@@ -6709,12 +6710,15 @@ again: | |||
6709 | unlock_extent_cached(io_tree, page_start, page_end, &cached_state, GFP_NOFS); | 6710 | unlock_extent_cached(io_tree, page_start, page_end, &cached_state, GFP_NOFS); |
6710 | 6711 | ||
6711 | out_unlock: | 6712 | out_unlock: |
6712 | if (!ret) | 6713 | if (!ret) { |
6714 | sb_end_pagefault(inode->i_sb); | ||
6713 | return VM_FAULT_LOCKED; | 6715 | return VM_FAULT_LOCKED; |
6716 | } | ||
6714 | unlock_page(page); | 6717 | unlock_page(page); |
6715 | out: | 6718 | out: |
6716 | btrfs_delalloc_release_space(inode, PAGE_CACHE_SIZE); | 6719 | btrfs_delalloc_release_space(inode, PAGE_CACHE_SIZE); |
6717 | out_noreserve: | 6720 | out_noreserve: |
6721 | sb_end_pagefault(inode->i_sb); | ||
6718 | return ret; | 6722 | return ret; |
6719 | } | 6723 | } |
6720 | 6724 | ||