aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r--fs/btrfs/inode.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 1cff528d5b51..06d8db5afb08 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -4365,8 +4365,9 @@ static void btrfs_invalidatepage(struct page *page, unsigned long offset)
4365 * beyond EOF, then the page is guaranteed safe against truncation until we 4365 * beyond EOF, then the page is guaranteed safe against truncation until we
4366 * unlock the page. 4366 * unlock the page.
4367 */ 4367 */
4368int btrfs_page_mkwrite(struct vm_area_struct *vma, struct page *page) 4368int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
4369{ 4369{
4370 struct page *page = vmf->page;
4370 struct inode *inode = fdentry(vma->vm_file)->d_inode; 4371 struct inode *inode = fdentry(vma->vm_file)->d_inode;
4371 struct btrfs_root *root = BTRFS_I(inode)->root; 4372 struct btrfs_root *root = BTRFS_I(inode)->root;
4372 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; 4373 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
@@ -4379,10 +4380,15 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct page *page)
4379 u64 page_end; 4380 u64 page_end;
4380 4381
4381 ret = btrfs_check_data_free_space(root, inode, PAGE_CACHE_SIZE); 4382 ret = btrfs_check_data_free_space(root, inode, PAGE_CACHE_SIZE);
4382 if (ret) 4383 if (ret) {
4384 if (ret == -ENOMEM)
4385 ret = VM_FAULT_OOM;
4386 else /* -ENOSPC, -EIO, etc */
4387 ret = VM_FAULT_SIGBUS;
4383 goto out; 4388 goto out;
4389 }
4384 4390
4385 ret = -EINVAL; 4391 ret = VM_FAULT_NOPAGE; /* make the VM retry the fault */
4386again: 4392again:
4387 lock_page(page); 4393 lock_page(page);
4388 size = i_size_read(inode); 4394 size = i_size_read(inode);