ewrk3.c: don't reference skb after passing it to netif_rx
PATCH 1/1 ewrk3.c: don't reference skb after passing it to netif_rx
hey, look at this! 8)
Em Mon, Feb 26, 2001 at 08:33:59PM -0300, Arnaldo Carvalho de Melo escreveu:
Hi,
I've just read davem's post at netdev about the brokeness of
referencing skbs after passing it to netif_rx, so please consider applying this patch. Ah, this was just added to the Janitor's TODO list at
http://bazar.conectiva.com.br/~acme/TODO and I'm doing a quick audit in the net drivers searching for this, maybe some more patches will follow.
- Arnaldo
drivers/net/ewrk3.c +13 -13
@@ -997,19 +997,6 @@isa_memcpy_fromio (p, buf, pkt_len); } -/* -** Notify the upper protocol layers that there is another -** packet to handle -*/ - skb->protocol =eth_type_trans (skb, dev); -netif_rx (skb); - -/* -** Update stats -*/ - dev->last_rx = jiffies; - lp->stats.rx_packets++; - lp->stats.rx_bytes += pkt_len;for (i =1 ; i <EWRK3_PKT_STAT_SZ -1 ; i++) {if (pkt_len < i *EWRK3_PKT_BIN_SZ ) { lp->pktStats.bins[i]++;
@@ -1031,6 +1018,19 @@if (lp->pktStats.bins[0 ] ==0 ) {/* Reset counters */ memset (&lp->pktStats,0 ,sizeof (lp->pktStats)); } +/* +** Notify the upper protocol layers that there is another +** packet to handle +*/ + skb->protocol =eth_type_trans (skb, dev); +netif_rx (skb); + +/* +** Update stats +*/ + dev->last_rx = jiffies; + lp->stats.rx_packets++; + lp->stats.rx_bytes += pkt_len; }else {printk ("%s: Insufficient memory; nuking packet.\n" , dev->name); lp->stats.rx_dropped++;/* Really, deferred. */