diff options
Diffstat (limited to 'net/tipc/node.c')
-rw-r--r-- | net/tipc/node.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/net/tipc/node.c b/net/tipc/node.c index c29915688230..29cc85319327 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * net/tipc/node.c: TIPC node management routines | 2 | * net/tipc/node.c: TIPC node management routines |
3 | * | 3 | * |
4 | * Copyright (c) 2000-2006, 2012-2015, Ericsson AB | 4 | * Copyright (c) 2000-2006, 2012-2016, Ericsson AB |
5 | * Copyright (c) 2005-2006, 2010-2014, Wind River Systems | 5 | * Copyright (c) 2005-2006, 2010-2014, Wind River Systems |
6 | * All rights reserved. | 6 | * All rights reserved. |
7 | * | 7 | * |
@@ -191,6 +191,20 @@ int tipc_node_get_mtu(struct net *net, u32 addr, u32 sel) | |||
191 | tipc_node_put(n); | 191 | tipc_node_put(n); |
192 | return mtu; | 192 | return mtu; |
193 | } | 193 | } |
194 | |||
195 | u16 tipc_node_get_capabilities(struct net *net, u32 addr) | ||
196 | { | ||
197 | struct tipc_node *n; | ||
198 | u16 caps; | ||
199 | |||
200 | n = tipc_node_find(net, addr); | ||
201 | if (unlikely(!n)) | ||
202 | return TIPC_NODE_CAPABILITIES; | ||
203 | caps = n->capabilities; | ||
204 | tipc_node_put(n); | ||
205 | return caps; | ||
206 | } | ||
207 | |||
194 | /* | 208 | /* |
195 | * A trivial power-of-two bitmask technique is used for speed, since this | 209 | * A trivial power-of-two bitmask technique is used for speed, since this |
196 | * operation is done for every incoming TIPC packet. The number of hash table | 210 | * operation is done for every incoming TIPC packet. The number of hash table |
@@ -304,8 +318,11 @@ struct tipc_node *tipc_node_create(struct net *net, u32 addr, u16 capabilities) | |||
304 | 318 | ||
305 | spin_lock_bh(&tn->node_list_lock); | 319 | spin_lock_bh(&tn->node_list_lock); |
306 | n = tipc_node_find(net, addr); | 320 | n = tipc_node_find(net, addr); |
307 | if (n) | 321 | if (n) { |
322 | /* Same node may come back with new capabilities */ | ||
323 | n->capabilities = capabilities; | ||
308 | goto exit; | 324 | goto exit; |
325 | } | ||
309 | n = kzalloc(sizeof(*n), GFP_ATOMIC); | 326 | n = kzalloc(sizeof(*n), GFP_ATOMIC); |
310 | if (!n) { | 327 | if (!n) { |
311 | pr_warn("Node creation failed, no memory\n"); | 328 | pr_warn("Node creation failed, no memory\n"); |