From: Eric Sandeen Date: Thu, 31 Jan 2013 00:54:58 +0000 (+0000) Subject: btrfs: fix varargs in __btrfs_std_error X-Git-Tag: v3.9-rc1~4^2~30^2~36 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=37252a66f34940421942725ca75d12e6008682dc;p=platform%2Fkernel%2Flinux-3.10.git btrfs: fix varargs in __btrfs_std_error __btrfs_std_error didn't always properly call va_end, and might call va_start even if fmt was NULL. Move all the varargs handling into the block where we have fmt. Signed-off-by: Eric Sandeen Signed-off-by: Josef Bacik --- diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 976f6aac..e0ea127 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -141,8 +141,6 @@ void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function, struct super_block *sb = fs_info->sb; char nbuf[16]; const char *errstr; - va_list args; - va_start(args, fmt); /* * Special case: if the error is EROFS, and we're already @@ -153,13 +151,16 @@ void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function, errstr = btrfs_decode_error(errno, nbuf); if (fmt) { - struct va_format vaf = { - .fmt = fmt, - .va = &args, - }; + struct va_format vaf; + va_list args; + + va_start(args, fmt); + vaf.fmt = fmt; + vaf.va = &args; printk(KERN_CRIT "BTRFS error (device %s) in %s:%d: %s (%pV)\n", sb->s_id, function, line, errstr, &vaf); + va_end(args); } else { printk(KERN_CRIT "BTRFS error (device %s) in %s:%d: %s\n", sb->s_id, function, line, errstr); @@ -170,7 +171,6 @@ void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function, save_error_info(fs_info); btrfs_handle_error(fs_info); } - va_end(args); } static const char * const logtypes[] = {