From: Cong Wang <amwang@redhat.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: netdev@vger.kernel.org, Jiri Pirko <jiri@resnulli.us>,
"David S. Miller" <davem@davemloft.net>
Subject: Re: [Patch net-next v4] netpoll: fix a rtnl lock assertion failure
Date: Thu, 17 Jan 2013 11:30:18 +0800 [thread overview]
Message-ID: <1358393418.3855.3.camel@cr0> (raw)
In-Reply-To: <1358385885.32167.21.camel@edumazet-glaptop>
On Wed, 2013-01-16 at 17:24 -0800, Eric Dumazet wrote:
> On Tue, 2013-01-15 at 17:34 +0800, Cong Wang wrote:
> > From: Cong Wang <amwang@redhat.com>
> >
> > v4: hold rtnl lock for the whole netpoll_setup()
> > v3: remove the comment
> > v2: use RCU read lock
> >
> > This patch fixes the following warning:
> >
> > [ 72.013864] RTNL: assertion failed at net/core/dev.c (4955)
> > [ 72.017758] Pid: 668, comm: netpoll-prep-v6 Not tainted 3.8.0-rc1+ #474
> > [ 72.019582] Call Trace:
> > [ 72.020295] [<ffffffff8176653d>] netdev_master_upper_dev_get+0x35/0x58
> > [ 72.022545] [<ffffffff81784edd>] netpoll_setup+0x61/0x340
> > [ 72.024846] [<ffffffff815d837e>] store_enabled+0x82/0xc3
> > [ 72.027466] [<ffffffff815d7e51>] netconsole_target_attr_store+0x35/0x37
> > [ 72.029348] [<ffffffff811c3479>] configfs_write_file+0xe2/0x10c
> > [ 72.030959] [<ffffffff8115d239>] vfs_write+0xaf/0xf6
> > [ 72.032359] [<ffffffff81978a05>] ? sysret_check+0x22/0x5d
> > [ 72.033824] [<ffffffff8115d453>] sys_write+0x5c/0x84
> > [ 72.035328] [<ffffffff819789d9>] system_call_fastpath+0x16/0x1b
> >
> > In case of other races, hold rtnl lock for the entire netpoll_setup() function.
> >
> > Cc: Eric Dumazet <eric.dumazet@gmail.com>
> > Cc: Jiri Pirko <jiri@resnulli.us>
> > Cc: David S. Miller <davem@davemloft.net>
> > Signed-off-by: Cong Wang <amwang@redhat.com>
> > ---
> > diff --git a/net/core/netpoll.c b/net/core/netpoll.c
>
> ...
>
> > if (np->dev_name)
> > - ndev = dev_get_by_name(&init_net, np->dev_name);
> > + ndev = __dev_get_by_name(&init_net, np->dev_name);
>
> This change brings interesting bugs.
Hmm, I didn't realize __dev_get_by_name() doesn't hold the device, so
just call dev_hold() after this?
diff --git a/net/core/netpoll.c b/net/core/netpoll.c
index a5ad1c1..a9b1004 100644
--- a/net/core/netpoll.c
+++ b/net/core/netpoll.c
@@ -1056,6 +1056,7 @@ int netpoll_setup(struct netpoll *np)
err = -ENODEV;
goto unlock;
}
+ dev_hold(ndev);
if (netdev_master_upper_dev_get(ndev)) {
np_err(np, "%s is a slave device, aborting\n",
np->dev_name);
>
> All the "goto put;" are basically wrong, and the section waiting for the
> carrier and releasing/getting rtnl is buggy.
Either we have to sleep for few seconds with rtnl lock held, or leave as
it is. The original code doesn't hold rtnl lock either.
Thanks!
next prev parent reply other threads:[~2013-01-17 3:52 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-15 9:34 [Patch net-next v4] netpoll: fix a rtnl lock assertion failure Cong Wang
2013-01-16 20:27 ` David Miller
2013-01-17 1:24 ` Eric Dumazet
2013-01-17 3:30 ` Cong Wang [this message]
2013-01-17 3:54 ` David Miller
2013-01-17 4:18 ` Cong Wang
2013-01-17 4:53 ` Eric Dumazet
2013-01-17 3:52 ` David Miller
2013-01-17 4:00 ` Cong Wang
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=1358393418.3855.3.camel@cr0 \
--to=amwang@redhat.com \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=jiri@resnulli.us \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).