svn commit: r360577 - in head/sys: kern sys
Gleb Smirnoff
glebius at FreeBSD.org
Sun May 3 00:03:39 UTC 2020
Author: glebius
Date: Sun May 3 00:03:39 2020
New Revision: 360577
URL: https://svnweb.freebsd.org/changeset/base/360577
Log:
Make MBUF_EXT_PGS_ASSERT_SANITY() a macro, so that it prints file:line.
While here, stop using struct mbuf_ext_pgs.
Reviewed by: gallatin
Differential Revision: https://reviews.freebsd.org/D24598
Modified:
head/sys/kern/kern_mbuf.c
head/sys/sys/mbuf.h
Modified: head/sys/kern/kern_mbuf.c
==============================================================================
--- head/sys/kern/kern_mbuf.c Sat May 2 23:58:20 2020 (r360576)
+++ head/sys/kern/kern_mbuf.c Sun May 3 00:03:39 2020 (r360577)
@@ -1145,40 +1145,6 @@ mb_alloc_ext_pgs(int how, m_ext_free_t ext_free)
return (m);
}
-#ifdef INVARIANT_SUPPORT
-void
-mb_ext_pgs_check(struct mbuf *m)
-{
- struct mbuf_ext_pgs *ext_pgs = &m->m_ext_pgs;
-
- /*
- * NB: This expects a non-empty buffer (npgs > 0 and
- * last_pg_len > 0).
- */
- KASSERT(ext_pgs->npgs > 0,
- ("ext_pgs with no valid pages: %p", ext_pgs));
- KASSERT(ext_pgs->npgs <= nitems(m->m_epg_pa),
- ("ext_pgs with too many pages: %p", ext_pgs));
- KASSERT(ext_pgs->nrdy <= ext_pgs->npgs,
- ("ext_pgs with too many ready pages: %p", ext_pgs));
- KASSERT(ext_pgs->first_pg_off < PAGE_SIZE,
- ("ext_pgs with too large page offset: %p", ext_pgs));
- KASSERT(ext_pgs->last_pg_len > 0,
- ("ext_pgs with zero last page length: %p", ext_pgs));
- KASSERT(ext_pgs->last_pg_len <= PAGE_SIZE,
- ("ext_pgs with too large last page length: %p", ext_pgs));
- if (ext_pgs->npgs == 1) {
- KASSERT(ext_pgs->first_pg_off + ext_pgs->last_pg_len <=
- PAGE_SIZE, ("ext_pgs with single page too large: %p",
- ext_pgs));
- }
- KASSERT(ext_pgs->hdr_len <= sizeof(m->m_epg_hdr),
- ("ext_pgs with too large header length: %p", ext_pgs));
- KASSERT(ext_pgs->trail_len <= sizeof(m->m_epg_trail),
- ("ext_pgs with too large header length: %p", ext_pgs));
-}
-#endif
-
/*
* Clean up after mbufs with M_EXT storage attached to them if the
* reference count hits 1.
Modified: head/sys/sys/mbuf.h
==============================================================================
--- head/sys/sys/mbuf.h Sat May 2 23:58:20 2020 (r360576)
+++ head/sys/sys/mbuf.h Sun May 3 00:03:39 2020 (r360577)
@@ -401,13 +401,36 @@ m_epg_pagelen(const struct mbuf *m, int pidx, int pgof
}
}
-#ifdef INVARIANT_SUPPORT
-void mb_ext_pgs_check(struct mbuf *m);
-#endif
#ifdef INVARIANTS
-#define MBUF_EXT_PGS_ASSERT_SANITY(m) mb_ext_pgs_check((m))
+#define MCHECK(ex, msg) KASSERT((ex), \
+ ("Multi page mbuf %p with " #msg " at %s:%d", \
+ m, __FILE__, __LINE__))
+/*
+ * NB: This expects a non-empty buffer (npgs > 0 and
+ * last_pg_len > 0).
+ */
+#define MBUF_EXT_PGS_ASSERT_SANITY(m) do { \
+ MCHECK(m->m_ext_pgs.npgs > 0, "no valid pages"); \
+ MCHECK(m->m_ext_pgs.npgs <= nitems(m->m_epg_pa), \
+ "too many pages"); \
+ MCHECK(m->m_ext_pgs.nrdy <= m->m_ext_pgs.npgs, \
+ "too many ready pages"); \
+ MCHECK(m->m_ext_pgs.first_pg_off < PAGE_SIZE, \
+ "too large page offset"); \
+ MCHECK(m->m_ext_pgs.last_pg_len > 0, "zero last page length"); \
+ MCHECK(m->m_ext_pgs.last_pg_len <= PAGE_SIZE, \
+ "too large last page length"); \
+ if (m->m_ext_pgs.npgs == 1) \
+ MCHECK(m->m_ext_pgs.first_pg_off + \
+ m->m_ext_pgs.last_pg_len <= PAGE_SIZE, \
+ "single page too large"); \
+ MCHECK(m->m_ext_pgs.hdr_len <= sizeof(m->m_epg_hdr), \
+ "too large header length"); \
+ MCHECK(m->m_ext_pgs.trail_len <= sizeof(m->m_epg_trail), \
+ "too large header length"); \
+} while (0)
#else
-#define MBUF_EXT_PGS_ASSERT_SANITY(m)
+#define MBUF_EXT_PGS_ASSERT_SANITY(m) do {} while (0);
#endif
#endif
More information about the svn-src-all
mailing list