From: Chris Mason <mason@suse.com>

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 <mason@suse.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 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) {
_