Index: sys/sys/mbuf.h =================================================================== --- sys/sys/mbuf.h +++ sys/sys/mbuf.h @@ -1043,12 +1043,9 @@ static __inline void m_align(struct mbuf *m, int len) { -#ifdef INVARIANTS - const char *msg = "%s: not a virgin mbuf"; -#endif int adjust; - KASSERT(m->m_data == M_START(m), (msg, __func__)); + KASSERT(m->m_data == M_START(m), ("%s: not a virgin mbuf", __func__)); adjust = M_SIZE(m) - len; m->m_data += adjust &~ (sizeof(long)-1); Index: sys/sys/systm.h =================================================================== --- sys/sys/systm.h +++ sys/sys/systm.h @@ -98,15 +98,26 @@ #endif #endif -#ifdef INVARIANTS /* The option is always available */ -#define KASSERT(exp,msg) do { \ +#ifdef INVARIANTS +#define _KASSERT_ESC(...) __VA_ARGS__ +#define _CAR_(first, ...) first +#define _CAR(args) _CAR_(args) +#define _CDR_(first, ...) , ##__VA_ARGS__ +#define _CDR(args) _CDR_(args) + +#define _KASSERT(fmt, ...) \ + kassert_panic("%s: " fmt, __VA_ARGS__) + +#define KASSERT(exp, msg) do { \ if (__predict_false(!(exp))) \ - kassert_panic msg; \ + _KASSERT(_CAR(_KASSERT_ESC msg), __func__ \ + _CDR(_KASSERT_ESC msg)); \ } while (0) #define VNASSERT(exp, vp, msg) do { \ if (__predict_false(!(exp))) { \ vn_printf(vp, "VNASSERT failed\n"); \ - kassert_panic msg; \ + _KASSERT(_CAR(_KASSERT_ESC msg), __func__ \ + _CDR(_KASSERT_ESC msg)); \ } \ } while (0) #else