]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - fs/btrfs/inode.c
fs: fix page_mkwrite error cases in core code and btrfs
[net-next-2.6.git] / fs / btrfs / inode.c
index ec5423790bbbec9a39bdc4528a069d3b54738456..17e608c4dc702466900a99c1ec49dc993da2592b 100644 (file)
@@ -4307,10 +4307,15 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
        u64 page_end;
 
        ret = btrfs_check_data_free_space(root, inode, PAGE_CACHE_SIZE);
-       if (ret)
+       if (ret) {
+               if (ret == -ENOMEM)
+                       ret = VM_FAULT_OOM;
+               else /* -ENOSPC, -EIO, etc */
+                       ret = VM_FAULT_SIGBUS;
                goto out;
+       }
 
-       ret = -EINVAL;
+       ret = VM_FAULT_NOPAGE; /* make the VM retry the fault */
 again:
        lock_page(page);
        size = i_size_read(inode);
@@ -4363,8 +4368,6 @@ again:
 out_unlock:
        unlock_page(page);
 out:
-       if (ret)
-               ret = VM_FAULT_SIGBUS;
        return ret;
 }