]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/reiserfs/prints.c
reiserfs: prepare_error_buf wrongly consumes va_arg
[linux-2.6-omap-h63xx.git] / fs / reiserfs / prints.c
index 5e7388b32d020f17b6b22fb515bbe04a8a3ee67c..b87b23717c23115fb90be71a79501832ad7c4c32 100644 (file)
@@ -157,19 +157,16 @@ static void sprintf_disk_child(char *buf, struct disk_child *dc)
                dc_size(dc));
 }
 
-static char *is_there_reiserfs_struct(char *fmt, int *what, int *skip)
+static char *is_there_reiserfs_struct(char *fmt, int *what)
 {
        char *k = fmt;
 
-       *skip = 0;
-
        while ((k = strchr(k, '%')) != NULL) {
                if (k[1] == 'k' || k[1] == 'K' || k[1] == 'h' || k[1] == 't' ||
                    k[1] == 'z' || k[1] == 'b' || k[1] == 'y' || k[1] == 'a') {
                        *what = k[1];
                        break;
                }
-               (*skip)++;
                k++;
        }
        return k;
@@ -193,18 +190,15 @@ 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;
+       int what;
 
        strcpy(fmt1, fmt);
 
-       while ((k = is_there_reiserfs_struct(fmt1, &what, &skip)) != NULL) {
+       while ((k = is_there_reiserfs_struct(fmt1, &what)) != 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 reiserfs_key *));
@@ -264,14 +258,17 @@ static void prepare_error_buf(const char *fmt, va_list args)
     va_end( args );\
 }
 
-void reiserfs_warning(struct super_block *sb, const char *fmt, ...)
+void __reiserfs_warning(struct super_block *sb, const char *id,
+                        const char *function, const char *fmt, ...)
 {
        do_reiserfs_warning(fmt);
        if (sb)
-               printk(KERN_WARNING "ReiserFS: %s: warning: %s\n",
-                      reiserfs_bdevname(sb), error_buf);
+               printk(KERN_WARNING "REISERFS warning (device %s): %s%s%s: "
+                      "%s\n", sb->s_id, id ? id : "", id ? " " : "",
+                      function, error_buf);
        else
-               printk(KERN_WARNING "ReiserFS: warning: %s\n", error_buf);
+               printk(KERN_WARNING "REISERFS warning: %s%s%s: %s\n",
+                      id ? id : "", id ? " " : "", function, error_buf);
 }
 
 /* No newline.. reiserfs_info calls can be followed by printk's */
@@ -279,10 +276,10 @@ void reiserfs_info(struct super_block *sb, const char *fmt, ...)
 {
        do_reiserfs_warning(fmt);
        if (sb)
-               printk(KERN_NOTICE "ReiserFS: %s: %s",
-                      reiserfs_bdevname(sb), error_buf);
+               printk(KERN_NOTICE "REISERFS (device %s): %s",
+                      sb->s_id, error_buf);
        else
-               printk(KERN_NOTICE "ReiserFS: %s", error_buf);
+               printk(KERN_NOTICE "REISERFS %s:", error_buf);
 }
 
 /* No newline.. reiserfs_printk calls can be followed by printk's */
@@ -297,10 +294,10 @@ void reiserfs_debug(struct super_block *s, int level, const char *fmt, ...)
 #ifdef CONFIG_REISERFS_CHECK
        do_reiserfs_warning(fmt);
        if (s)
-               printk(KERN_DEBUG "ReiserFS: %s: %s\n",
-                      reiserfs_bdevname(s), error_buf);
+               printk(KERN_DEBUG "REISERFS debug (device %s): %s\n",
+                      s->s_id, error_buf);
        else
-               printk(KERN_DEBUG "ReiserFS: %s\n", error_buf);
+               printk(KERN_DEBUG "REISERFS debug: %s\n", error_buf);
 #endif
 }
 
@@ -368,15 +365,15 @@ void reiserfs_abort(struct super_block *sb, int errno, const char *fmt, ...)
        do_reiserfs_warning(fmt);
 
        if (reiserfs_error_panic(sb)) {
-               panic(KERN_CRIT "REISERFS: panic (device %s): %s\n",
-                     reiserfs_bdevname(sb), error_buf);
+               panic(KERN_CRIT "REISERFS panic (device %s): %s\n", sb->s_id,
+                     error_buf);
        }
 
-       if (sb->s_flags & MS_RDONLY)
+       if (reiserfs_is_journal_aborted(SB_JOURNAL(sb)))
                return;
 
-       printk(KERN_CRIT "REISERFS: abort (device %s): %s\n",
-              reiserfs_bdevname(sb), error_buf);
+       printk(KERN_CRIT "REISERFS abort (device %s): %s\n", sb->s_id,
+              error_buf);
 
        sb->s_flags |= MS_RDONLY;
        reiserfs_journal_abort(sb, errno);
@@ -575,6 +572,8 @@ void print_block(struct buffer_head *bh, ...)       //int print_mode, int first, int l
                                        printk
                                            ("Block %llu contains unformatted data\n",
                                             (unsigned long long)bh->b_blocknr);
+
+       va_end(args);
 }
 
 static char print_tb_buf[2048];