From: "David S. Miller" <davem@redhat.com>
To: Stephen Hemminger <shemminger@osdl.org>
Cc: netdev@oss.sgi.com, herbert@gondor.apana.org.au
Subject: Re: [PATCH] Move inetdev/ifa over to RCU
Date: Fri, 13 Aug 2004 09:38:38 -0700 [thread overview]
Message-ID: <20040813093838.6961c0d4.davem@redhat.com> (raw)
In-Reply-To: <20040813090314.448c971d@dell_ss3.pdx.osdl.net>
Thanks guys. This patch should fix both problems.
Herbert, if we check inetdev->dead when trying to grab
a reference it fixes the RCU destroy race you mentioned.
I really don't want to put that ref drop into the
RCU callback as that would kill performance.
# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
# 2004/08/13 09:17:07-07:00 davem@nuts.davemloft.net
# [IPV4]: Fix two bugs in inetdev RCU handling.
#
# - Two missing smp_read_barrier_depends() noticed by
# Stephen Hemminger.
# - Fix RCU inetdev destroy race spotted by Herbert Xu.
# Check in_dev->dead when trying to grab a reference.
#
# Signed-off-by: David S. Miller <davem@redhat.com>
#
# net/ipv4/devinet.c
# 2004/08/13 09:15:41-07:00 davem@nuts.davemloft.net +1 -0
# [IPV4]: Fix two bugs in inetdev RCU handling.
#
# include/linux/inetdevice.h
# 2004/08/13 09:15:41-07:00 davem@nuts.davemloft.net +7 -2
# [IPV4]: Fix two bugs in inetdev RCU handling.
#
diff -Nru a/include/linux/inetdevice.h b/include/linux/inetdevice.h
--- a/include/linux/inetdevice.h 2004-08-13 09:20:01 -07:00
+++ b/include/linux/inetdevice.h 2004-08-13 09:20:01 -07:00
@@ -143,9 +143,14 @@
struct in_device *in_dev;
rcu_read_lock();
+ smp_read_barrier_depends();
in_dev = dev->ip_ptr;
- if (in_dev)
- atomic_inc(&in_dev->refcnt);
+ if (in_dev) {
+ if (in_dev->dead)
+ in_dev = NULL;
+ else
+ atomic_inc(&in_dev->refcnt);
+ }
rcu_read_unlock();
return in_dev;
}
diff -Nru a/net/ipv4/devinet.c b/net/ipv4/devinet.c
--- a/net/ipv4/devinet.c 2004-08-13 09:20:01 -07:00
+++ b/net/ipv4/devinet.c 2004-08-13 09:20:01 -07:00
@@ -210,6 +210,7 @@
int inet_addr_onlink(struct in_device *in_dev, u32 a, u32 b)
{
rcu_read_lock();
+ smp_read_barrier_depends();
for_primary_ifa(in_dev) {
if (inet_ifa_match(a, ifa)) {
if (!b || inet_ifa_match(b, ifa)) {
next prev parent reply other threads:[~2004-08-13 16:38 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-08-12 23:59 [PATCH] Move inetdev/ifa over to RCU David S. Miller
2004-08-13 2:20 ` James Morris
2004-08-13 10:02 ` Herbert Xu
2004-08-13 16:03 ` Stephen Hemminger
2004-08-13 16:38 ` David S. Miller [this message]
2004-08-13 21:56 ` Herbert Xu
2004-08-13 22:19 ` David S. Miller
2004-08-14 0:34 ` Herbert Xu
2004-08-14 0:39 ` David S. Miller
2004-08-14 0:54 ` Herbert Xu
2004-08-14 1:25 ` Herbert Xu
2004-08-14 1:30 ` Herbert Xu
2004-08-14 5:08 ` Herbert Xu
2004-08-14 6:27 ` neigh_create/inetdev_destroy race? Herbert Xu
2004-08-16 2:14 ` David S. Miller
2004-08-16 10:51 ` Herbert Xu
2004-08-29 6:42 ` David S. Miller
2004-08-29 6:50 ` Herbert Xu
2004-08-31 6:08 ` David S. Miller
2004-08-31 10:41 ` Herbert Xu
2004-09-02 5:21 ` David S. Miller
2004-09-02 13:06 ` Herbert Xu
2004-09-03 13:36 ` Herbert Xu
2004-09-03 16:00 ` Stephen Hemminger
2004-09-03 23:49 ` Herbert Xu
2004-09-07 20:50 ` David S. Miller
2004-09-03 16:18 ` David S. Miller
2004-08-16 2:08 ` [PATCH] Move inetdev/ifa over to RCU David S. Miller
2004-08-16 2:43 ` Herbert Xu
2004-08-16 3:08 ` David S. Miller
2004-08-16 3:14 ` Herbert Xu
2004-08-16 6:23 ` David S. Miller
2004-08-14 6:31 ` Herbert Xu
2004-08-14 6:32 ` Herbert Xu
2004-08-16 3:01 ` David S. Miller
2004-08-14 1:40 ` Herbert Xu
2004-08-16 3:03 ` David S. Miller
2004-08-16 3:23 ` Herbert Xu
2004-08-16 6:24 ` David S. Miller
2004-08-14 4:30 ` Stephen Hemminger
2004-08-14 4:36 ` Herbert Xu
2004-08-16 2:59 ` David S. Miller
2004-08-16 2:58 ` David S. Miller
2004-08-16 3:08 ` Herbert Xu
2004-08-16 6:21 ` David S. Miller
2004-08-16 8:13 ` Herbert Xu
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=20040813093838.6961c0d4.davem@redhat.com \
--to=davem@redhat.com \
--cc=herbert@gondor.apana.org.au \
--cc=netdev@oss.sgi.com \
--cc=shemminger@osdl.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).