diff options
Diffstat (limited to 'net/tipc/node.c')
-rw-r--r-- | net/tipc/node.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/net/tipc/node.c b/net/tipc/node.c index 14f98c81d313..8926caaf1fc5 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c | |||
@@ -327,7 +327,7 @@ static void node_cleanup_finished(unsigned long node_addr) | |||
327 | 327 | ||
328 | static void node_lost_contact(struct tipc_node *n_ptr) | 328 | static void node_lost_contact(struct tipc_node *n_ptr) |
329 | { | 329 | { |
330 | struct tipc_node_subscr *ns, *tns; | 330 | struct tipc_node_subscr *ns; |
331 | char addr_string[16]; | 331 | char addr_string[16]; |
332 | u32 i; | 332 | u32 i; |
333 | 333 | ||
@@ -365,11 +365,12 @@ static void node_lost_contact(struct tipc_node *n_ptr) | |||
365 | } | 365 | } |
366 | 366 | ||
367 | /* Notify subscribers */ | 367 | /* Notify subscribers */ |
368 | list_for_each_entry_safe(ns, tns, &n_ptr->nsub, nodesub_list) { | 368 | list_for_each_entry(ns, &n_ptr->nsub, nodesub_list) { |
369 | ns->node = NULL; | 369 | if (ns->handle_node_down) { |
370 | list_del_init(&ns->nodesub_list); | 370 | tipc_k_signal((Handler)ns->handle_node_down, |
371 | tipc_k_signal((Handler)ns->handle_node_down, | 371 | (unsigned long)ns->usr_handle); |
372 | (unsigned long)ns->usr_handle); | 372 | ns->handle_node_down = NULL; |
373 | } | ||
373 | } | 374 | } |
374 | 375 | ||
375 | /* Prevent re-contact with node until all cleanup is done */ | 376 | /* Prevent re-contact with node until all cleanup is done */ |