svn commit: r185673 - user/kmacy/HEAD_fast_multi_xmit/sys/kern

Kip Macy kmacy at FreeBSD.org
Fri Dec 5 22:08:13 PST 2008


Author: kmacy
Date: Sat Dec  6 06:08:12 2008
New Revision: 185673
URL: http://svn.freebsd.org/changeset/base/185673

Log:
  revert local mbuf change

Modified:
  user/kmacy/HEAD_fast_multi_xmit/sys/kern/uipc_mbuf.c

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/kern/uipc_mbuf.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/kern/uipc_mbuf.c	Sat Dec  6 06:02:26 2008	(r185672)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/kern/uipc_mbuf.c	Sat Dec  6 06:08:12 2008	(r185673)
@@ -213,14 +213,17 @@ m_extadd(struct mbuf *mb, caddr_t buf, u
 void
 mb_free_ext(struct mbuf *m)
 {
-	int mbfree;
+	int skipmbuf;
 	
 	KASSERT((m->m_flags & M_EXT) == M_EXT, ("%s: M_EXT not set", __func__));
 	KASSERT(m->m_ext.ref_cnt != NULL, ("%s: ref_cnt not set", __func__));
 
 
-	mbfree = !(m->m_flags & M_NOFREE);
-
+	/*
+	 * check if the header is embedded in the cluster
+	 */     
+	skipmbuf = (m->m_flags & M_NOFREE);
+	
 	/* Free attached storage if this mbuf is the only reference to it. */
 	if (*(m->m_ext.ref_cnt) == 1 ||
 	    atomic_fetchadd_int(m->m_ext.ref_cnt, -1) == 1) {
@@ -257,21 +260,26 @@ mb_free_ext(struct mbuf *m)
 			    m->m_ext.ext_arg2);
 			break;
 		default:
-			if (m->m_ext.ref_cnt != NULL)
-				uma_zfree(zone_ext_refcnt, __DEVOLATILE(u_int *,
-					m->m_ext.ref_cnt));
-			break;
-
-			
+			KASSERT(m->m_ext.ext_type == 0,
+				("%s: unknown ext_type", __func__));
 		}
 	}
+	if (skipmbuf)
+		return;
 	
 	/*
 	 * Free this mbuf back to the mbuf zone with all m_ext
 	 * information purged.
 	 */
-	if (mbfree)
-		uma_zfree(zone_mbuf, m);
+	m->m_ext.ext_buf = NULL;
+	m->m_ext.ext_free = NULL;
+	m->m_ext.ext_arg1 = NULL;
+	m->m_ext.ext_arg2 = NULL;
+	m->m_ext.ref_cnt = NULL;
+	m->m_ext.ext_size = 0;
+	m->m_ext.ext_type = 0;
+	m->m_flags &= ~M_EXT;
+	uma_zfree(zone_mbuf, m);
 }
 
 /*


More information about the svn-src-user mailing list