[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <Pine.LNX.4.64.0705101247240.12758@obsidian.arastra.com>
Date: Thu, 10 May 2007 13:00:24 -0700 (PDT)
From: James Lingard <jchl@...stra.com>
To: netdev@...r.kernel.org
Subject: Re: unregister_netdevice of tap interface blocks for up to 30 secs
when ipv6 module loaded
On Wed, 9 May 2007, James Lingard wrote:
> If the ipv6 module is loaded, then destroying a tap interface that has
> recently been disabled will cause close to block (in unregister_netdevice)
> until precisely 30 seconds have elapsed since the interface was disabled.
I patched netdevice.h to dump a stack trace on calls to dev_hold and
dev_put, and it appears that this bug is related to IPv6 neighbour
discovery. The three references to the interface are finally released
during a call to ndisc_dst_gc, at the following locations:
neigh_destroy+0x145/0x183
dst_destroy+0x56/0xf5
ndisc_dst_gc+0x39/0x67 [ipv6]
fib6_run_gc+0x6b/0xbb [ipv6]
run_timer_softirq+0x102/0x166
__do_softirq+0x5e/0xca
do_softirq+0x5f/0xb6
in6_dev_finish_destroy+0x9f/0xd9 [ipv6]
ip6_dst_destroy+0x29/0x2b [ipv6]
dst_destroy+0x6d/0xf5
ndisc_dst_gc+0x39/0x67 [ipv6]
fib6_run_gc+0x6b/0xbb [ipv6]
run_timer_softirq+0x102/0x166
__do_softirq+0x5e/0xca
do_softirq+0x5f/0xb6
dst_destroy+0xb2/0xf5
ndisc_dst_gc+0x39/0x67 [ipv6]
fib6_run_gc+0x6b/0xbb [ipv6]
run_timer_softirq+0x102/0x166
__do_softirq+0x5e/0xca
do_softirq+0x5f/0xb6
The complete relevant excerpt from /var/log/messages, showing the times
and locations of all calls to dev_hold, dev_put and unregister_netdevice
for this interface (corresponding to the execution of the Python script I
attached in my previous email), is attached.
James.
View attachment "messages" of type "TEXT/PLAIN" (23427 bytes)
Powered by blists - more mailing lists