Bug#631945: [Bugme-new] [Bug 39372] New: Problems with HFSC Scheduler
- To: Patrick McHardy <kaber@trash.net>, David Miller <davem@davemloft.net>
- Cc: Michal Soltys <soltys@ziu.info>, Andrew Morton <akpm@linux-foundation.org>, netdev@vger.kernel.org, bugme-daemon@bugzilla.kernel.org, Jamal Hadi Salim <hadi@cyberus.ca>, lucas.bocchi@gmail.com, 631945@bugs.debian.org, 00bormoj@gmail.com, fdelawarde@wirelessmundi.com
- Subject: Bug#631945: [Bugme-new] [Bug 39372] New: Problems with HFSC Scheduler
- From: Eric Dumazet <eric.dumazet@gmail.com>
- Date: Sat, 30 Jul 2011 07:22:42 +0200
- Message-id: <[🔎] 1312003362.2873.54.camel@edumazet-laptop>
- Reply-to: Eric Dumazet <eric.dumazet@gmail.com>, 631945@bugs.debian.org
- In-reply-to: <[🔎] 4E32BF87.6010909@trash.net>
- References: <bug-39372-10286@https.bugzilla.kernel.org/> <20110714151425.844b7738.akpm@linux-foundation.org> <[🔎] 4E32A796.8060104@ziu.info> <[🔎] 1311946060.2843.15.camel@edumazet-HP-Compaq-6005-Pro-SFF-PC> <[🔎] 1311948052.2843.19.camel@edumazet-HP-Compaq-6005-Pro-SFF-PC> <[🔎] 4E32BF87.6010909@trash.net>
Le vendredi 29 juillet 2011 à 16:11 +0200, Patrick McHardy a écrit :
> Yeah, that seems to be the correct fix, thanks for looking into this.
Thanks Patrick, here is the official patch submission then ;)
[PATCH] sch_sfq: fix sfq_enqueue()
commit 8efa88540635 (sch_sfq: avoid giving spurious NET_XMIT_CN signals)
forgot to call qdisc_tree_decrease_qlen() to signal upper levels that a
packet (from another flow) was dropped, leading to various problems.
With help from Michal Soltys and Michal Pokrywka, who did a bisection.
Bugzilla ref: https://bugzilla.kernel.org/show_bug.cgi?id=39372
Debian ref: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=631945
Reported-by: Lucas Bocchi <lucas.bocchi@gmail.com>
Reported-and-bisected-by: Michal Pokrywka <wolfmoon@o2.pl>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
CC: Michal Soltys <soltys@ziu.info>
Acked-by: Patrick McHardy <kaber@trash.net>
---
net/sched/sch_sfq.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c
index 4536ee6..2a2d287 100644
--- a/net/sched/sch_sfq.c
+++ b/net/sched/sch_sfq.c
@@ -410,7 +410,12 @@ sfq_enqueue(struct sk_buff *skb, struct Qdisc *sch)
/* Return Congestion Notification only if we dropped a packet
* from this flow.
*/
- return (qlen != slot->qlen) ? NET_XMIT_CN : NET_XMIT_SUCCESS;
+ if (qlen != slot->qlen)
+ return NET_XMIT_CN;
+
+ /* As we dropped a packet, better let upper stack know this */
+ qdisc_tree_decrease_qlen(sch, 1);
+ return NET_XMIT_SUCCESS;
}
static struct sk_buff *
Reply to: