Date: Mon, 2 Jun 2003 09:29:13 -0700 (PDT) From: Robert Watson <rwatson@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 32381 for review Message-ID: <200306021629.h52GTDAo066940@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=32381 Change 32381 by rwatson@rwatson_tislabs on 2003/06/02 09:28:57 Integrate change to how mbuf defragmentation occurs in if_fxp; this may resolve a bug involving m_tag chain corruption in the fxp driver, so give it a spin. Affected files ... .. //depot/projects/trustedbsd/base/sys/dev/fxp/if_fxp.c#25 integrate Differences ... ==== //depot/projects/trustedbsd/base/sys/dev/fxp/if_fxp.c#25 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/fxp/if_fxp.c,v 1.180 2003/05/25 05:04:26 truckman Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/fxp/if_fxp.c,v 1.181 2003/06/02 05:16:42 silby Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1396,24 +1396,13 @@ * mbuf chain first. Bail out if we can't get the * new buffers. */ - MGETHDR(mn, M_DONTWAIT, MT_DATA); + mn = m_defrag(mb_head, M_DONTWAIT); if (mn == NULL) { m_freem(mb_head); break; + } else { + mb_head = mn; } - if (mb_head->m_pkthdr.len > MHLEN) { - MCLGET(mn, M_DONTWAIT); - if ((mn->m_flags & M_EXT) == 0) { - m_freem(mn); - m_freem(mb_head); - break; - } - } - m_copydata(mb_head, 0, mb_head->m_pkthdr.len, - mtod(mn, caddr_t)); - mn->m_pkthdr.len = mn->m_len = mb_head->m_pkthdr.len; - m_freem(mb_head); - mb_head = mn; error = bus_dmamap_load_mbuf(sc->fxp_mtag, txp->tx_map, mb_head, fxp_dma_map_txbuf, sc, 0); if (error) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200306021629.h52GTDAo066940>