Index: uipc_mbuf.c =================================================================== RCS file: /cvs/src/sys/kern/uipc_mbuf.c,v retrieving revision 1.196 diff -u -p -r1.196 uipc_mbuf.c --- uipc_mbuf.c 3 Oct 2014 01:11:17 -0000 1.196 +++ uipc_mbuf.c 3 Oct 2014 01:28:55 -0000 @@ -344,14 +344,18 @@ m_free(struct mbuf *m) void m_extref(struct mbuf *o, struct mbuf *n) { + int refs = MCLISREFERENCED(o); + n->m_flags |= o->m_flags & (M_EXT|M_EXTWR); - mtx_enter(&m_extref_mtx); + if (refs) + mtx_enter(&m_extref_mtx); n->m_ext.ext_nextref = o->m_ext.ext_nextref; n->m_ext.ext_prevref = o; o->m_ext.ext_nextref = n; n->m_ext.ext_nextref->m_ext.ext_prevref = n; - mtx_leave(&m_extref_mtx); + if (refs) + mtx_leave(&m_extref_mtx); MCLREFDEBUGN((n), __FILE__, __LINE__); }