diff options
author | David S. Miller <davem@davemloft.net> | 2017-01-24 16:14:59 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-01-24 16:14:59 -0500 |
commit | 04d7f1fb7d25256d8c21b78c7d46193b4a7fabfe (patch) | |
tree | bfc74562fb8162e028d1ddf141ba908d620e53d4 /net/tipc/node.c | |
parent | 294628c1fe660b5c4ba4127df05ff2aa8c09a08a (diff) | |
parent | 35e22e49a5d6a741ebe7f2dd280b2052c3003ef7 (diff) |
Merge branch 'tipc-topology-fixes'
Parthasarathy Bhuvaragan says:
====================
tipc: topology server fixes for nametable soft lockup
In this series, we revert the commit 333f796235a527 ("tipc: fix a
race condition leading to subscriber refcnt bug") and provide an
alternate solution to fix the race conditions in commits 2-4.
We have to do this as the above commit introduced a nametbl soft
lockup at module exit as described by patch#4.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/node.c')
-rw-r--r-- | net/tipc/node.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/tipc/node.c b/net/tipc/node.c index 9d2f4c2b08ab..27753325e06e 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c @@ -263,6 +263,11 @@ static void tipc_node_write_lock(struct tipc_node *n) write_lock_bh(&n->lock); } +static void tipc_node_write_unlock_fast(struct tipc_node *n) +{ + write_unlock_bh(&n->lock); +} + static void tipc_node_write_unlock(struct tipc_node *n) { struct net *net = n->net; @@ -417,7 +422,7 @@ void tipc_node_subscribe(struct net *net, struct list_head *subscr, u32 addr) } tipc_node_write_lock(n); list_add_tail(subscr, &n->publ_list); - tipc_node_write_unlock(n); + tipc_node_write_unlock_fast(n); tipc_node_put(n); } @@ -435,7 +440,7 @@ void tipc_node_unsubscribe(struct net *net, struct list_head *subscr, u32 addr) } tipc_node_write_lock(n); list_del_init(subscr); - tipc_node_write_unlock(n); + tipc_node_write_unlock_fast(n); tipc_node_put(n); } |