| .. | .. |
|---|
| 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 */ |
|---|