GFS2: dirty inode correctly in gfs2_write_end
authorBenjamin Marzinski <bmarzins@redhat.com>
Tue, 3 Sep 2013 21:59:42 +0000 (16:59 -0500)
committerSteven Whitehouse <swhiteho@redhat.com>
Thu, 5 Sep 2013 08:04:24 +0000 (09:04 +0100)
commit0c9018097fe2966d80fe39e5c9ca94bb436ec369
treea3a30053c83e22f30e3e7d3fc595ea68fbdc7afa
parent1d12d175ea3b56fdf2573bf6f168cce8f39b19e3
GFS2: dirty inode correctly in gfs2_write_end

GFS2 was only setting I_DIRTY_DATASYNC on files that it wrote to, when
it actually increased the file size.  If gfs2_fsync was called without
I_DIRTY_DATASYNC set, it didn't flush the incore data to the log before
returning, so any metadata or journaled data changes were not getting
fsynced. This meant that writes to the middle of files were not always
getting fsynced properly.

This patch makes gfs2 set I_DIRTY_DATASYNC whenever metadata has been
updated during a write. It also make gfs2_sync flush the incore log
if I_DIRTY_PAGES is set, and the file is using data journalling. This
will make sure that all incore logged data gets written to disk before
returning from a fsync.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/aops.c
fs/gfs2/file.c