summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2008-01-17 15:12:03 +0000
committerSteven Whitehouse <swhiteho@redhat.com>2008-01-25 08:20:15 +0000
commitb7fe2e391ee7b711d6dfd6a694d60c4f21113cbb (patch)
tree4a5d141ffd4ae77dc6ce1a47b0bb8ce9d6d7c685
parent3e5cd0877e6d2f059dc36b8206cb7e93938151db (diff)
downloadlinux-b7fe2e391ee7b711d6dfd6a694d60c4f21113cbb.tar.gz
linux-b7fe2e391ee7b711d6dfd6a694d60c4f21113cbb.tar.bz2
linux-b7fe2e391ee7b711d6dfd6a694d60c4f21113cbb.zip
[GFS2] Fix page_mkwrite truncation race path
There was a bug in the truncation/invalidation race path for ->page_mkwrite for gfs2. It ought to return 0 so that the effect is the same as if the page was truncated at any of the other points at which the page_lock is dropped. This will result in the restart of the whole page fault path. If it was due to a real truncation (as opposed to an invalidate because we let a glock go) then the ->fault path will pick that up when it gets called again. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
-rw-r--r--fs/gfs2/ops_file.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/gfs2/ops_file.c b/fs/gfs2/ops_file.c
index d7f4726ae0ce..f4842f2548cd 100644
--- a/fs/gfs2/ops_file.c
+++ b/fs/gfs2/ops_file.c
@@ -394,6 +394,7 @@ static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct page *page)
last_index = ip->i_inode.i_size >> PAGE_CACHE_SHIFT;
if (page->index > last_index)
goto out_unlock_page;
+ ret = 0;
if (!PageUptodate(page) || page->mapping != ip->i_inode.i_mapping)
goto out_unlock_page;
if (gfs2_is_stuffed(ip)) {