0 Members and 1 Guest are viewing this topic.
diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.cindex 0f16edd..26b2983 100644--- a/fs/jbd2/journal.c+++ b/fs/jbd2/journal.c@@ -1351,24 +1351,33 @@ void jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid, static void jbd2_mark_journal_empty(journal_t *journal) { journal_superblock_t *sb = journal->j_superblock;+ __be32 new_tail_sequence; BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex)); read_lock(&journal->j_state_lock);- /* Is it already empty? */+ new_tail_sequence = cpu_to_be32(journal->j_tail_sequence);+ /* Nothing to do? */ if (sb->s_start == 0) {+ pr_err("JBD2: jbd2_mark_journal_empty bug workaround (%u, %u)\n",+ (unsigned) be32_to_cpu(sb->s_sequence),+ (unsigned) be32_to_cpu(new_tail_sequence));+ WARN_ON(1);+ }+ if (sb->s_start == 0 && sb->s_sequence == new_tail_sequence) { read_unlock(&journal->j_state_lock);- return;+ goto set_flushed; } jbd_debug(1, "JBD2: Marking journal as empty (seq %d)\n", journal->j_tail_sequence); - sb->s_sequence = cpu_to_be32(journal->j_tail_sequence);+ sb->s_sequence = new_tail_sequence; sb->s_start = cpu_to_be32(0); read_unlock(&journal->j_state_lock); jbd2_write_superblock(journal, WRITE_FUA); - /* Log is no longer empty */+set_flushed:+ /* Log is empty */ write_lock(&journal->j_state_lock); journal->j_flags |= JBD2_FLUSHED; write_unlock(&journal->j_state_lock);
... Weitere Fehlermeldungen von Betroffenen sind bisher nicht bekannt. Dies wäre aber zu erwarten, da Distributionen wie Fedora 7 oder Siduction die Kernel 2.6.2 und 2.6.3 bereits seit deren Erscheinen nutzen ...