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