aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/tipc/discover.c9
-rw-r--r--net/tipc/node.c11
2 files changed, 7 insertions, 13 deletions
diff --git a/net/tipc/discover.c b/net/tipc/discover.c
index 5b40cb89ff0a..a580a40d0208 100644
--- a/net/tipc/discover.c
+++ b/net/tipc/discover.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * net/tipc/discover.c 2 * net/tipc/discover.c
3 * 3 *
4 * Copyright (c) 2003-2006, 2014, Ericsson AB 4 * Copyright (c) 2003-2006, 2014-2015, Ericsson AB
5 * Copyright (c) 2005-2006, 2010-2011, Wind River Systems 5 * Copyright (c) 2005-2006, 2010-2011, Wind River Systems
6 * All rights reserved. 6 * All rights reserved.
7 * 7 *
@@ -47,7 +47,6 @@
47/* indicates no timer in use */ 47/* indicates no timer in use */
48#define TIPC_LINK_REQ_INACTIVE 0xffffffff 48#define TIPC_LINK_REQ_INACTIVE 0xffffffff
49 49
50
51/** 50/**
52 * struct tipc_link_req - information about an ongoing link setup request 51 * struct tipc_link_req - information about an ongoing link setup request
53 * @bearer_id: identity of bearer issuing requests 52 * @bearer_id: identity of bearer issuing requests
@@ -163,13 +162,9 @@ void tipc_disc_rcv(struct net *net, struct sk_buff *buf,
163 if (!tipc_in_scope(bearer->domain, onode)) 162 if (!tipc_in_scope(bearer->domain, onode))
164 return; 163 return;
165 164
166 /* Locate, or if necessary, create, node: */ 165 node = tipc_node_create(net, onode);
167 node = tipc_node_find(net, onode);
168 if (!node)
169 node = tipc_node_create(net, onode);
170 if (!node) 166 if (!node)
171 return; 167 return;
172
173 tipc_node_lock(node); 168 tipc_node_lock(node);
174 link = node->links[bearer->identity]; 169 link = node->links[bearer->identity];
175 170
diff --git a/net/tipc/node.c b/net/tipc/node.c
index d4cb8c127063..842bd7ad4b17 100644
--- a/net/tipc/node.c
+++ b/net/tipc/node.c
@@ -96,14 +96,14 @@ struct tipc_node *tipc_node_create(struct net *net, u32 addr)
96 struct tipc_node *n_ptr, *temp_node; 96 struct tipc_node *n_ptr, *temp_node;
97 97
98 spin_lock_bh(&tn->node_list_lock); 98 spin_lock_bh(&tn->node_list_lock);
99 99 n_ptr = tipc_node_find(net, addr);
100 if (n_ptr)
101 goto exit;
100 n_ptr = kzalloc(sizeof(*n_ptr), GFP_ATOMIC); 102 n_ptr = kzalloc(sizeof(*n_ptr), GFP_ATOMIC);
101 if (!n_ptr) { 103 if (!n_ptr) {
102 spin_unlock_bh(&tn->node_list_lock);
103 pr_warn("Node creation failed, no memory\n"); 104 pr_warn("Node creation failed, no memory\n");
104 return NULL; 105 goto exit;
105 } 106 }
106
107 n_ptr->addr = addr; 107 n_ptr->addr = addr;
108 n_ptr->net = net; 108 n_ptr->net = net;
109 spin_lock_init(&n_ptr->lock); 109 spin_lock_init(&n_ptr->lock);
@@ -123,9 +123,8 @@ struct tipc_node *tipc_node_create(struct net *net, u32 addr)
123 list_add_tail_rcu(&n_ptr->list, &temp_node->list); 123 list_add_tail_rcu(&n_ptr->list, &temp_node->list);
124 n_ptr->action_flags = TIPC_WAIT_PEER_LINKS_DOWN; 124 n_ptr->action_flags = TIPC_WAIT_PEER_LINKS_DOWN;
125 n_ptr->signature = INVALID_NODE_SIG; 125 n_ptr->signature = INVALID_NODE_SIG;
126
127 tn->num_nodes++; 126 tn->num_nodes++;
128 127exit:
129 spin_unlock_bh(&tn->node_list_lock); 128 spin_unlock_bh(&tn->node_list_lock);
130 return n_ptr; 129 return n_ptr;
131} 130}