Date: Tue, 17 May 2016 23:15:17 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r300097 - head/sys/kern Message-ID: <201605172315.u4HNFH1M028023@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: glebius Date: Tue May 17 23:15:16 2016 New Revision: 300097 URL: https://svnweb.freebsd.org/changeset/base/300097 Log: Add a comment and KASSERT that a M_NOFREE mbuf has always EXT_EXTREF ext. Submitted by: kmacy Modified: head/sys/kern/kern_mbuf.c Modified: head/sys/kern/kern_mbuf.c ============================================================================== --- head/sys/kern/kern_mbuf.c Tue May 17 23:14:17 2016 (r300096) +++ head/sys/kern/kern_mbuf.c Tue May 17 23:15:16 2016 (r300097) @@ -638,9 +638,16 @@ mb_free_ext(struct mbuf *m) * Check if the header is embedded in the cluster. It is * important that we can't touch any of the mbuf fields * after we have freed the external storage, since mbuf - * could have been embedded in it. + * could have been embedded in it. For now, the mbufs + * embedded into the cluster are always of type EXT_EXTREF, + * and for this type we won't free the mref. */ - freembuf = (m->m_flags & M_NOFREE) ? 0 : 1; + if (m->m_flags & M_NOFREE) { + freembuf = 0; + KASSERT(m->m_ext.ext_type == EXT_EXTREF, + ("%s: no-free mbuf %p has wrong type", __func__, m)); + } else + freembuf = 1; /* Free attached storage if this mbuf is the only reference to it. */ if (*refcnt == 1 || atomic_fetchadd_int(refcnt, -1) == 1) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201605172315.u4HNFH1M028023>