diff mbox

[net-next] net_sched: increase drops and decrease backlog when packets are dropped

Message ID 1399369056-1632-1-git-send-email-yangyingliang@huawei.com
State Rejected, archived
Delegated to: David Miller
Headers show

Commit Message

Yang Yingliang May 6, 2014, 9:37 a.m. UTC
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(-)

Comments

Eric Dumazet May 6, 2014, 1:58 p.m. UTC | #1
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
Yang Yingliang May 8, 2014, 2:08 a.m. UTC | #2
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
Eric Dumazet May 8, 2014, 2:55 a.m. UTC | #3
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 mbox

Patch

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);