We need to take journal_lock_updates() while remounting r/o to prevent a new transaction starting while journal_flush() is running. Signed-off-by: Andrew Morton --- 25-akpm/fs/ext3/super.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletion(-) diff -puN fs/ext3/super.c~ext3-journal_flush-needs-journal_lock_updates fs/ext3/super.c --- 25/fs/ext3/super.c~ext3-journal_flush-needs-journal_lock_updates 2004-06-03 21:15:57.911628872 -0700 +++ 25-akpm/fs/ext3/super.c 2004-06-03 21:15:57.916628112 -0700 @@ -1907,13 +1907,17 @@ static void ext3_commit_super (struct su static void ext3_mark_recovery_complete(struct super_block * sb, struct ext3_super_block * es) { - journal_flush(EXT3_SB(sb)->s_journal); + journal_t *journal = EXT3_SB(sb)->s_journal; + + journal_lock_updates(journal); + journal_flush(journal); if (EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER) && sb->s_flags & MS_RDONLY) { EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER); sb->s_dirt = 0; ext3_commit_super(sb, es, 1); } + journal_unlock_updates(journal); } /* _