----- Original Message ----- > When gfs2 was mounted read-only and then unmounted, it was writing a > header block to the journal in the syncing gfs2_log_flush() call from > kill_sb(). This is because the journal was not being marked as idle > until the first log header was written out, and on a read-only mount > there never was a log header written out. Since the journal was not > marked idle, gfs2_log_flush() was writing out a header lock to make > sure it was empty during the sync. Not only did this cause IO to a > read-only filesystem, but the journalling isn't completely initialized > on read-only mounts, and so gfs2 was writing out the wrong sequence > number in the log header. > > Now, the journal is marked idle on mount, and gfs2_log_flush() won't > write out anything until there starts being transactions to flush. > > Signed-off-by: Benjamin Marzinski <bmarz...@redhat.com> > --- > fs/gfs2/ops_fstype.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c > index 8633ad3..fd984f6 100644 > --- a/fs/gfs2/ops_fstype.c > +++ b/fs/gfs2/ops_fstype.c > @@ -757,6 +757,7 @@ static int init_journal(struct gfs2_sbd *sdp, int undo) > } > } > > + sdp->sd_log_idle = 1; > set_bit(SDF_JOURNAL_CHECKED, &sdp->sd_flags); > gfs2_glock_dq_uninit(&ji_gh); > jindex = 0; > -- > 1.8.3.1
Hi, Now applied to the for-next branch of the linux-gfs2 tree: https://git.kernel.org/cgit/linux/kernel/git/gfs2/linux-gfs2.git/commit/fs/gfs2?h=for-next&id=086cc672e1cb600b9c17688a4aa44560db858c03 Regards, Bob Peterson Red Hat File Systems