diff options
-rw-r--r-- | fs/btrfs/inode.c | 11 | ||||
-rw-r--r-- | fs/buffer.c | 12 |
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 */ |
4314 | again: | 4319 | again: |
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: | |||
4363 | out_unlock: | 4368 | out_unlock: |
4364 | unlock_page(page); | 4369 | unlock_page(page); |
4365 | out: | 4370 | out: |
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 | ||
2343 | out_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 | ||
2350 | out_unlock: | ||
2347 | unlock_page(page); | 2351 | unlock_page(page); |
2348 | return ret; | 2352 | return ret; |
2349 | } | 2353 | } |