%patch
# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.1199  -> 1.1200 
#	 fs/reiserfs/inode.c	1.49    -> 1.50   
#	fs/reiserfs/journal.c	1.31    -> 1.32   
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 03/12/03	mason@coffee.suse.com	1.1200
# journal.c, inode.c:
#   reiserfs-free-blocks
# --------------------------------------------
#
diff -Nru a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
--- a/fs/reiserfs/inode.c	Wed Dec  3 18:13:01 2003
+++ b/fs/reiserfs/inode.c	Wed Dec  3 18:13:01 2003
@@ -628,7 +628,11 @@
 	    /* restart the transaction to give the journal a chance to free
 	    ** some blocks.  releases the path, so we have to go back to
 	    ** research if we succeed on the second try
+	    **
+	    ** the journal won't free the blocks if we don't force a commit
+	    ** and wait for it
 	    */
+	    SB_JOURNAL(inode->i_sb)->j_next_async_flush = 1;
 	    restart_transaction(&th, inode, &path) ; 
 	    repeat = _allocate_block(&th, block, inode, &allocated_block_nr, NULL, create);
 
diff -Nru a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c
--- a/fs/reiserfs/journal.c	Wed Dec  3 18:13:01 2003
+++ b/fs/reiserfs/journal.c	Wed Dec  3 18:13:01 2003
@@ -2996,7 +2996,6 @@
   int jindex ;
   int orig_jindex ;
   int flush = flags & FLUSH_ALL ;
-  int commit_now = flags & COMMIT_NOW ;
   int wait_on_commit = flags & WAIT ;
   struct reiserfs_super_block *rs ; 
 
@@ -3010,8 +3009,8 @@
     flush = 1 ;
   }
   if (SB_JOURNAL(p_s_sb)->j_next_async_flush) {
-    flags |= COMMIT_NOW ;
-    commit_now = 1 ;
+    flags |= COMMIT_NOW | WAIT;
+    wait_on_commit = 1;
   }
 
   /* check_journal_end locks the journal, and unlocks if it does not return 1 
@@ -3025,9 +3024,6 @@
   if (SB_JOURNAL(p_s_sb)->j_next_full_flush) {
     flush = 1 ;
   }
-  if (SB_JOURNAL(p_s_sb)->j_next_async_flush) {
-    commit_now = 1 ;
-  }
   /*
   ** j must wait means we have to flush the log blocks, and the real blocks for
   ** this transaction
@@ -3191,15 +3187,12 @@
 
   /* honor the flush and async wishes from the caller */
   if (flush) {
-  
     flush_commit_list(p_s_sb, SB_JOURNAL_LIST(p_s_sb) + orig_jindex, 1) ;
     flush_journal_list(p_s_sb,  SB_JOURNAL_LIST(p_s_sb) + orig_jindex , 1) ;  
-  } else if (commit_now) {
-    if (wait_on_commit) {
-      flush_commit_list(p_s_sb, SB_JOURNAL_LIST(p_s_sb) + orig_jindex, 1) ;
-    } else {
-      commit_flush_async(p_s_sb, orig_jindex) ; 
-    }
+  } else if (wait_on_commit) {
+    flush_commit_list(p_s_sb, SB_JOURNAL_LIST(p_s_sb) + orig_jindex, 1) ;
+  } else {
+    commit_flush_async(p_s_sb, orig_jindex) ; 
   }
 
   /* reset journal values for the next transaction */
@@ -3263,6 +3256,3 @@
   wake_up(&(SB_JOURNAL(p_s_sb)->j_join_wait)) ;
   return 0 ;
 }
-
-
-
