Until now, in tipc_link_rcv() the sockets are woken only when we were able to release a frame from the link's transmit queue. However link_prepare_wakeup(), wakes only as many users as permitted by the current link window and the rest of the users are woken the next time a frame is released. In case of the released frame being the last frame in the transmit queue i.e the queue becomes empty, we miss to wake the users and they experience permanent congestion.
In this commit, we wakeup the users if link's transmit queue is empty. Signed-off-by: Parthasarathy Bhuvaragan <parthasarathy.bhuvara...@ericsson.com> --- net/tipc/link.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/net/tipc/link.c b/net/tipc/link.c index b36e16cdc945..28f9376ce6d7 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c @@ -1251,6 +1251,10 @@ int tipc_link_rcv(struct tipc_link *l, struct sk_buff *skb, link_prepare_wakeup(l); } + if (skb_queue_empty(&l->transmq) && + !skb_queue_empty(&l->wakeupq)) + link_prepare_wakeup(l); + /* Defer delivery if sequence gap */ if (unlikely(seqno != rcv_nxt)) { __tipc_skb_queue_sorted(defq, seqno, skb); -- 2.1.4 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ tipc-discussion mailing list tipc-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tipc-discussion