| From 5f14ff3867ea4ceb385d991bc53656f1b37209a7 Mon Sep 17 00:00:00 2001 |
| From: Paolo Abeni <pabeni@redhat.com> |
| Date: Tue, 18 Feb 2020 18:15:44 +0100 |
| Subject: [PATCH] Revert "net: dev: introduce support for sch BYPASS for |
| lockless qdisc" |
| |
| commit 379349e9bc3b42b8b2f8f7a03f64a97623fff323 upstream. |
| |
| This reverts commit ba27b4cdaaa66561aaedb2101876e563738d36fe |
| |
| Ahmed reported ouf-of-order issues bisected to commit ba27b4cdaaa6 |
| ("net: dev: introduce support for sch BYPASS for lockless qdisc"). |
| I can't find any working solution other than a plain revert. |
| |
| This will introduce some minor performance regressions for |
| pfifo_fast qdisc. I plan to address them in net-next with more |
| indirect call wrapper boilerplate for qdiscs. |
| |
| Reported-by: Ahmad Fatoum <a.fatoum@pengutronix.de> |
| Fixes: ba27b4cdaaa6 ("net: dev: introduce support for sch BYPASS for lockless qdisc") |
| Signed-off-by: Paolo Abeni <pabeni@redhat.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/net/core/dev.c b/net/core/dev.c |
| index ce43ee866cc4..4c709c1fee22 100644 |
| --- a/net/core/dev.c |
| +++ b/net/core/dev.c |
| @@ -3475,26 +3475,8 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q, |
| qdisc_calculate_pkt_len(skb, q); |
| |
| if (q->flags & TCQ_F_NOLOCK) { |
| - if ((q->flags & TCQ_F_CAN_BYPASS) && READ_ONCE(q->empty) && |
| - qdisc_run_begin(q)) { |
| - if (unlikely(test_bit(__QDISC_STATE_DEACTIVATED, |
| - &q->state))) { |
| - __qdisc_drop(skb, &to_free); |
| - rc = NET_XMIT_DROP; |
| - goto end_run; |
| - } |
| - qdisc_bstats_cpu_update(q, skb); |
| - |
| - rc = NET_XMIT_SUCCESS; |
| - if (sch_direct_xmit(skb, q, dev, txq, NULL, true)) |
| - __qdisc_run(q); |
| - |
| -end_run: |
| - qdisc_run_end(q); |
| - } else { |
| - rc = q->enqueue(skb, q, &to_free) & NET_XMIT_MASK; |
| - qdisc_run(q); |
| - } |
| + rc = q->enqueue(skb, q, &to_free) & NET_XMIT_MASK; |
| + qdisc_run(q); |
| |
| if (unlikely(to_free)) |
| kfree_skb_list(to_free); |
| -- |
| 2.7.4 |
| |