GFS2: Clear dirty bit at end of inode glock sync
authorSteven Whitehouse <swhiteho@redhat.com>
Mon, 20 Apr 2009 07:58:45 +0000 (08:58 +0100)
committerSteven Whitehouse <swhiteho@redhat.com>
Mon, 20 Apr 2009 08:05:21 +0000 (09:05 +0100)
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>
fs/gfs2/glops.c

index bf23a62aa92525031aa3835c8eb2e92cd5ab4ad5..70f87f43afa2b869559fa25bdb4fc90075d98468 100644 (file)
@@ -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);
 }
 
 /**