Commit 37252a66 authored by Eric Sandeen's avatar Eric Sandeen Committed by Josef Bacik

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: default avatarEric Sandeen <sandeen@redhat.com>
Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
parent 0e636027
...@@ -141,8 +141,6 @@ void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function, ...@@ -141,8 +141,6 @@ void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function,
struct super_block *sb = fs_info->sb; struct super_block *sb = fs_info->sb;
char nbuf[16]; char nbuf[16];
const char *errstr; const char *errstr;
va_list args;
va_start(args, fmt);
/* /*
* Special case: if the error is EROFS, and we're already * 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, ...@@ -153,13 +151,16 @@ void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function,
errstr = btrfs_decode_error(errno, nbuf); errstr = btrfs_decode_error(errno, nbuf);
if (fmt) { if (fmt) {
struct va_format vaf = { struct va_format vaf;
.fmt = fmt, va_list args;
.va = &args,
}; va_start(args, fmt);
vaf.fmt = fmt;
vaf.va = &args;
printk(KERN_CRIT "BTRFS error (device %s) in %s:%d: %s (%pV)\n", printk(KERN_CRIT "BTRFS error (device %s) in %s:%d: %s (%pV)\n",
sb->s_id, function, line, errstr, &vaf); sb->s_id, function, line, errstr, &vaf);
va_end(args);
} else { } else {
printk(KERN_CRIT "BTRFS error (device %s) in %s:%d: %s\n", printk(KERN_CRIT "BTRFS error (device %s) in %s:%d: %s\n",
sb->s_id, function, line, errstr); sb->s_id, function, line, errstr);
...@@ -170,7 +171,6 @@ void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function, ...@@ -170,7 +171,6 @@ void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function,
save_error_info(fs_info); save_error_info(fs_info);
btrfs_handle_error(fs_info); btrfs_handle_error(fs_info);
} }
va_end(args);
} }
static const char * const logtypes[] = { static const char * const logtypes[] = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment