| From foo@baz Thu Jul 19 10:08:15 CEST 2018 |
| From: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> |
| Date: Fri, 15 Jun 2018 13:27:31 +0300 |
| Subject: net_sched: blackhole: tell upper qdisc about dropped packets |
| |
| From: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> |
| |
| [ Upstream commit 7e85dc8cb35abf16455f1511f0670b57c1a84608 ] |
| |
| When blackhole is used on top of classful qdisc like hfsc it breaks |
| qlen and backlog counters because packets are disappear without notice. |
| |
| In HFSC non-zero qlen while all classes are inactive triggers warning: |
| WARNING: ... at net/sched/sch_hfsc.c:1393 hfsc_dequeue+0xba4/0xe90 [sch_hfsc] |
| and schedules watchdog work endlessly. |
| |
| This patch return __NET_XMIT_BYPASS in addition to NET_XMIT_SUCCESS, |
| this flag tells upper layer: this packet is gone and isn't queued. |
| |
| Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/sched/sch_blackhole.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/net/sched/sch_blackhole.c |
| +++ b/net/sched/sch_blackhole.c |
| @@ -20,7 +20,7 @@ |
| static int blackhole_enqueue(struct sk_buff *skb, struct Qdisc *sch) |
| { |
| qdisc_drop(skb, sch); |
| - return NET_XMIT_SUCCESS; |
| + return NET_XMIT_SUCCESS | __NET_XMIT_BYPASS; |
| } |
| |
| static struct sk_buff *blackhole_dequeue(struct Qdisc *sch) |