From: Chris Mason In data=journal mode, when blocks are freed and their buffers are dirty, reiserfs can remove them from the transaction without cleaning them. These buffers never get cleaned, resulting in an unfreeable page. Signed-off-by: Chris Mason Signed-off-by: Andrew Morton --- 25-akpm/fs/reiserfs/journal.c | 4 ++++ 1 files changed, 4 insertions(+) diff -puN fs/reiserfs/journal.c~reiserfs-make-sure-data=journal-buffers-are-cleaned-on-free fs/reiserfs/journal.c --- 25/fs/reiserfs/journal.c~reiserfs-make-sure-data=journal-buffers-are-cleaned-on-free Fri Mar 11 17:10:20 2005 +++ 25-akpm/fs/reiserfs/journal.c Fri Mar 11 17:10:20 2005 @@ -3011,6 +3011,8 @@ static int remove_from_transaction(struc if (!already_cleaned) { clear_buffer_journal_dirty (bh); + clear_buffer_dirty(bh); + clear_buffer_journal_test (bh); put_bh(bh) ; if (atomic_read(&(bh->b_count)) < 0) { reiserfs_warning (p_s_sb, "journal-1752: remove from trans, b_count < 0"); @@ -3317,6 +3319,8 @@ int journal_mark_freed(struct reiserfs_t ** in the current trans */ clear_buffer_journal_dirty (cn->bh); + clear_buffer_dirty(cn->bh); + clear_buffer_journal_test(cn->bh); cleaned = 1 ; put_bh(cn->bh) ; if (atomic_read(&(cn->bh->b_count)) < 0) { _