xfs_message.c (2313B)
1// SPDX-License-Identifier: GPL-2.0 2/* 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 functions 16 */ 17static void 18__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 30void 31xfs_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 54void 55_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 80void 81asswarn( 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 92void 93assfail( 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 else 104 WARN_ON(1); 105} 106 107void 108xfs_hex_dump(const void *p, int length) 109{ 110 print_hex_dump(KERN_ALERT, "", DUMP_PREFIX_OFFSET, 16, 1, p, length, 1); 111} 112 113void 114xfs_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}