diff -rup linux-2.4.7-ac1/fs/reiserfs/prints.c linux-2.4.7-ac1.patched/fs/reiserfs/prints.c
--- linux-2.4.7-ac1/fs/reiserfs/prints.c	Fri Jul 27 22:16:50 2001
+++ linux-2.4.7-ac1.patched/fs/reiserfs/prints.c	Fri Jul 27 22:57:31 2001
@@ -153,12 +153,10 @@ static char * is_there_reiserfs_struct (
 
   *skip = 0;
   
-  while (1) {
-    k = strstr (k, "%");
-    if (!k)
-      break;
-    if (k && (k[1] == 'k' || k[1] == 'K' || k[1] == 'h' || k[1] == 't' ||
-	      k[1] == 'z' || k[1] == 'b' || k[1] == 'y')) {
+  while ((k = strstr (k, "%")) != NULL)
+  {
+    if (k[1] == 'k' || k[1] == 'K' || k[1] == 'h' || k[1] == 't' ||
+	      k[1] == 'z' || k[1] == 'b' || k[1] == 'y') {
       *what = k[1];
       break;
     }
@@ -182,59 +180,55 @@ static char * is_there_reiserfs_struct (
            key->k_offset, key->k_uniqueness); 
 */
 
-#define do_reiserfs_warning \
-{\
-  char * fmt1 = fmt_buf;\
-  va_list args;\
-  int i, j;\
-  char * k;\
-  char * p = error_buf;\
-  int what, skip;\
-\
-  strcpy (fmt1, fmt);\
-  va_start(args, fmt);\
-\
-  while (1) {\
-    k = is_there_reiserfs_struct (fmt1, &what, &skip);\
-    if (k != 0) {\
-      *k = 0;\
-      p += vsprintf (p, fmt1, args);\
-\
-      for (i = 0; i < skip; i ++)\
-	j = va_arg (args, int);\
-\
-      switch (what) {\
-      case 'k':\
-	sprintf_le_key (p, va_arg(args, struct key *));\
-	break;\
-      case 'K':\
-	sprintf_cpu_key (p, va_arg(args, struct cpu_key *));\
-	break;\
-      case 'h':\
-	sprintf_item_head (p, va_arg(args, struct item_head *));\
-	break;\
-      case 't':\
-	sprintf_direntry (p, va_arg(args, struct reiserfs_dir_entry *));\
-	break;\
-      case 'y':\
-	sprintf_disk_child (p, va_arg(args, struct disk_child *));\
-	break;\
-      case 'z':\
-	sprintf_block_head (p, va_arg(args, struct buffer_head *));\
-	break;\
-      case 'b':\
-	sprintf_buffer_head (p, va_arg(args, struct buffer_head *));\
-	break;\
-      }\
-      p += strlen (p);\
-      fmt1 = k + 2;\
-    } else {\
-      i = vsprintf (p, fmt1, args);\
-      break;\
-    }\
-  }\
-\
-  va_end(args);\
+
+static void
+prepare_error_buf( const char *fmt, va_list args )
+{
+    char * fmt1 = fmt_buf;
+    char * k;
+    char * p = error_buf;
+    int i, j, what, skip;
+
+    strcpy (fmt1, fmt);
+
+    while( (k = is_there_reiserfs_struct( fmt1, &what, &skip )) != NULL )
+    {
+        *k = 0;
+
+        p += vsprintf (p, fmt1, args);
+
+        for (i = 0; i < skip; i ++)
+            j = va_arg (args, int);
+
+        switch (what) {
+        case 'k':
+            sprintf_le_key (p, va_arg(args, struct key *));
+            break;
+        case 'K':
+            sprintf_cpu_key (p, va_arg(args, struct cpu_key *));
+            break;
+        case 'h':
+            sprintf_item_head (p, va_arg(args, struct item_head *));
+            break;
+        case 't':
+            sprintf_direntry (p, va_arg(args, struct reiserfs_dir_entry *));
+            break;
+        case 'y':
+            sprintf_disk_child (p, va_arg(args, struct disk_child *));
+            break;
+        case 'z':
+            sprintf_block_head (p, va_arg(args, struct buffer_head *));
+            break;
+        case 'b':
+            sprintf_buffer_head (p, va_arg(args, struct buffer_head *));
+            break;
+        }
+
+        p += strlen (p);
+        fmt1 = k + 2;
+    }
+    vsprintf (p, fmt1, args);
+
 }
 
 
@@ -247,9 +241,18 @@ static char * is_there_reiserfs_struct (
    %z to print block head (arg must be struct buffer_head *
    %b to print buffer_head
 */
+
+#define do_reiserfs_warning(fmt)\
+{\
+    va_list args;\
+    va_start( args, fmt );\
+    prepare_error_buf( fmt, args );\
+    va_end( args );\
+}
+
 void reiserfs_warning (const char * fmt, ...)
 {
-  do_reiserfs_warning;
+  do_reiserfs_warning(fmt);
   /* console_print (error_buf); */
   printk (KERN_WARNING "%s", error_buf);
 }
@@ -257,7 +260,7 @@ void reiserfs_warning (const char * fmt,
 void reiserfs_debug (struct super_block *s, int level, const char * fmt, ...)
 {
 #ifdef CONFIG_REISERFS_CHECK
-  do_reiserfs_warning;
+  do_reiserfs_warning(fmt);
   printk (KERN_DEBUG "%s", error_buf);
 #else
   ; 
@@ -317,31 +320,9 @@ extern struct tree_balance * cur_tb;
 void reiserfs_panic (struct super_block * sb, const char * fmt, ...)
 {
   show_reiserfs_locks() ;
-  do_reiserfs_warning;
-  printk ("%s", error_buf);
+  do_reiserfs_warning(fmt);
+  printk ( KERN_EMERG "%s", error_buf);
   BUG ();
-  // console_print (error_buf);
-  // for (;;);
-
-  /* comment before release */
-  //for (;;);
-
-#if 0 /* this is not needed, the state is ignored */
-  if (sb && !(sb->s_flags & MS_RDONLY)) {
-    sb->u.reiserfs_sb.s_mount_state |= REISERFS_ERROR_FS;
-    sb->u.reiserfs_sb.s_rs->s_state = REISERFS_ERROR_FS;
-    
-    mark_buffer_dirty(sb->u.reiserfs_sb.s_sbh) ;
-    sb->s_dirt = 1;
-  }
-#endif
-
-  /* this is to prevent panic from syncing this filesystem */
-  if (sb)
-    sb->s_flags |= MS_RDONLY;
-
-  panic ("REISERFS: panic (device %s): %s\n",
-	 sb ? kdevname(sb->s_dev) : "sb == 0", error_buf);
 }
 
 
