From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Dumazet Subject: Re: RTNL: assertion failed at net/core/dev.c (3961) Date: Thu, 30 Jul 2009 11:08:26 +0200 Message-ID: <4A71630A.9080105@gmail.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: netdev@vger.kernel.org, Jiri Pirko To: Meelis Roos Return-path: Received: from gw1.cosmosbay.com ([212.99.114.194]:38960 "EHLO gw1.cosmosbay.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750931AbZG3JIq (ORCPT ); Thu, 30 Jul 2009 05:08:46 -0400 In-Reply-To: Sender: netdev-owner@vger.kernel.org List-ID: Meelis Roos a =E9crit : > I'm running 2.6.31-rc4 on an i386 pc and got these two similar=20 > but different in cause assertion failures on boot. Seems to be=20 > repeatable. I saw similar messages on a kernel around -rc3 but it had= =20 > SIT troubles so I did not test more earlier rc-s. >=20 > This seems to be VLAN+IPv6 related, so some more info on the=20 > configurartion: >=20 > eth0 is plain ethernet, internal LAN, IPv6 address autoconfigured fro= m=20 > external 6to4 address. >=20 > eth1 is ethernet, external interface. Dynamic IPv4, 6to4 tunnel is=20 > created automatically from it. Only link-local IPv6 on this=20 > interface. This is untagged, but it also carries VLAN 4 tagged. >=20 > eth1.4 is the VLAN on eth1 that carries iptv. Dynamic IPv4, only=20 > link-local IPv6. >=20 > eth2 is plain internal LAN, like eth0 - static IPv4, IPv6 from 6to4. >=20 > tun6to4 is sti tunnel for 6to4, cofigured from eth1's IP. >=20 > eth0 and eth1 are 8139too, eth2 is uli526x. >=20 > RTNL: assertion failed at net/core/dev.c (3961) > Pid: 0, comm: swapper Not tainted 2.6.31-rc4 #327 > Call Trace: > [] ? printk+0x1d/0x32 > [] dev_unicast_sync+0x3b/0xfe > [] vlan_dev_set_rx_mode+0x2f/0x45 [8021q] > [] __dev_set_rx_mode+0x88/0x9e > [] dev_mc_add+0x52/0x7c > [] igmp6_group_added+0x5e/0x160 [ipv6] > [] ? fib6_clean_node+0x0/0x9f [ipv6] > [] ipv6_dev_mc_inc+0x2b9/0x2dc [ipv6] > [] addrconf_join_solict+0x43/0x56 [ipv6] > [] ipv6_dev_ac_inc+0x15c/0x1ab [ipv6] > [] addrconf_join_anycast+0x82/0x9b [ipv6] > [] __ipv6_ifa_notify+0xd6/0x153 [ipv6] > [] ? addrconf_dad_timer+0x0/0x120 [ipv6] > [] ipv6_ifa_notify+0x31/0x4c [ipv6] > [] addrconf_dad_completed+0x26/0xb7 [ipv6] > [] addrconf_dad_timer+0x83/0x120 [ipv6] > [] ? garp_join_timer+0x0/0x79 [garp] > [] ? garp_join_timer+0x63/0x79 [garp] > [] run_timer_softirq+0x152/0x1ca > [] __do_softirq+0x69/0xe6 > [] ? __do_softirq+0x0/0xe6 > [] ? irq_exit+0x36/0x7b > [] ? smp_apic_timer_interrupt+0x70/0x8c > [] ? apic_timer_interrupt+0x31/0x38 > [] ? default_idle+0x36/0x5c > [] ? cpu_idle+0x72/0x9f > [] ? rest_init+0x74/0x87 > [] ? start_kernel+0x278/0x28e > [] ? i386_start_kernel+0x40/0x56 > ADDRCONF(NETDEV_UP): eth2: link is not ready > powernow-k8: Found 1 AMD Athlon(tm) 64 Processor 3000+ processors (1 = cpu=20 > cores) (version 2.20.00) > powernow-k8: 0 : fid 0xa (1800 MHz), vid 0x6 > powernow-k8: 1 : fid 0x2 (1000 MHz), vid 0x12 > Marking TSC unstable due to cpufreq changes > RTNL: assertion failed at net/core/dev.c (3961) > Pid: 2744, comm: avahi-daemon Not tainted 2.6.31-rc4 #327 > Call Trace: > [] ? printk+0x1d/0x32 > [] dev_unicast_sync+0x3b/0xfe > [] vlan_dev_set_rx_mode+0x2f/0x45 [8021q] > [] __dev_set_rx_mode+0x88/0x9e > [] dev_mc_add+0x52/0x7c > [] igmp6_group_added+0x5e/0x160 [ipv6] > [] ? sock_alloc_send_pskb+0x9c/0x267 > [] ipv6_dev_mc_inc+0x2b9/0x2dc [ipv6] > [] ipv6_sock_mc_join+0x15d/0x1ce [ipv6] > [] do_ipv6_setsockopt+0x8a7/0xc2e [ipv6] > [] ? sock_recvmsg+0xdf/0x108 > [] ? sock_sendmsg+0xd8/0x100 > [] ? autoremove_wake_function+0x0/0x54 > [] ? file_update_time+0x9e/0xd0 > [] ? sys_sendto+0x10d/0x146 > [] ipv6_setsockopt+0x53/0xb0 [ipv6] > [] udpv6_setsockopt+0x4c/0x67 [ipv6] > [] sock_common_setsockopt+0x22/0x38 > [] sys_setsockopt+0x79/0xa8 > [] sys_socketcall+0x129/0x18a > [] sysenter_do_call+0x12/0x26 >=20 >=20 Thanks for your detailed report Meelis Seems because of following commit. So assumption that dev_unicast_sync() is always called with RTNL is cur= rently false. commit ccffad25b5136958d4769ed6de5e87992dd9c65c Author: Jiri Pirko Date: Fri May 22 23:22:17 2009 +0000 net: convert unicast addr list This patch converts unicast address list to standard list_head usin= g previously introduced struct netdev_hw_addr. It also relaxes the locking. Original spinlock (still used for multicast addresses) is = not needed and is no longer used for a protection of this list. All reading and writing takes place under rtnl (with no changes). I also removed a possibility to specify the length of the address while adding or deleting unicast address. It's always dev->addr_len= =2E The convertion touched especially e1000 and ixgbe codes when the change is not so trivial. Signed-off-by: Jiri Pirko