diff options
Diffstat (limited to 'net/tipc')
-rw-r--r-- | net/tipc/name_distr.c | 7 | ||||
-rw-r--r-- | net/tipc/node.c | 9 | ||||
-rw-r--r-- | net/tipc/node_subscr.c | 21 | ||||
-rw-r--r-- | net/tipc/node_subscr.h | 3 |
4 files changed, 27 insertions, 13 deletions
diff --git a/net/tipc/name_distr.c b/net/tipc/name_distr.c index 1d4a18aa9ccc..d58dae78b551 100644 --- a/net/tipc/name_distr.c +++ b/net/tipc/name_distr.c | |||
@@ -214,7 +214,7 @@ exit: | |||
214 | } | 214 | } |
215 | 215 | ||
216 | /** | 216 | /** |
217 | * node_is_down - remove publication associated with a failed node | 217 | * named_purge_publ - remove publication associated with a failed node |
218 | * | 218 | * |
219 | * Invoked for each publication issued by a newly failed node. | 219 | * Invoked for each publication issued by a newly failed node. |
220 | * Removes publication structure from name table & deletes it. | 220 | * Removes publication structure from name table & deletes it. |
@@ -223,7 +223,7 @@ exit: | |||
223 | * publication. Nudge this item's key to distinguish it from the other. | 223 | * publication. Nudge this item's key to distinguish it from the other. |
224 | */ | 224 | */ |
225 | 225 | ||
226 | static void node_is_down(struct publication *publ) | 226 | static void named_purge_publ(struct publication *publ) |
227 | { | 227 | { |
228 | struct publication *p; | 228 | struct publication *p; |
229 | 229 | ||
@@ -269,7 +269,8 @@ void tipc_named_recv(struct sk_buff *buf) | |||
269 | tipc_nodesub_subscribe(&publ->subscr, | 269 | tipc_nodesub_subscribe(&publ->subscr, |
270 | msg_orignode(msg), | 270 | msg_orignode(msg), |
271 | publ, | 271 | publ, |
272 | (net_ev_handler)node_is_down); | 272 | (net_ev_handler) |
273 | named_purge_publ); | ||
273 | } | 274 | } |
274 | } else if (msg_type(msg) == WITHDRAWAL) { | 275 | } else if (msg_type(msg) == WITHDRAWAL) { |
275 | publ = tipc_nametbl_remove_publ(ntohl(item->type), | 276 | publ = tipc_nametbl_remove_publ(ntohl(item->type), |
diff --git a/net/tipc/node.c b/net/tipc/node.c index 8926caaf1fc5..713ab5d7c54f 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c | |||
@@ -327,7 +327,6 @@ 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; | ||
331 | char addr_string[16]; | 330 | char addr_string[16]; |
332 | u32 i; | 331 | u32 i; |
333 | 332 | ||
@@ -365,13 +364,7 @@ static void node_lost_contact(struct tipc_node *n_ptr) | |||
365 | } | 364 | } |
366 | 365 | ||
367 | /* Notify subscribers */ | 366 | /* Notify subscribers */ |
368 | list_for_each_entry(ns, &n_ptr->nsub, nodesub_list) { | 367 | tipc_nodesub_notify(n_ptr); |
369 | if (ns->handle_node_down) { | ||
370 | tipc_k_signal((Handler)ns->handle_node_down, | ||
371 | (unsigned long)ns->usr_handle); | ||
372 | ns->handle_node_down = NULL; | ||
373 | } | ||
374 | } | ||
375 | 368 | ||
376 | /* Prevent re-contact with node until all cleanup is done */ | 369 | /* Prevent re-contact with node until all cleanup is done */ |
377 | 370 | ||
diff --git a/net/tipc/node_subscr.c b/net/tipc/node_subscr.c index 018a55332d91..c3c2815ae630 100644 --- a/net/tipc/node_subscr.c +++ b/net/tipc/node_subscr.c | |||
@@ -2,7 +2,7 @@ | |||
2 | * net/tipc/node_subscr.c: TIPC "node down" subscription handling | 2 | * net/tipc/node_subscr.c: TIPC "node down" subscription handling |
3 | * | 3 | * |
4 | * Copyright (c) 1995-2006, Ericsson AB | 4 | * Copyright (c) 1995-2006, Ericsson AB |
5 | * Copyright (c) 2005, Wind River Systems | 5 | * Copyright (c) 2005, 2010-2011, Wind River Systems |
6 | * All rights reserved. | 6 | * All rights reserved. |
7 | * | 7 | * |
8 | * Redistribution and use in source and binary forms, with or without | 8 | * Redistribution and use in source and binary forms, with or without |
@@ -76,3 +76,22 @@ void tipc_nodesub_unsubscribe(struct tipc_node_subscr *node_sub) | |||
76 | list_del_init(&node_sub->nodesub_list); | 76 | list_del_init(&node_sub->nodesub_list); |
77 | tipc_node_unlock(node_sub->node); | 77 | tipc_node_unlock(node_sub->node); |
78 | } | 78 | } |
79 | |||
80 | /** | ||
81 | * tipc_nodesub_notify - notify subscribers that a node is unreachable | ||
82 | * | ||
83 | * Note: node is locked by caller | ||
84 | */ | ||
85 | |||
86 | void tipc_nodesub_notify(struct tipc_node *node) | ||
87 | { | ||
88 | struct tipc_node_subscr *ns; | ||
89 | |||
90 | list_for_each_entry(ns, &node->nsub, nodesub_list) { | ||
91 | if (ns->handle_node_down) { | ||
92 | tipc_k_signal((Handler)ns->handle_node_down, | ||
93 | (unsigned long)ns->usr_handle); | ||
94 | ns->handle_node_down = NULL; | ||
95 | } | ||
96 | } | ||
97 | } | ||
diff --git a/net/tipc/node_subscr.h b/net/tipc/node_subscr.h index 006ed739f515..4bc2ca0867a1 100644 --- a/net/tipc/node_subscr.h +++ b/net/tipc/node_subscr.h | |||
@@ -2,7 +2,7 @@ | |||
2 | * net/tipc/node_subscr.h: Include file for TIPC "node down" subscription handling | 2 | * net/tipc/node_subscr.h: Include file for TIPC "node down" subscription handling |
3 | * | 3 | * |
4 | * Copyright (c) 1995-2006, Ericsson AB | 4 | * Copyright (c) 1995-2006, Ericsson AB |
5 | * Copyright (c) 2005, Wind River Systems | 5 | * Copyright (c) 2005, 2010-2011, Wind River Systems |
6 | * All rights reserved. | 6 | * All rights reserved. |
7 | * | 7 | * |
8 | * Redistribution and use in source and binary forms, with or without | 8 | * Redistribution and use in source and binary forms, with or without |
@@ -59,5 +59,6 @@ struct tipc_node_subscr { | |||
59 | void tipc_nodesub_subscribe(struct tipc_node_subscr *node_sub, u32 addr, | 59 | void tipc_nodesub_subscribe(struct tipc_node_subscr *node_sub, u32 addr, |
60 | void *usr_handle, net_ev_handler handle_down); | 60 | void *usr_handle, net_ev_handler handle_down); |
61 | void tipc_nodesub_unsubscribe(struct tipc_node_subscr *node_sub); | 61 | void tipc_nodesub_unsubscribe(struct tipc_node_subscr *node_sub); |
62 | void tipc_nodesub_notify(struct tipc_node *node); | ||
62 | 63 | ||
63 | #endif | 64 | #endif |