.. | .. |
---|
31 | 31 | } |
---|
32 | 32 | #endif |
---|
33 | 33 | |
---|
34 | | -#define xfs_printk_ratelimited(func, dev, fmt, ...) \ |
---|
| 34 | +#define xfs_printk_ratelimited(func, dev, fmt, ...) \ |
---|
35 | 35 | do { \ |
---|
36 | 36 | static DEFINE_RATELIMIT_STATE(_rs, \ |
---|
37 | 37 | DEFAULT_RATELIMIT_INTERVAL, \ |
---|
38 | 38 | DEFAULT_RATELIMIT_BURST); \ |
---|
39 | 39 | if (__ratelimit(&_rs)) \ |
---|
40 | | - func(dev, fmt, ##__VA_ARGS__); \ |
---|
| 40 | + func(dev, fmt, ##__VA_ARGS__); \ |
---|
41 | 41 | } while (0) |
---|
| 42 | + |
---|
| 43 | +#define xfs_printk_once(func, dev, fmt, ...) \ |
---|
| 44 | +({ \ |
---|
| 45 | + static bool __section(".data.once") __print_once; \ |
---|
| 46 | + bool __ret_print_once = !__print_once; \ |
---|
| 47 | + \ |
---|
| 48 | + if (!__print_once) { \ |
---|
| 49 | + __print_once = true; \ |
---|
| 50 | + func(dev, fmt, ##__VA_ARGS__); \ |
---|
| 51 | + } \ |
---|
| 52 | + unlikely(__ret_print_once); \ |
---|
| 53 | +}) |
---|
42 | 54 | |
---|
43 | 55 | #define xfs_emerg_ratelimited(dev, fmt, ...) \ |
---|
44 | 56 | xfs_printk_ratelimited(xfs_emerg, dev, fmt, ##__VA_ARGS__) |
---|
.. | .. |
---|
57 | 69 | #define xfs_debug_ratelimited(dev, fmt, ...) \ |
---|
58 | 70 | xfs_printk_ratelimited(xfs_debug, dev, fmt, ##__VA_ARGS__) |
---|
59 | 71 | |
---|
60 | | -extern void assfail(char *expr, char *f, int l); |
---|
61 | | -extern void asswarn(char *expr, char *f, int l); |
---|
| 72 | +#define xfs_warn_once(dev, fmt, ...) \ |
---|
| 73 | + xfs_printk_once(xfs_warn, dev, fmt, ##__VA_ARGS__) |
---|
| 74 | +#define xfs_notice_once(dev, fmt, ...) \ |
---|
| 75 | + xfs_printk_once(xfs_notice, dev, fmt, ##__VA_ARGS__) |
---|
62 | 76 | |
---|
63 | | -extern void xfs_hex_dump(void *p, int length); |
---|
| 77 | +void assfail(struct xfs_mount *mp, char *expr, char *f, int l); |
---|
| 78 | +void asswarn(struct xfs_mount *mp, char *expr, char *f, int l); |
---|
| 79 | + |
---|
| 80 | +extern void xfs_hex_dump(const void *p, int length); |
---|
| 81 | + |
---|
| 82 | +void xfs_buf_alert_ratelimited(struct xfs_buf *bp, const char *rlmsg, |
---|
| 83 | + const char *fmt, ...); |
---|
64 | 84 | |
---|
65 | 85 | #endif /* __XFS_MESSAGE_H */ |
---|