|
@@ -2564,22 +2564,22 @@ static void ocfs2_handle_error(struct super_block *sb)
|
|
|
ocfs2_set_ro_flag(osb, 0);
|
|
|
}
|
|
|
|
|
|
-static char error_buf[1024];
|
|
|
-
|
|
|
-void __ocfs2_error(struct super_block *sb,
|
|
|
- const char *function,
|
|
|
- const char *fmt, ...)
|
|
|
+void __ocfs2_error(struct super_block *sb, const char *function,
|
|
|
+ const char *fmt, ...)
|
|
|
{
|
|
|
+ struct va_format vaf;
|
|
|
va_list args;
|
|
|
|
|
|
va_start(args, fmt);
|
|
|
- vsnprintf(error_buf, sizeof(error_buf), fmt, args);
|
|
|
- va_end(args);
|
|
|
+ vaf.fmt = fmt;
|
|
|
+ vaf.va = &args;
|
|
|
|
|
|
/* Not using mlog here because we want to show the actual
|
|
|
* function the error came from. */
|
|
|
- printk(KERN_CRIT "OCFS2: ERROR (device %s): %s: %s\n",
|
|
|
- sb->s_id, function, error_buf);
|
|
|
+ printk(KERN_CRIT "OCFS2: ERROR (device %s): %s: %pV\n",
|
|
|
+ sb->s_id, function, &vaf);
|
|
|
+
|
|
|
+ va_end(args);
|
|
|
|
|
|
ocfs2_handle_error(sb);
|
|
|
}
|
|
@@ -2587,18 +2587,21 @@ void __ocfs2_error(struct super_block *sb,
|
|
|
/* Handle critical errors. This is intentionally more drastic than
|
|
|
* ocfs2_handle_error, so we only use for things like journal errors,
|
|
|
* etc. */
|
|
|
-void __ocfs2_abort(struct super_block* sb,
|
|
|
- const char *function,
|
|
|
+void __ocfs2_abort(struct super_block *sb, const char *function,
|
|
|
const char *fmt, ...)
|
|
|
{
|
|
|
+ struct va_format vaf;
|
|
|
va_list args;
|
|
|
|
|
|
va_start(args, fmt);
|
|
|
- vsnprintf(error_buf, sizeof(error_buf), fmt, args);
|
|
|
- va_end(args);
|
|
|
|
|
|
- printk(KERN_CRIT "OCFS2: abort (device %s): %s: %s\n",
|
|
|
- sb->s_id, function, error_buf);
|
|
|
+ vaf.fmt = fmt;
|
|
|
+ vaf.va = &args;
|
|
|
+
|
|
|
+ printk(KERN_CRIT "OCFS2: abort (device %s): %s: %pV\n",
|
|
|
+ sb->s_id, function, &vaf);
|
|
|
+
|
|
|
+ va_end(args);
|
|
|
|
|
|
/* We don't have the cluster support yet to go straight to
|
|
|
* hard readonly in here. Until then, we want to keep
|