--- dev/mge/if_mge.c.orig 2013-09-27 15:16:32.000000000 +0200 +++ dev/mge/if_mge.c 2013-09-27 15:19:59.000000000 +0200 @@ -1506,9 +1506,22 @@ if (m0 == NULL) break; + if (m0->m_pkthdr.csum_flags & (CSUM_IP|CSUM_TCP|CSUM_UDP) || + m0->m_flags & M_VLANTAG) { + if (M_WRITABLE(m0) == 0) { + mtmp = m_dup(m0, M_DONTWAIT); + m_freem(m0); + if (mtmp == NULL) + continue; + m0 = mtmp; + } + } + /* The driver support only one DMA fragment. */ + if (m0->m_next != NULL) { mtmp = m_defrag(m0, M_NOWAIT); if (mtmp) m0 = mtmp; + } if (mge_encap(sc, m0)) { IF_PREPEND(&ifp->if_snd, m0);