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);
}