Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752110AbcDFROJ (ORCPT ); Wed, 6 Apr 2016 13:14:09 -0400 Received: from mail-yw0-f175.google.com ([209.85.161.175]:33490 "EHLO mail-yw0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750847AbcDFROH (ORCPT ); Wed, 6 Apr 2016 13:14:07 -0400 MIME-Version: 1.0 In-Reply-To: <1459948214-735-1-git-send-email-larper@axis.com> References: <1459948214-735-1-git-send-email-larper@axis.com> Date: Wed, 6 Apr 2016 10:14:03 -0700 Message-ID: Subject: Re: [PATCH net] net: sched: do not requeue a NULL skb From: Cong Wang To: Lars Persson Cc: Linux Kernel Network Developers , Jamal Hadi Salim , LKML , Lars Persson Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1103 Lines: 29 On Wed, Apr 6, 2016 at 6:10 AM, Lars Persson wrote: > A failure in validate_xmit_skb_list() triggered an unconditional call > to dev_requeue_skb with skb=NULL. This slowly grows the queue > discipline's qlen count until all traffic through the queue stops. > Sounds reasonable. > Fixes: 55a93b3ea780 ("qdisc: validate skb without holding lock") > Signed-off-by: Lars Persson > --- > net/sched/sch_generic.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c > index f18c350..1031536 100644 > --- a/net/sched/sch_generic.c > +++ b/net/sched/sch_generic.c > @@ -165,6 +165,9 @@ int sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q, > skb = dev_hard_start_xmit(skb, dev, txq, &ret); > > HARD_TX_UNLOCK(dev, txq); > + } else { > + spin_lock(root_lock); > + return qdisc_qlen(q); I think we should return 0 for this failure case so that qdisc_restart() will stop. How about teaching dev_requeue_skb() to skip skb==NULL case?