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