netdev
[Top] [All Lists]

Re: 2.6.7-rc3: unregister_netdevice: waiting for tun0 to become free. Us

To: "David S. Miller" <davem@xxxxxxxxxx>
Subject: Re: 2.6.7-rc3: unregister_netdevice: waiting for tun0 to become free. Usage count = 1
From: Alexey Kuznetsov <kuznet@xxxxxxxxxxxxx>
Date: Thu, 17 Jun 2004 00:37:48 +0400
Cc: herbert@xxxxxxxxxxxxxxxxxxx, schwab@xxxxxxx, netdev@xxxxxxxxxxx, yoshfuji@xxxxxxxxxxxxxx
In-reply-to: <20040616130950.6aadde3c.davem@xxxxxxxxxx>
References: <E1BZeW1-0008Ny-00@xxxxxxxxxxxxxxxxxxxxxxxx> <20040613234142.GA32329@xxxxxxxxxxxxxxxxxxx> <20040613183622.3a814506.davem@xxxxxxxxxx> <20040614015013.GA11048@xxxxxxxxxxxxxxxxxxx> <20040613210725.70dbd016.davem@xxxxxxxxxx> <20040614042216.GA28669@xxxxxxxxxxxxxxxxxxx> <20040614102858.GA12343@xxxxxxxxxxxxxxxxxxx> <20040614124402.GA28519@xxxxxxxxxxxxxxxxxxx> <20040616193731.GB29781@xxxxxxxxxxxxx> <20040616130950.6aadde3c.davem@xxxxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mutt/1.5.6i
Hello!

> > bug. It makes sense to think about waiting for at least one quiescent
> > state after detaching the stale device from dst and real dev_put() it.
> > Reference to RCU is not occasional, the job looks natural for it.
> 
> It seems a simple synchronize_kernel() would clear all the
> crap no?

Sort of. I think it should happen after killing reference to dst->dev:

+                       dst->dev = &loopback_dev;
+                       dev_hold(&loopback_dev);


but before dropping reference to dev:

+                       dev_put(dev);


So, I think it should look like:

                dst->dev = &loopback_dev;
                dev_hold(&loopback_dev);
+               synchronize_kernel();
                dev_put(dev);

(sorry, I still do not have Herbert's patch pulled)

Alexey

<Prev in Thread] Current Thread [Next in Thread>