Subject: Re: Lots of "BUG eth1 code -5 qlen 0" messages in 2.6.24

From: Erik Mouw <[email-masked]>
Date: Tue, 29 Jan 2008 22:45:56 +0100

On Tue, Jan 29, 2008 at 03:57:23PM -0500, jamal wrote:
> On Tue, 2008-29-01 at 11:57 -0800, Waskiewicz Jr, Peter P wrote:
> > > I've just started to use 2.6.24 on my home firewall (before 
> > > it was running 2.6.24-rc2 for about 65 days) and I noticed a 
> > > couple of error messages I've never seen before:
> > > 
> > > Jan 29 07:50:54 gateway kernel: BUG eth1 code -5 qlen 0 Jan 
> > > 29 08:28:30 gateway kernel: BUG eth1 code -5 qlen 0 Jan 29 
> > > 08:57:30 gateway kernel: BUG eth1 code -5 qlen 0 Jan 29 
> > > 09:44:04 gateway kernel: BUG eth1 code -5 qlen 0 Jan 29 
> > > 10:01:35 gateway kernel: BUG eth1 code -5 qlen 0 Jan 29 
> > > 10:01:35 gateway last message repeated 2 times Jan 29 
> > > 10:16:48 gateway kernel: BUG eth1 code -5 qlen 0 Jan 29 
> > > 10:16:48 gateway last message repeated 2 times Jan 29 
> > > 10:45:48 gateway kernel: BUG eth1 code -5 qlen 0 Jan 29 
> > > 10:45:48 gateway last message repeated 2 times Jan 29 
> > > 11:10:01 gateway kernel: BUG eth1 code -5 qlen 0 Jan 29 
> > > 11:10:02 gateway last message repeated 9 times
> > > 
> > > The message seems to be coming from the qdisc_restart() in 
> > > net/sched/sch_generic.c which was changed with commit 
> > > 5f1a485d5905aa641f33009019b3699076666a4c .
> > > 
> > > The NIC is an IBM EtherJet cardbus card using the xircom_cb driver:
> > 
> > Are you using any specific qdisc, or just the default pfifo_fast?  Have
> > you done any specific tuning on your qdisc as well?  The default qlen
> > seems to have been changed.
> 
> The driver seems buggy. Make it return NETDEV_TX_BUSY instead of -EIO
> in xircom_start_xmit() and the messages will go away.

Like this?

diff --git a/drivers/net/tulip/xircom_cb.c b/drivers/net/tulip/xircom_cb.c
index 8fc7274..6b93d01 100644
--- a/drivers/net/tulip/xircom_cb.c
+++ b/drivers/net/tulip/xircom_cb.c
@@ -441,7 +441,7 @@ static int xircom_start_xmit(struct sk_buff *skb, struct net_device *dev)
 	spin_unlock_irqrestore(&card->lock,flags);
 	trigger_transmit(card);
 
-	return -EIO;
+	return NETDEV_TX_BUSY;
 }

It compiles without errors. I'm sorry I can't test it right now, I'm
100 km away from the machine and the same driver is used for both NICs
so if I goof up I won't be able to fix the it. I'll test it this friday
and let you know.

Erik

-- 
They're all fools. Don't worry. Darwin may be slow, but he'll
eventually get them. -- Matthew Lammers in alt.sysadmin.recovery