1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2c59d87c4SChristoph Hellwig #ifndef __XFS_MESSAGE_H 3c59d87c4SChristoph Hellwig #define __XFS_MESSAGE_H 1 4c59d87c4SChristoph Hellwig 5a358f406STanner Love #include <linux/once_lite.h> 6a358f406STanner Love 7c59d87c4SChristoph Hellwig struct xfs_mount; 8c59d87c4SChristoph Hellwig 9e60aa787SJonathan Lassoff extern __printf(3, 4) 10e60aa787SJonathan Lassoff void xfs_printk_level(const char *kern_level, const struct xfs_mount *mp, 11e60aa787SJonathan Lassoff const char *fmt, ...); 12e60aa787SJonathan Lassoff 13e2703569SJonathan Lassoff #define xfs_printk_index_wrap(kern_level, mp, fmt, ...) \ 14e2703569SJonathan Lassoff ({ \ 15e2703569SJonathan Lassoff printk_index_subsys_emit("%sXFS%s: ", kern_level, fmt); \ 16e2703569SJonathan Lassoff xfs_printk_level(kern_level, mp, fmt, ##__VA_ARGS__); \ 17e2703569SJonathan Lassoff }) 18e60aa787SJonathan Lassoff #define xfs_emerg(mp, fmt, ...) \ 19e2703569SJonathan Lassoff xfs_printk_index_wrap(KERN_EMERG, mp, fmt, ##__VA_ARGS__) 20e60aa787SJonathan Lassoff #define xfs_alert(mp, fmt, ...) \ 21e2703569SJonathan Lassoff xfs_printk_index_wrap(KERN_ALERT, mp, fmt, ##__VA_ARGS__) 22e60aa787SJonathan Lassoff #define xfs_crit(mp, fmt, ...) \ 23e2703569SJonathan Lassoff xfs_printk_index_wrap(KERN_CRIT, mp, fmt, ##__VA_ARGS__) 24e60aa787SJonathan Lassoff #define xfs_err(mp, fmt, ...) \ 25e2703569SJonathan Lassoff xfs_printk_index_wrap(KERN_ERR, mp, fmt, ##__VA_ARGS__) 26e60aa787SJonathan Lassoff #define xfs_warn(mp, fmt, ...) \ 27e2703569SJonathan Lassoff xfs_printk_index_wrap(KERN_WARNING, mp, fmt, ##__VA_ARGS__) 28e60aa787SJonathan Lassoff #define xfs_notice(mp, fmt, ...) \ 29e2703569SJonathan Lassoff xfs_printk_index_wrap(KERN_NOTICE, mp, fmt, ##__VA_ARGS__) 30e60aa787SJonathan Lassoff #define xfs_info(mp, fmt, ...) \ 31e2703569SJonathan Lassoff xfs_printk_index_wrap(KERN_INFO, mp, fmt, ##__VA_ARGS__) 32e60aa787SJonathan Lassoff #ifdef DEBUG 33e60aa787SJonathan Lassoff #define xfs_debug(mp, fmt, ...) \ 34e2703569SJonathan Lassoff xfs_printk_index_wrap(KERN_DEBUG, mp, fmt, ##__VA_ARGS__) 35e60aa787SJonathan Lassoff #else 36e60aa787SJonathan Lassoff #define xfs_debug(mp, fmt, ...) do {} while (0) 37e60aa787SJonathan Lassoff #endif 38e60aa787SJonathan Lassoff 39e2703569SJonathan Lassoff #define xfs_alert_tag(mp, tag, fmt, ...) \ 40e2703569SJonathan Lassoff ({ \ 41e2703569SJonathan Lassoff printk_index_subsys_emit("%sXFS%s: ", KERN_ALERT, fmt); \ 42e2703569SJonathan Lassoff _xfs_alert_tag(mp, tag, fmt, ##__VA_ARGS__); \ 43e2703569SJonathan Lassoff }) 44e2703569SJonathan Lassoff 45b9075fa9SJoe Perches extern __printf(3, 4) 46898a768fSDave Chinner void _xfs_alert_tag(const struct xfs_mount *mp, uint32_t tag, 47898a768fSDave Chinner const char *fmt, ...); 48c59d87c4SChristoph Hellwig 493d6e0361SRich Johnston #define xfs_printk_ratelimited(func, dev, fmt, ...) \ 503d6e0361SRich Johnston do { \ 513d6e0361SRich Johnston static DEFINE_RATELIMIT_STATE(_rs, \ 523d6e0361SRich Johnston DEFAULT_RATELIMIT_INTERVAL, \ 533d6e0361SRich Johnston DEFAULT_RATELIMIT_BURST); \ 543d6e0361SRich Johnston if (__ratelimit(&_rs)) \ 553d6e0361SRich Johnston func(dev, fmt, ##__VA_ARGS__); \ 563d6e0361SRich Johnston } while (0) 573d6e0361SRich Johnston 58ec43f6daSEric Sandeen #define xfs_printk_once(func, dev, fmt, ...) \ 59a358f406STanner Love DO_ONCE_LITE(func, dev, fmt, ##__VA_ARGS__) 60ec43f6daSEric Sandeen 613d6e0361SRich Johnston #define xfs_emerg_ratelimited(dev, fmt, ...) \ 623d6e0361SRich Johnston xfs_printk_ratelimited(xfs_emerg, dev, fmt, ##__VA_ARGS__) 633d6e0361SRich Johnston #define xfs_alert_ratelimited(dev, fmt, ...) \ 643d6e0361SRich Johnston xfs_printk_ratelimited(xfs_alert, dev, fmt, ##__VA_ARGS__) 653d6e0361SRich Johnston #define xfs_crit_ratelimited(dev, fmt, ...) \ 663d6e0361SRich Johnston xfs_printk_ratelimited(xfs_crit, dev, fmt, ##__VA_ARGS__) 673d6e0361SRich Johnston #define xfs_err_ratelimited(dev, fmt, ...) \ 683d6e0361SRich Johnston xfs_printk_ratelimited(xfs_err, dev, fmt, ##__VA_ARGS__) 693d6e0361SRich Johnston #define xfs_warn_ratelimited(dev, fmt, ...) \ 703d6e0361SRich Johnston xfs_printk_ratelimited(xfs_warn, dev, fmt, ##__VA_ARGS__) 713d6e0361SRich Johnston #define xfs_notice_ratelimited(dev, fmt, ...) \ 723d6e0361SRich Johnston xfs_printk_ratelimited(xfs_notice, dev, fmt, ##__VA_ARGS__) 733d6e0361SRich Johnston #define xfs_info_ratelimited(dev, fmt, ...) \ 743d6e0361SRich Johnston xfs_printk_ratelimited(xfs_info, dev, fmt, ##__VA_ARGS__) 753d6e0361SRich Johnston #define xfs_debug_ratelimited(dev, fmt, ...) \ 763d6e0361SRich Johnston xfs_printk_ratelimited(xfs_debug, dev, fmt, ##__VA_ARGS__) 773d6e0361SRich Johnston 78*df5660cfSDarrick J. Wong #define xfs_warn_mount(mp, warntag, fmt, ...) \ 79*df5660cfSDarrick J. Wong do { \ 80*df5660cfSDarrick J. Wong if (xfs_should_warn((mp), (warntag))) \ 81*df5660cfSDarrick J. Wong xfs_warn((mp), (fmt), ##__VA_ARGS__); \ 82*df5660cfSDarrick J. Wong } while (0) 83*df5660cfSDarrick J. Wong 84ec43f6daSEric Sandeen #define xfs_warn_once(dev, fmt, ...) \ 85ec43f6daSEric Sandeen xfs_printk_once(xfs_warn, dev, fmt, ##__VA_ARGS__) 86ec43f6daSEric Sandeen #define xfs_notice_once(dev, fmt, ...) \ 87ec43f6daSEric Sandeen xfs_printk_once(xfs_notice, dev, fmt, ##__VA_ARGS__) 88603f000bSDarrick J. Wong #define xfs_info_once(dev, fmt, ...) \ 89603f000bSDarrick J. Wong xfs_printk_once(xfs_info, dev, fmt, ##__VA_ARGS__) 90ec43f6daSEric Sandeen 919842b56cSDarrick J. Wong void assfail(struct xfs_mount *mp, char *expr, char *f, int l); 929842b56cSDarrick J. Wong void asswarn(struct xfs_mount *mp, char *expr, char *f, int l); 93c59d87c4SChristoph Hellwig 94d243b89aSDarrick J. Wong extern void xfs_hex_dump(const void *p, int length); 95c59d87c4SChristoph Hellwig 96f9bccfccSBrian Foster void xfs_buf_alert_ratelimited(struct xfs_buf *bp, const char *rlmsg, 97f9bccfccSBrian Foster const char *fmt, ...); 98f9bccfccSBrian Foster 99c59d87c4SChristoph Hellwig #endif /* __XFS_MESSAGE_H */ 100