diff options
author | Allan Stephens <allan.stephens@windriver.com> | 2010-08-17 13:00:16 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-08-18 02:32:00 +0200 |
commit | 5a68d5ee000bb784c4856391b4861739c8bbd341 (patch) | |
tree | bf00540edd8adae24f3805b08d53ba37af6366d7 /net/tipc/discover.c | |
parent | tipc: Allow connect() to wait indefinitely (diff) | |
download | linux-5a68d5ee000bb784c4856391b4861739c8bbd341.tar.xz linux-5a68d5ee000bb784c4856391b4861739c8bbd341.zip |
tipc: Prevent missing name table entries when link flip-flops rapidly
Ensure that TIPC does not re-establish communication with a
neighboring node until it has finished updating all data structures
containing information about that node to reflect the earlier loss of
contact. Previously, it was possible for TIPC to perform its purge of
name table entries relating to the node once contact had already been
re-established, resulting in the unwanted removal of valid name table
entries.
Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/discover.c')
-rw-r--r-- | net/tipc/discover.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/net/tipc/discover.c b/net/tipc/discover.c index fc1fcf5e6b53..f28d1ae93125 100644 --- a/net/tipc/discover.c +++ b/net/tipc/discover.c @@ -203,6 +203,14 @@ void tipc_disc_recv_msg(struct sk_buff *buf, struct bearer *b_ptr) return; } spin_lock_bh(&n_ptr->lock); + + /* Don't talk to neighbor during cleanup after last session */ + + if (n_ptr->cleanup_required) { + spin_unlock_bh(&n_ptr->lock); + return; + } + link = n_ptr->links[b_ptr->identity]; if (!link) { dbg("creating link\n"); |