diff options
author | Jon Paul Maloy <jon.maloy@ericsson.com> | 2015-06-28 09:44:44 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-06-28 16:43:02 -0700 |
commit | 7d967b673c2ff992205be051ffebc39e1a323400 (patch) | |
tree | d6edc29ed8d4d0d4314e7249486a48b4f2ae5267 /net/tipc/bcast.c | |
parent | 011cb197a84ed547c2b6b12a86adbeec1be0fdaf (diff) | |
download | linux-7d967b673c2ff992205be051ffebc39e1a323400.tar.gz linux-7d967b673c2ff992205be051ffebc39e1a323400.tar.bz2 linux-7d967b673c2ff992205be051ffebc39e1a323400.zip |
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.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c index 4906ca3c0f3a..a816382fc8af 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); } |