summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/inode.c
diff options
context:
space:
mode:
authorChris Mason2009-09-11 18:33:12 +0200
committerChris Mason2009-09-11 19:31:08 +0200
commit50a9b214bc6c052caa05a210ebfc1bdf0d7085b2 (patch)
treec5ae2e6a99778f237bdc88eb7157f7c4a82a2e54 /fs/btrfs/inode.c
parentBtrfs: Fix extent replacment race (diff)
downloadkernel-qcow2-linux-50a9b214bc6c052caa05a210ebfc1bdf0d7085b2.tar.gz
kernel-qcow2-linux-50a9b214bc6c052caa05a210ebfc1bdf0d7085b2.tar.xz
kernel-qcow2-linux-50a9b214bc6c052caa05a210ebfc1bdf0d7085b2.zip
Btrfs: fix btrfs page_mkwrite to return locked page
This closes a whole where the page may be written before the page_mkwrite caller has a chance to dirty it (thanks to Nick Piggin) Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r--fs/btrfs/inode.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 233fe6f26120..c846482e7985 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -4552,11 +4552,14 @@ again:
}
ClearPageChecked(page);
set_page_dirty(page);
+ SetPageUptodate(page);
BTRFS_I(inode)->last_trans = root->fs_info->generation + 1;
unlock_extent(io_tree, page_start, page_end, GFP_NOFS);
out_unlock:
+ if (!ret)
+ return VM_FAULT_LOCKED;
unlock_page(page);
out:
return ret;