On Tue, Feb 27, 2001 at 12:52:32AM +0000, Andrew Morton wrote:
> Date: Tue, 27 Feb 2001 00:52:32 +0000
> From: Andrew Morton <andrewm@xxxxxxxxxx>
> To: "David S. Miller" <davem@xxxxxxxxxx>
> CC: Ralf Baechle <ralf@xxxxxxxxxxx>, Petr Vandrovec <VANDROVE@xxxxxxxxxx>,
> netdev@xxxxxxxxxxx
> Subject: Re: Failed assertion
>
> "David S. Miller" wrote:
> >
> > Ralf Baechle writes:
> > > No backtrace, the machine did continue as you'd suspect after a print.
> > > The machine is a dual CPU Origin 200 with an IOC3 NIC.
> >
> > What is your current kernel based upon, some older 2.4.x or
> > even 2.3.x variant? Or is it sync'd to current?
>
> Could this be a driver problem? This code:
>
> netif_rx(skb);
>
> ip->rx_skbs[rx_entry] = NULL; /* Poison */
>
> new_skb = ioc3_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC);
> if (!new_skb) {
> /* Ouch, drop packet and just recycle packet
> to keep the ring filled. */
> ip->stats.rx_dropped++;
> new_skb = skb;
> goto next;
> }
>
> looks scary. We've passed an skb to the network stack,
> but we can continue to make it available to the device
> driver at the same time.
>
> I'd suggest a printk() in there, plus perhaps do the
> alloc_skb _before_ the netif_rx(). Don't pass the skb
> to the stack if it is to be recycled.
Now that you point my eyes at it the crime is more than obvious, thanks ...
Ralf
|