From 10d8ac54204b6c6323217be9f20003fc1bfca38b Mon Sep 17 00:00:00 2001 From: Nick Piggin Date: Tue, 31 Mar 2009 15:23:23 -0700 Subject: [PATCH] --- yaml --- r: 139159 b: refs/heads/master c: 56a76f8275c379ed73c8a43cfa1dfa2f5e9cfa19 h: refs/heads/master i: 139157: dd9bbe8a848b3ee21521d81af381a79ce0a99eba 139155: 97c800eda4186c384096b0db7485368dfe106af8 139151: 17ee7c4c808fbd31fb2b7e40a5976ff940176012 v: v3 --- [refs] | 2 +- trunk/fs/btrfs/inode.c | 11 +++++++---- trunk/fs/buffer.c | 12 ++++++++---- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index 036aea3b3f9d..2454685b20ad 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c2ec175c39f62949438354f603f4aa170846aabb +refs/heads/master: 56a76f8275c379ed73c8a43cfa1dfa2f5e9cfa19 diff --git a/trunk/fs/btrfs/inode.c b/trunk/fs/btrfs/inode.c index ec5423790bbb..17e608c4dc70 100644 --- a/trunk/fs/btrfs/inode.c +++ b/trunk/fs/btrfs/inode.c @@ -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 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) out_unlock: unlock_page(page); out: - if (ret) - ret = VM_FAULT_SIGBUS; return ret; } diff --git a/trunk/fs/buffer.c b/trunk/fs/buffer.c index 6d51a3da362c..0c14f8d52ee5 100644 --- a/trunk/fs/buffer.c +++ b/trunk/fs/buffer.c @@ -2320,7 +2320,7 @@ block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, struct inode *inode = vma->vm_file->f_path.dentry->d_inode; unsigned long end; loff_t size; - int ret = -EINVAL; + int ret = VM_FAULT_NOPAGE; /* make the VM retry the fault */ lock_page(page); size = i_size_read(inode); @@ -2340,10 +2340,14 @@ block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, if (!ret) ret = block_commit_write(page, 0, end); -out_unlock: - if (ret) - ret = VM_FAULT_SIGBUS; + if (unlikely(ret)) { + if (ret == -ENOMEM) + ret = VM_FAULT_OOM; + else /* -ENOSPC, -EIO, etc */ + ret = VM_FAULT_SIGBUS; + } +out_unlock: unlock_page(page); return ret; }