netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ying Xue <ying.xue@windriver.com>
To: <davem@davemloft.net>
Cc: jon.maloy@ericsson.com, Paul.Gortmaker@windriver.com,
	tipc-discussion@lists.sourceforge.net, netdev@vger.kernel.org
Subject: [PATCH net-next 02/11] tipc: adjust locking policy of protecting tipc_ptr pointer of net_device
Date: Mon, 21 Apr 2014 10:55:43 +0800	[thread overview]
Message-ID: <1398048952-7825-3-git-send-email-ying.xue@windriver.com> (raw)
In-Reply-To: <1398048952-7825-1-git-send-email-ying.xue@windriver.com>

Currently the 'tipc_ptr' pointer is protected by tipc_net_lock
write lock on write side, and RCU read lock is applied to read
side. In addition, there have two paths on write side where we
may change variables pointed by the 'tipc_ptr' pointer: one is
to configure bearer by tipc-config tool and another one is that
bearer status is changed by notification events of its attached
interface. But on the latter path, we improperly deem that
accessing 'tipc_ptr' pointer happens on read side with
rcu_read_lock() although some variables pointed by the 'tipc_ptr'
pointer are changed possibly.

Moreover, as now the both paths are guarded by RTNL lock, it's
better to adjust the locking policy of 'tipc_ptr' pointer
protection, allowing RTNL instead of tipc_net_lock write lock to
protect it on write side, which will help us purge tipc_net_lock
in the future.

Signed-off-by: Ying Xue <ying.xue@windriver.com>
Reviewed-by: Jon Maloy <jon.maloy@ericsson.com>
Reviewed-by: Erik Hugne <erik.hugne@ericsson.com>
Tested-by: Erik Hugne <erik.hugne@ericsson.com>
---
 net/tipc/bearer.c |   11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c
index 3fef7eb..dfb4c7f 100644
--- a/net/tipc/bearer.c
+++ b/net/tipc/bearer.c
@@ -535,7 +535,7 @@ static int tipc_l2_rcv_msg(struct sk_buff *buf, struct net_device *dev,
 	}
 
 	rcu_read_lock();
-	b_ptr = rcu_dereference(dev->tipc_ptr);
+	b_ptr = rcu_dereference_rtnl(dev->tipc_ptr);
 	if (likely(b_ptr)) {
 		if (likely(buf->pkt_type <= PACKET_BROADCAST)) {
 			buf->next = NULL;
@@ -568,12 +568,9 @@ static int tipc_l2_device_event(struct notifier_block *nb, unsigned long evt,
 	if (!net_eq(dev_net(dev), &init_net))
 		return NOTIFY_DONE;
 
-	rcu_read_lock();
-	b_ptr = rcu_dereference(dev->tipc_ptr);
-	if (!b_ptr) {
-		rcu_read_unlock();
+	b_ptr = rtnl_dereference(dev->tipc_ptr);
+	if (!b_ptr)
 		return NOTIFY_DONE;
-	}
 
 	b_ptr->mtu = dev->mtu;
 
@@ -595,8 +592,6 @@ static int tipc_l2_device_event(struct notifier_block *nb, unsigned long evt,
 		tipc_disable_bearer(b_ptr->name);
 		break;
 	}
-	rcu_read_unlock();
-
 	return NOTIFY_OK;
 }
 
-- 
1.7.9.5


------------------------------------------------------------------------------
Start Your Social Network Today - Download eXo Platform
Build your Enterprise Intranet with eXo Platform Software
Java Based Open Source Intranet - Social, Extensible, Cloud Ready
Get Started Now And Turn Your Intranet Into A Collaboration Platform
http://p.sf.net/sfu/ExoPlatform

  parent reply	other threads:[~2014-04-21  2:55 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-21  2:55 [PATCH net-next 00/11] purge tipc_net_lock Ying Xue
2014-04-21  2:55 ` [PATCH net-next 01/11] tipc: replace config_mutex lock with RTNL lock Ying Xue
2014-04-21  2:55 ` Ying Xue [this message]
2014-04-21  2:55 ` [PATCH net-next 03/11] tipc: use RTNL lock to protect tipc_net_stop routine Ying Xue
2014-04-21  2:55 ` [PATCH net-next 04/11] tipc: convert bearer_list to RCU list Ying Xue
2014-04-21  2:55 ` [PATCH net-next 05/11] tipc: decouple the relationship between bearer and link Ying Xue
2014-04-21  2:55 ` [PATCH net-next 06/11] tipc: use RCU to protect media_ptr pointer Ying Xue
2014-04-21  2:55 ` [PATCH net-next 07/11] tipc: purge tipc_net_lock lock Ying Xue
2014-04-21  2:55 ` [PATCH net-next 08/11] tipc: make media_ptr pointed netdevice valid Ying Xue
2014-04-21  2:55 ` [PATCH net-next 09/11] tipc: use bearer_disable to disable bearer in tipc_l2_device_event Ying Xue
2014-04-21  2:55 ` [PATCH net-next 10/11] tipc: use bc_lock to protect node map in bearer structure Ying Xue
2014-04-21  2:55 ` [PATCH net-next 11/11] tipc: fix race in disc create/delete Ying Xue
2014-04-23  1:18 ` [PATCH net-next 00/11] purge tipc_net_lock David Miller

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=1398048952-7825-3-git-send-email-ying.xue@windriver.com \
    --to=ying.xue@windriver.com \
    --cc=Paul.Gortmaker@windriver.com \
    --cc=davem@davemloft.net \
    --cc=jon.maloy@ericsson.com \
    --cc=netdev@vger.kernel.org \
    --cc=tipc-discussion@lists.sourceforge.net \
    /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).