diff options
author | Jon Maloy <jon.maloy@ericsson.com> | 2017-12-20 13:03:15 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-12-20 22:56:48 +0300 |
commit | bb25c3855a12cc58e33cd7ee9b69943790fe35f7 (patch) | |
tree | 3844bdbeeebe378da5804ed7642dcbf427674ed3 /net/tipc | |
parent | 1c8e77fb361a4a116a41ac1d9819eb79d068735d (diff) | |
download | linux-bb25c3855a12cc58e33cd7ee9b69943790fe35f7.tar.xz |
tipc: remove joining group member from congested list
When we receive a JOIN message from a peer member, the message may
contain an advertised window value ADV_IDLE that permits removing the
member in question from the tipc_group::congested list. However, since
the removal has been made conditional on that the advertised window is
*not* ADV_IDLE, we miss this case. This has the effect that a sender
sometimes may enter a state of permanent, false, broadcast congestion.
We fix this by unconditinally removing the member from the congested
list before calling tipc_member_update(), which might potentially sort
it into the list again.
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc')
-rw-r--r-- | net/tipc/group.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/net/tipc/group.c b/net/tipc/group.c index bbc004eaa31a..7ebbdeb2a90e 100644 --- a/net/tipc/group.c +++ b/net/tipc/group.c @@ -689,10 +689,8 @@ void tipc_group_proto_rcv(struct tipc_group *grp, bool *usr_wakeup, msg_set_grp_bc_seqno(ehdr, m->bc_syncpt); __skb_queue_tail(inputq, m->event_msg); } - if (m->window < ADV_IDLE) - tipc_group_update_member(m, 0); - else - list_del_init(&m->congested); + list_del_init(&m->congested); + tipc_group_update_member(m, 0); return; case GRP_LEAVE_MSG: if (!m) |