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