PERFORCE change 65116 for review

Robert Watson rwatson at FreeBSD.org
Sun Nov 14 12:36:22 PST 2004


http://perforce.freebsd.org/chv.cgi?CH=65116

Change 65116 by rwatson at rwatson_paprika on 2004/11/14 20:35:38

	Integ if_em "out of mbuf" fix for vlan scenario.

Affected files ...

.. //depot/projects/netperf_socket/sys/dev/em/if_em.c#14 integrate

Differences ...

==== //depot/projects/netperf_socket/sys/dev/em/if_em.c#14 (text+ko) ====

@@ -31,7 +31,7 @@
 
 ***************************************************************************/
 
-/*$FreeBSD: src/sys/dev/em/if_em.c,v 1.53 2004/11/12 11:03:07 rwatson Exp $*/
+/*$FreeBSD: src/sys/dev/em/if_em.c,v 1.54 2004/11/14 20:20:28 rwatson Exp $*/
 
 #include <dev/em/if_em.h>
 
@@ -598,8 +598,14 @@
                 IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head);
                 
                 if (m_head == NULL) break;
-                        
+
+		/*
+		 * em_encap() can modify our pointer, and or make it NULL on
+		 * failure.  In that event, we can't requeue.
+		 */
 		if (em_encap(adapter, &m_head)) { 
+			if (m_head == NULL)
+				break;
 			ifp->if_flags |= IFF_OACTIVE;
 			IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
 			break;
@@ -1248,15 +1254,24 @@
 		struct ether_header eh;
 
 		m_head = m_pullup(m_head, sizeof(eh));
-		if (m_head == NULL)
+		if (m_head == NULL) {
+			*m_headp = NULL;
+                	bus_dmamap_destroy(adapter->txtag, q.map);
 			return (ENOBUFS);
+		}
 		eh = *mtod(m_head, struct ether_header *);
 		M_PREPEND(m_head, sizeof(*evl), M_DONTWAIT);
-		if (m_head == NULL)
+		if (m_head == NULL) {
+			*m_headp = NULL;
+                	bus_dmamap_destroy(adapter->txtag, q.map);
 			return (ENOBUFS);
+		}
 		m_head = m_pullup(m_head, sizeof(*evl));
-		if (m_head == NULL)
+		if (m_head == NULL) {
+			*m_headp = NULL;
+                	bus_dmamap_destroy(adapter->txtag, q.map);
 			return (ENOBUFS);
+		}
 		evl = mtod(m_head, struct ether_vlan_header *);
 		bcopy(&eh, evl, sizeof(*evl));
 		evl->evl_proto = evl->evl_encap_proto;


More information about the p4-projects mailing list