diff -rup linux/fs/reiserfs/bitmap.c linux.patched/fs/reiserfs/bitmap.c
--- linux/fs/reiserfs/bitmap.c  Thu Aug 30 14:52:23 2001
+++ linux.patched/fs/reiserfs/bitmap.c  Thu Aug 30 16:19:47 2001
@@ -470,6 +470,7 @@ int reiserfs_new_unf_blocknrs2 (struct r
  unsigned long border = 0;
  unsigned long bstart = 0;
  unsigned long hash_in, hash_out;
+  unsigned long saved_search_start=search_start;
  int allocated[PREALLOCATION_SIZE];
  int blks;

@@ -575,7 +576,15 @@ int reiserfs_new_unf_blocknrs2 (struct r
  ** and should probably be removed
  */
  if ( search_start < border ) search_start=border;
-
+
+  /* If the disk free space is already below 10% we should
+  ** start looking for the free blocks from the beginning
+  ** of the partition, before the border line.
+  */
+  if ( SB_FREE_BLOCKS(th->t_super) <= (SB_BLOCK_COUNT(th->t_super) / 10) ) {
+    search_start=saved_search_start;
+  }
+
  *free_blocknrs = 0;
  blks = PREALLOCATION_SIZE-1;
  for (blks_gotten=0; blks_gotten<PREALLOCATION_SIZE; blks_gotten++) {