diff options
Diffstat (limited to 'net/tipc/node_subscr.c')
-rw-r--r-- | net/tipc/node_subscr.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/net/tipc/node_subscr.c b/net/tipc/node_subscr.c index cff4068cc755..cc3fff3dec4f 100644 --- a/net/tipc/node_subscr.c +++ b/net/tipc/node_subscr.c | |||
@@ -47,18 +47,19 @@ | |||
47 | void tipc_nodesub_subscribe(struct node_subscr *node_sub, u32 addr, | 47 | void tipc_nodesub_subscribe(struct node_subscr *node_sub, u32 addr, |
48 | void *usr_handle, net_ev_handler handle_down) | 48 | void *usr_handle, net_ev_handler handle_down) |
49 | { | 49 | { |
50 | node_sub->node = NULL; | 50 | if (addr == tipc_own_addr) { |
51 | if (addr == tipc_own_addr) | 51 | node_sub->node = NULL; |
52 | return; | 52 | return; |
53 | if (!tipc_addr_node_valid(addr)) { | 53 | } |
54 | warn("node_subscr with illegal %x\n", addr); | 54 | |
55 | node_sub->node = tipc_node_find(addr); | ||
56 | if (!node_sub->node) { | ||
57 | warn("Node subscription rejected, unknown node 0x%x\n", addr); | ||
55 | return; | 58 | return; |
56 | } | 59 | } |
57 | |||
58 | node_sub->handle_node_down = handle_down; | 60 | node_sub->handle_node_down = handle_down; |
59 | node_sub->usr_handle = usr_handle; | 61 | node_sub->usr_handle = usr_handle; |
60 | node_sub->node = tipc_node_find(addr); | 62 | |
61 | assert(node_sub->node); | ||
62 | tipc_node_lock(node_sub->node); | 63 | tipc_node_lock(node_sub->node); |
63 | list_add_tail(&node_sub->nodesub_list, &node_sub->node->nsub); | 64 | list_add_tail(&node_sub->nodesub_list, &node_sub->node->nsub); |
64 | tipc_node_unlock(node_sub->node); | 65 | tipc_node_unlock(node_sub->node); |