summaryrefslogtreecommitdiffstats
path: root/net/tipc/bcast.c
diff options
context:
space:
mode:
authorJon Paul Maloy <jon.maloy@ericsson.com>2015-06-28 09:44:44 -0400
committerDavid S. Miller <davem@davemloft.net>2015-06-28 16:43:02 -0700
commit7d967b673c2ff992205be051ffebc39e1a323400 (patch)
treed6edc29ed8d4d0d4314e7249486a48b4f2ae5267 /net/tipc/bcast.c
parent011cb197a84ed547c2b6b12a86adbeec1be0fdaf (diff)
downloadop-kernel-dev-7d967b673c2ff992205be051ffebc39e1a323400.zip
op-kernel-dev-7d967b673c2ff992205be051ffebc39e1a323400.tar.gz
tipc: purge backlog queue counters when broadcast link is reset
In commit 1f66d161ab3d8b518903fa6c3f9c1f48d6919e74 ("tipc: introduce starvation free send algorithm") we introduced a counter per priority level for buffers in the link backlog queue. We also introduced a new function tipc_link_purge_backlog(), to reset these counters to zero when the link is reset. Unfortunately, we missed to call this function when the broadcast link is reset, with the result that the values of these counters might be permanently skewed when new nodes are attached. This may in the worst case lead to permananent, but spurious, broadcast link congestion, where no broadcast packets can be sent at all. We fix this bug with this commit. Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/bcast.c')
-rw-r--r--net/tipc/bcast.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c
index 4906ca3..a816382 100644
--- a/net/tipc/bcast.c
+++ b/net/tipc/bcast.c
@@ -108,6 +108,11 @@ void tipc_bclink_remove_node(struct net *net, u32 addr)
tipc_bclink_lock(net);
tipc_nmap_remove(&tn->bclink->bcast_nodes, addr);
+
+ /* Last node? => reset backlog queue */
+ if (!tn->bclink->bcast_nodes.count)
+ tipc_link_purge_backlog(&tn->bclink->link);
+
tipc_bclink_unlock(net);
}
OpenPOWER on IntegriCloud