Summary: At the end of sch_direct_xmit(), we are in the else path of !dev_xmit_complete(ret), which means ret == NETDEV_TX_OK. The following condition will always fail and netif_xmit_frozen_or_stopped() is not checked at all.
if (ret && netif_xmit_frozen_or_stopped(txq)) return false; In this patch, this condition is fixed as: if (netif_xmit_frozen_or_stopped(txq)) return false; and further simplifies the code as: return !netif_xmit_frozen_or_stopped(txq); Fixes: 29b86cdac00a ("net: sched: remove remaining uses for qdisc_qlen in xmit path") Cc: John Fastabend <john.fastab...@gmail.com> Cc: David S. Miller <da...@davemloft.net> Signed-off-by: Song Liu <songliubrav...@fb.com> --- net/sched/sch_generic.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 39c144b..8261d48 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -346,10 +346,7 @@ bool sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q, return false; } - if (ret && netif_xmit_frozen_or_stopped(txq)) - return false; - - return true; + return !netif_xmit_frozen_or_stopped(txq); } /* -- 2.9.5