Thread (10 messages) flat view 10 messages, 6 authors, 2021-04-02

Re: Packet gets stuck in NOLOCK pfifo_fast qdisc

From: Cong Wang <hidden>
Date: 2020-09-10 20:19:00
Also in: lkml

Possibly related (same subject, not in this thread)

On Thu, Sep 3, 2020 at 10:08 PM John Fastabend [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Maybe this would unlock us,
diff --git a/net/core/dev.c b/net/core/dev.c
index 7df6c9617321..9b09429103f1 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3749,7 +3749,7 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q,

        if (q->flags & TCQ_F_NOLOCK) {
                rc = q->enqueue(skb, q, &to_free) & NET_XMIT_MASK;
-               qdisc_run(q);
+               __qdisc_run(q);

                if (unlikely(to_free))
                        kfree_skb_list(to_free);

Per other thread we also need the state deactivated check added
back.
I guess no, because pfifo_dequeue() seems to require q->seqlock,
according to comments in qdisc_run(), so we can not just get rid of
qdisc_run_begin()/qdisc_run_end() here.

Thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help