Message ID | 1399369056-1632-1-git-send-email-yangyingliang@huawei.com |
---|---|
State | Rejected, archived |
Delegated to: | David Miller |
Headers | show |
On Tue, 2014-05-06 at 17:37 +0800, Yang Yingliang wrote: > When packets are dropped, backlog and drops statistic of qdisc > need be changed. Replace kfree_skb() with qdisc_drop() for > increasing drops. > > Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> > --- > diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c > index 0bf432c782c1..83abd4cd10cd 100644 > --- a/net/sched/sch_fq_codel.c > +++ b/net/sched/sch_fq_codel.c > @@ -344,7 +344,8 @@ static int fq_codel_change(struct Qdisc *sch, struct nlattr *opt) > while (sch->q.qlen > sch->limit) { > struct sk_buff *skb = fq_codel_dequeue(sch); > > - kfree_skb(skb); > + sch->qstats.backlog -= qdisc_pkt_len(skb); Hmmm... please describe how you tested this change ? > + qdisc_drop(skb, sch); > q->cstats.drop_count++; > } > qdisc_tree_decrease_qlen(sch, q->cstats.drop_count); -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 2014/5/6 21:58, Eric Dumazet wrote: > On Tue, 2014-05-06 at 17:37 +0800, Yang Yingliang wrote: >> When packets are dropped, backlog and drops statistic of qdisc >> need be changed. Replace kfree_skb() with qdisc_drop() for >> increasing drops. >> >> Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> >> --- > > >> diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c >> index 0bf432c782c1..83abd4cd10cd 100644 >> --- a/net/sched/sch_fq_codel.c >> +++ b/net/sched/sch_fq_codel.c >> @@ -344,7 +344,8 @@ static int fq_codel_change(struct Qdisc *sch, struct nlattr *opt) >> while (sch->q.qlen > sch->limit) { >> struct sk_buff *skb = fq_codel_dequeue(sch); >> >> - kfree_skb(skb); >> + sch->qstats.backlog -= qdisc_pkt_len(skb); > > Hmmm... please describe how you tested this change ? Compiled only. The packet is dropped, so I think the backlog should be decreased. Regards, Yang > >> + qdisc_drop(skb, sch); >> q->cstats.drop_count++; >> } >> qdisc_tree_decrease_qlen(sch, q->cstats.drop_count); > > > > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, 2014-05-08 at 10:08 +0800, Yang Yingliang wrote: > On 2014/5/6 21:58, Eric Dumazet wrote: > > On Tue, 2014-05-06 at 17:37 +0800, Yang Yingliang wrote: > >> When packets are dropped, backlog and drops statistic of qdisc > >> need be changed. Replace kfree_skb() with qdisc_drop() for > >> increasing drops. > >> > >> Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> > >> --- > > > > > >> diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c > >> index 0bf432c782c1..83abd4cd10cd 100644 > >> --- a/net/sched/sch_fq_codel.c > >> +++ b/net/sched/sch_fq_codel.c > >> @@ -344,7 +344,8 @@ static int fq_codel_change(struct Qdisc *sch, struct nlattr *opt) > >> while (sch->q.qlen > sch->limit) { > >> struct sk_buff *skb = fq_codel_dequeue(sch); > >> > >> - kfree_skb(skb); > >> + sch->qstats.backlog -= qdisc_pkt_len(skb); > > > > Hmmm... please describe how you tested this change ? > > Compiled only. The packet is dropped, so I think the backlog should be decreased. Well, please test your patches then, and read again the code, because you add a bug here. Thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/sched/sch_fq.c b/net/sched/sch_fq.c index 23c682b42f99..958ef7d4b825 100644 --- a/net/sched/sch_fq.c +++ b/net/sched/sch_fq.c @@ -714,7 +714,7 @@ static int fq_change(struct Qdisc *sch, struct nlattr *opt) if (!skb) break; - kfree_skb(skb); + qdisc_drop(skb, sch); drop_count++; } qdisc_tree_decrease_qlen(sch, drop_count); diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c index 0bf432c782c1..83abd4cd10cd 100644 --- a/net/sched/sch_fq_codel.c +++ b/net/sched/sch_fq_codel.c @@ -344,7 +344,8 @@ static int fq_codel_change(struct Qdisc *sch, struct nlattr *opt) while (sch->q.qlen > sch->limit) { struct sk_buff *skb = fq_codel_dequeue(sch); - kfree_skb(skb); + sch->qstats.backlog -= qdisc_pkt_len(skb); + qdisc_drop(skb, sch); q->cstats.drop_count++; } qdisc_tree_decrease_qlen(sch, q->cstats.drop_count); diff --git a/net/sched/sch_hhf.c b/net/sched/sch_hhf.c index edee03d922e2..a9051d0fff52 100644 --- a/net/sched/sch_hhf.c +++ b/net/sched/sch_hhf.c @@ -592,7 +592,7 @@ static int hhf_change(struct Qdisc *sch, struct nlattr *opt) while (sch->q.qlen > sch->limit) { struct sk_buff *skb = hhf_dequeue(sch); - kfree_skb(skb); + qdisc_drop(skb, sch); } qdisc_tree_decrease_qlen(sch, qlen - sch->q.qlen);
When packets are dropped, backlog and drops statistic of qdisc need be changed. Replace kfree_skb() with qdisc_drop() for increasing drops. Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> --- net/sched/sch_fq.c | 2 +- net/sched/sch_fq_codel.c | 3 ++- net/sched/sch_hhf.c | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-)