repeating crashes with 8.1

Bjoern A. Zeeb bzeeb-lists at lists.zabbadoz.net
Tue Nov 23 18:50:08 UTC 2010


On Sat, 23 Oct 2010, Bjoern A. Zeeb wrote:

Hi,

just to get this out.  Jack you might want to review and if ok, include
in HEAD before we get feedback maybe.  To my understanding worst it
would be overhead but not really harm.

>>> >>>>> Oct 22 02:06:02 i4 kernel: em1: discard frame w/o packet header
>>> >>>>> Oct 22 02:06:10 i4 kernel: em2: discard frame w/o packet header

The following is a random-guess by code reading that hasn't been tested
yet but believed to be correct; also ran it by gnn.

http://people.freebsd.org/~bz/20101122-03-em-pkthdr.diff

--- sys/dev/e1000/if_em.c.orig	2010-11-01 20:57:53.000000000 -0400
+++ sys/dev/e1000/if_em.c	2010-11-16 01:28:00.000000000 -0500
@@ -3754,8 +3769,13 @@ em_refresh_mbufs(struct rx_ring *rxr, in
  		** they can only be due to an error
  		** and are to be reused.
  		*/
-		if (rxbuf->m_head != NULL)
+		if (rxbuf->m_head != NULL) {
+			rxbuf->m_head->m_len = rxbuf->m_head->m_pkthdr.len = adapter->rx_mbuf_sz;
+			rxbuf->m_head->m_flags |= M_PKTHDR;
+			rxbuf->m_head->m_data = rxbuf->m_head->m_ext.ext_buf;
+			rxbuf->m_head->m_next = NULL;
  			goto reuse;
+		}
  		m = m_getjcl(M_DONTWAIT, MT_DATA,
  		    M_PKTHDR, adapter->rx_mbuf_sz);
  		/*

I am not sure if igb and the others need a similar fix.  Haven't
looked in detail. gnn mentioned similarities though good ones imho
in there.

If you were able to reproduce the pkthdr issue it would be great to
test it.  If you always paniced it with IPv6 you may also want to test
the applicable patch (use the direct URLs mentioned) from the very end of
http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/148857
to make sure you are not running into that race.

/bz

-- 
Bjoern A. Zeeb                              Welcome a new stage of life.
         <ks> Going to jail sucks -- <bz> All my daemons like it!
   http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails.html


More information about the freebsd-stable mailing list