aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/inode.c11
-rw-r--r--fs/buffer.c12
2 files changed, 15 insertions, 8 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index ec5423790bbb..17e608c4dc70 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -4307,10 +4307,15 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
4307 u64 page_end; 4307 u64 page_end;
4308 4308
4309 ret = btrfs_check_data_free_space(root, inode, PAGE_CACHE_SIZE); 4309 ret = btrfs_check_data_free_space(root, inode, PAGE_CACHE_SIZE);
4310 if (ret) 4310 if (ret) {
4311 if (ret == -ENOMEM)
4312 ret = VM_FAULT_OOM;
4313 else /* -ENOSPC, -EIO, etc */
4314 ret = VM_FAULT_SIGBUS;
4311 goto out; 4315 goto out;
4316 }
4312 4317
4313 ret = -EINVAL; 4318 ret = VM_FAULT_NOPAGE; /* make the VM retry the fault */
4314again: 4319again:
4315 lock_page(page); 4320 lock_page(page);
4316 size = i_size_read(inode); 4321 size = i_size_read(inode);
@@ -4363,8 +4368,6 @@ again:
4363out_unlock: 4368out_unlock:
4364 unlock_page(page); 4369 unlock_page(page);
4365out: 4370out:
4366 if (ret)
4367 ret = VM_FAULT_SIGBUS;
4368 return ret; 4371 return ret;
4369} 4372}
4370 4373
diff --git a/fs/buffer.c b/fs/buffer.c
index 6d51a3da362c..0c14f8d52ee5 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -2320,7 +2320,7 @@ block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf,
2320 struct inode *inode = vma->vm_file->f_path.dentry->d_inode; 2320 struct inode *inode = vma->vm_file->f_path.dentry->d_inode;
2321 unsigned long end; 2321 unsigned long end;
2322 loff_t size; 2322 loff_t size;
2323 int ret = -EINVAL; 2323 int ret = VM_FAULT_NOPAGE; /* make the VM retry the fault */
2324 2324
2325 lock_page(page); 2325 lock_page(page);
2326 size = i_size_read(inode); 2326 size = i_size_read(inode);
@@ -2340,10 +2340,14 @@ block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf,
2340 if (!ret) 2340 if (!ret)
2341 ret = block_commit_write(page, 0, end); 2341 ret = block_commit_write(page, 0, end);
2342 2342
2343out_unlock: 2343 if (unlikely(ret)) {
2344 if (ret) 2344 if (ret == -ENOMEM)
2345 ret = VM_FAULT_SIGBUS; 2345 ret = VM_FAULT_OOM;
2346 else /* -ENOSPC, -EIO, etc */
2347 ret = VM_FAULT_SIGBUS;
2348 }
2346 2349
2350out_unlock:
2347 unlock_page(page); 2351 unlock_page(page);
2348 return ret; 2352 return ret;
2349} 2353}