diff options
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/inode.c | 11 |
1 files changed, 7 insertions, 4 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 | ||