2004-03-04 02:08:39

by Arkadiusz Miskiewicz

[permalink] [raw]
Subject: ip a flush problem on 2.6 kernels (fine on 2.4 kernels)

The problem is that

ip a a 192.168.0.1/24 dev eth0
ip link set eth0 down
ip a flush dev eth0

Here on my vanilla 2.6.2 it locks eating CPU - it does netlink
communication over and over. This ,,hang'' doesn't happen when
interface is in UP state. Also doesn't happen on 2.4 kernels.

I've tried it on different 2.6 kernels (one from fedora, one from PLD) with
different versions of iproute2 (usually latest). Friend tried it also with
iproute2 from slackware - same result.

Same happens when using lo interface instead of ethX.

More description in RH bugzilla:
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=116982

ps. doing that on Broadcom Corporation BCM4401 100Base-T ethX interface (using
b44 driver) causes lock (but sysrq works) on 2.4.25 kernel. Would be nice if
someone with that hardware could verify this.
--
Arkadiusz Mi?kiewicz CS at FoE, Wroclaw University of Technology
arekm.pld-linux.org, 1024/3DB19BBD, JID: arekm.jabber.org, PLD/Linux


2004-03-04 13:13:28

by Andi Kleen

[permalink] [raw]
Subject: Re: ip a flush problem on 2.6 kernels (fine on 2.4 kernels)

On Thu, 4 Mar 2004 03:08:15 +0100
Arkadiusz Miskiewicz <[email protected]> wrote:

> The problem is that
>
> ip a a 192.168.0.1/24 dev eth0
> ip link set eth0 down
> ip a flush dev eth0
>
> Here on my vanilla 2.6.2 it locks eating CPU - it does netlink
> communication over and over. This ,,hang'' doesn't happen when
> interface is in UP state. Also doesn't happen on 2.4 kernels.

I fixed it with this patch for iproute2 here. It's not clear to me at
all how it ever worked before. The loop seems to be just wrong.

-Andi

diff -u iproute2/ip/ipaddress.c~ iproute2/ip/ipaddress.c
--- iproute2/ip/ipaddress.c~ 2004-03-07 20:54:52.000000000 +0100
+++ iproute2/ip/ipaddress.c 2004-03-07 21:02:12.000000000 +0100
@@ -623,6 +623,9 @@
fflush(stdout);
return 0;
}
+#if 1
+ break;
+#else
round++;
if (flush_update() < 0)
exit(1);
@@ -630,6 +633,7 @@
printf("\n*** Round %d, deleting %d addresses ***\n", round, filter.flushed);
fflush(stdout);
}
+#endif
}
}

2004-03-10 19:42:53

by Denis Vlasenko

[permalink] [raw]
Subject: Re: ip a flush problem on 2.6 kernels (fine on 2.4 kernels)

On Thursday 04 March 2004 15:13, Andi Kleen wrote:
> On Thu, 4 Mar 2004 03:08:15 +0100
>
> Arkadiusz Miskiewicz <[email protected]> wrote:
> > The problem is that
> >
> > ip a a 192.168.0.1/24 dev eth0
> > ip link set eth0 down
> > ip a flush dev eth0
> >
> > Here on my vanilla 2.6.2 it locks eating CPU - it does netlink
> > communication over and over. This ,,hang'' doesn't happen when
> > interface is in UP state. Also doesn't happen on 2.4 kernels.
>
> I fixed it with this patch for iproute2 here. It's not clear to me at
> all how it ever worked before. The loop seems to be just wrong.

Does iproute2 have a homepage again? Where?
--
vda