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 <[email protected]>

diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c
index bf23a62..70f87f4 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);
 }
 
 /**
-- 
1.6.0.6

Reply via email to