All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrick McHardy <kaber@trash.net>
To: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Linux Netdev List <netdev@vger.kernel.org>
Subject: Re: IPv4/IPv6 sysctl unregistration deadlock
Date: Wed, 25 Feb 2009 08:18:47 +0100	[thread overview]
Message-ID: <49A4F0D7.20304@trash.net> (raw)
In-Reply-To: <49A4E3F8.4050406@trash.net>

Patrick McHardy wrote:
> Herbert Xu wrote:
>> On Wed, Feb 25, 2009 at 06:23:33AM +0100, Patrick McHardy wrote:
>>> An easy fix would be to keep track of whether sysctl unregistration
>>> is in progress in IPv4/IPv6 and ignore new requests from that point
>>> on. Its not very elegant though, so I was wondering whether anyone
>>> has a better suggestion.
>>
>> We could make the unregistration asynchronous and invoke a callback
>> when it's done.  Then we can simply hold a net_device refcount and
>> relinquish it in the callback
> 
> That sounds simple enough. I'll see if I can come up with a patch, thanks.

Unfortunately its more complicated than I thought because of
device renames, where the sysctl pointer is reused after
unregistration and the rename/unregistration/re-registration
should be atomic. Deferring unregistration means we can't perform
the new registration immediately unless we allow multiple
registrations for a single device to be active simulaneously,
which introduces a whole new set of problems.

Simply ignoring the request during unregistration doesn't seem
so bad after all, the main problem is that it intoduces a different
race on renames where a write to the "forwarding" file returns
success, but the change doesn't take effect. We could return
-ENOENT, but that seems a bit strange after open() returned success.
Maybe -EBUSY, although I would prefer to make this transparent
to userspace.

Another alternative would be to simply not take the RTNL in
the sysctl handler since we're already taking dev_base_lock
before performing any forwaring changes. But in case of IPv4
we need it for disabling LRO.

I think I'm stuck. Will rethink it after some coffee :)


  reply	other threads:[~2009-02-25  7:18 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-25  5:23 IPv4/IPv6 sysctl unregistration deadlock Patrick McHardy
2009-02-25  6:19 ` Herbert Xu
2009-02-25  6:23   ` Patrick McHardy
2009-02-25  7:18     ` Patrick McHardy [this message]
2009-02-25  8:43       ` Herbert Xu
2009-02-26  6:06         ` Eric W. Biederman
2009-02-26  6:10         ` Eric W. Biederman
2009-02-26  6:22           ` Herbert Xu
2009-02-26  7:18             ` Eric W. Biederman
2009-02-26 16:49               ` Stephen Hemminger
2009-02-26 19:01                 ` Eric W. Biederman
2009-02-26 20:24                   ` Stephen Hemminger
2009-02-27  0:59                 ` Herbert Xu
2009-02-27  1:25                   ` Stephen Hemminger
2009-02-27 18:26                 ` Ben Greear
2009-02-27 18:38                   ` Stephen Hemminger
2009-03-02 11:07                     ` Patrick McHardy
2009-03-02 11:21                       ` Patrick McHardy
2009-03-02 22:11                     ` Ben Greear
2009-03-02 22:20                       ` Patrick McHardy
2009-03-02 22:47                         ` David Miller
2009-03-02 23:03                           ` Patrick McHardy
2009-03-03  8:48                             ` David Miller
2009-03-08  3:36                               ` Eric W. Biederman
2009-02-26 16:55       ` Stephen Hemminger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=49A4F0D7.20304@trash.net \
    --to=kaber@trash.net \
    --cc=herbert@gondor.apana.org.au \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.