diff options
author | Allan Stephens <allan.stephens@windriver.com> | 2006-10-17 00:57:13 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-10-18 22:55:20 -0400 |
commit | 2de07f6156fe664063207c010b3bd2500348884a (patch) | |
tree | 751cde2c24a190c6d02deaa75b72cbede9fb38ed /net/tipc | |
parent | 08c31f7167b1bdc30cd0960b45d6f3076eb1f179 (diff) |
[TIPC]: Fixed slow link reactivation when link tolerance is large
This patch corrects an issue wherein a previouly failed node could
not reestablish a links to a non-failing node in the TIPC network
until the latter node detected the link failure itself (which might
be configured to take up to 30 seconds). The non-failing node now
responds to link setup requests from a previously failed node in at
most 1 second, allowing it to detect the link failure more quickly.
Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
Signed-off-by: Per Liden <per.liden@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc')
-rw-r--r-- | net/tipc/discover.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/net/tipc/discover.c b/net/tipc/discover.c index cc748d4d4742..3b0cd12f37da 100644 --- a/net/tipc/discover.c +++ b/net/tipc/discover.c | |||
@@ -195,7 +195,8 @@ void tipc_disc_recv_msg(struct sk_buff *buf) | |||
195 | struct sk_buff *rbuf; | 195 | struct sk_buff *rbuf; |
196 | struct tipc_media_addr *addr; | 196 | struct tipc_media_addr *addr; |
197 | struct node *n_ptr = tipc_node_find(orig); | 197 | struct node *n_ptr = tipc_node_find(orig); |
198 | int link_up; | 198 | int link_fully_up; |
199 | |||
199 | dbg(" in own cluster\n"); | 200 | dbg(" in own cluster\n"); |
200 | if (n_ptr == NULL) { | 201 | if (n_ptr == NULL) { |
201 | n_ptr = tipc_node_create(orig); | 202 | n_ptr = tipc_node_create(orig); |
@@ -225,9 +226,9 @@ void tipc_disc_recv_msg(struct sk_buff *buf) | |||
225 | memcpy(addr, &media_addr, sizeof(*addr)); | 226 | memcpy(addr, &media_addr, sizeof(*addr)); |
226 | tipc_link_reset(link); | 227 | tipc_link_reset(link); |
227 | } | 228 | } |
228 | link_up = tipc_link_is_up(link); | 229 | link_fully_up = (link->state == WORKING_WORKING); |
229 | spin_unlock_bh(&n_ptr->lock); | 230 | spin_unlock_bh(&n_ptr->lock); |
230 | if ((type == DSC_RESP_MSG) || link_up) | 231 | if ((type == DSC_RESP_MSG) || link_fully_up) |
231 | return; | 232 | return; |
232 | rbuf = tipc_disc_init_msg(DSC_RESP_MSG, 1, orig, b_ptr); | 233 | rbuf = tipc_disc_init_msg(DSC_RESP_MSG, 1, orig, b_ptr); |
233 | if (rbuf != NULL) { | 234 | if (rbuf != NULL) { |