aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/node.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/node.c')
-rw-r--r--net/tipc/node.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/net/tipc/node.c b/net/tipc/node.c
index 52fd80b0e728..3819ab14e073 100644
--- a/net/tipc/node.c
+++ b/net/tipc/node.c
@@ -370,13 +370,17 @@ static struct tipc_node *tipc_node_create(struct net *net, u32 addr,
370 spin_lock_bh(&tn->node_list_lock); 370 spin_lock_bh(&tn->node_list_lock);
371 n = tipc_node_find(net, addr); 371 n = tipc_node_find(net, addr);
372 if (n) { 372 if (n) {
373 if (n->capabilities == capabilities)
374 goto exit;
373 /* Same node may come back with new capabilities */ 375 /* Same node may come back with new capabilities */
376 write_lock_bh(&n->lock);
374 n->capabilities = capabilities; 377 n->capabilities = capabilities;
375 for (bearer_id = 0; bearer_id < MAX_BEARERS; bearer_id++) { 378 for (bearer_id = 0; bearer_id < MAX_BEARERS; bearer_id++) {
376 l = n->links[bearer_id].link; 379 l = n->links[bearer_id].link;
377 if (l) 380 if (l)
378 tipc_link_update_caps(l, capabilities); 381 tipc_link_update_caps(l, capabilities);
379 } 382 }
383 write_unlock_bh(&n->lock);
380 goto exit; 384 goto exit;
381 } 385 }
382 n = kzalloc(sizeof(*n), GFP_ATOMIC); 386 n = kzalloc(sizeof(*n), GFP_ATOMIC);