summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2009-04-20 09:58:45 +0200
committerSteven Whitehouse <swhiteho@redhat.com>2009-04-20 10:05:21 +0200
commit52fcd11c0900b0cbc584eeda12a6e27dd6c9d046 (patch)
tree29ab55d89da3c559d9ce3d0fbe53bbd41c9f1701
parentMerge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiw... (diff)
downloadlinux-52fcd11c0900b0cbc584eeda12a6e27dd6c9d046.tar.xz
linux-52fcd11c0900b0cbc584eeda12a6e27dd6c9d046.zip
GFS2: Clear dirty bit at end of inode glock sync
The dirty bit can get set during the inode glock sync. Its too complicated to change that at the moment, so this is the quick fix - to clear the bit again at the end of the function. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
-rw-r--r--fs/gfs2/glops.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c
index bf23a62aa925..70f87f43afa2 100644
--- a/fs/gfs2/glops.c
+++ b/fs/gfs2/glops.c
@@ -156,6 +156,12 @@ static void inode_go_sync(struct gfs2_glock *gl)
error = filemap_fdatawait(metamapping);
mapping_set_error(metamapping, error);
gfs2_ail_empty_gl(gl);
+ /*
+ * Writeback of the data mapping may cause the dirty flag to be set
+ * so we have to clear it again here.
+ */
+ smp_mb__before_clear_bit();
+ clear_bit(GLF_DIRTY, &gl->gl_flags);
}
/**