134 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (c) 2011 Red Hat, Inc. All Rights Reserved.4 */5 6#include "xfs.h"7#include "xfs_fs.h"8#include "xfs_error.h"9#include "xfs_shared.h"10#include "xfs_format.h"11#include "xfs_trans_resv.h"12#include "xfs_mount.h"13 14/*15 * XFS logging functions16 */17static void18__xfs_printk(19 const char *level,20 const struct xfs_mount *mp,21 struct va_format *vaf)22{23 if (mp && mp->m_super) {24 printk("%sXFS (%s): %pV\n", level, mp->m_super->s_id, vaf);25 return;26 }27 printk("%sXFS: %pV\n", level, vaf);28}29 30void31xfs_printk_level(32 const char *kern_level,33 const struct xfs_mount *mp,34 const char *fmt, ...)35{36 struct va_format vaf;37 va_list args;38 int level;39 40 va_start(args, fmt);41 vaf.fmt = fmt;42 vaf.va = &args;43 44 __xfs_printk(kern_level, mp, &vaf);45 46 va_end(args);47 48 if (!kstrtoint(kern_level, 0, &level) &&49 level <= LOGLEVEL_ERR &&50 xfs_error_level >= XFS_ERRLEVEL_HIGH)51 xfs_stack_trace();52}53 54void55_xfs_alert_tag(56 const struct xfs_mount *mp,57 uint32_t panic_tag,58 const char *fmt, ...)59{60 struct va_format vaf;61 va_list args;62 int do_panic = 0;63 64 if (xfs_panic_mask && (xfs_panic_mask & panic_tag)) {65 xfs_alert(mp, "Transforming an alert into a BUG.");66 do_panic = 1;67 }68 69 va_start(args, fmt);70 71 vaf.fmt = fmt;72 vaf.va = &args;73 74 __xfs_printk(KERN_ALERT, mp, &vaf);75 va_end(args);76 77 BUG_ON(do_panic);78}79 80void81asswarn(82 struct xfs_mount *mp,83 char *expr,84 char *file,85 int line)86{87 xfs_warn(mp, "Assertion failed: %s, file: %s, line: %d",88 expr, file, line);89 WARN_ON(1);90}91 92void93assfail(94 struct xfs_mount *mp,95 char *expr,96 char *file,97 int line)98{99 xfs_emerg(mp, "Assertion failed: %s, file: %s, line: %d",100 expr, file, line);101 if (xfs_globals.bug_on_assert)102 BUG();103 else104 WARN_ON(1);105}106 107void108xfs_hex_dump(const void *p, int length)109{110 print_hex_dump(KERN_ALERT, "", DUMP_PREFIX_OFFSET, 16, 1, p, length, 1);111}112 113void114xfs_buf_alert_ratelimited(115 struct xfs_buf *bp,116 const char *rlmsg,117 const char *fmt,118 ...)119{120 struct xfs_mount *mp = bp->b_mount;121 struct va_format vaf;122 va_list args;123 124 /* use the more aggressive per-target rate limit for buffers */125 if (!___ratelimit(&bp->b_target->bt_ioerror_rl, rlmsg))126 return;127 128 va_start(args, fmt);129 vaf.fmt = fmt;130 vaf.va = &args;131 __xfs_printk(KERN_ALERT, mp, &vaf);132 va_end(args);133}134