Thread (44 messages) 44 messages, 6 authors, 2008-08-19

Re: qdisc_enqueue, NET_XMIT_SUCCESS and kfree_skb

From: David Miller <davem@davemloft.net>
Date: 2008-08-07 13:15:04

From: Jarek Poplawski <redacted>
Date: Thu, 7 Aug 2008 10:09:10 +0000
On Wed, Aug 06, 2008 at 10:09:11PM -0700, David Miller wrote:
quoted
From: David Miller <davem@davemloft.net>
Date: Wed, 06 Aug 2008 20:26:36 -0700 (PDT)
quoted
I still haven't seen anyone suggest creating a __NET_XMIT_KFREE_SKB to
fix this most rediculious problem.

I'm still waiting...
Here is what it might look like.  I haven't tried to boot this,
but the only non-trivial case was SFQ's congestion drop code.
After some checking it looks mostly OK to me, but one thing: in
sch_gred gred_drop() calls qdisc_drop(), so now it needs kfree_skb().
BTW, maybe it would be nicer to add __qdisc_drop() for these new
things?
qdisc_drop() sets the new __NET_XMIT_KFREE bit, but sch_gred wants to
return NET_XMIT_CN, so I OR'd in the __NET_XMIT_KFREE bit there.
There is also some doubt about differences between ->enqueue() and
->requeue() wrt. kfree_skb() and returning codes: maybe it would be
better (for uniformity) to add similar changes to requeues (and
dev_requeue_skb()) as well?
I did not annotate ->requeue() nor remove kfree_skb() calls there
and this was intentional.

The lifetime issue only exists in the ->enqueue() path.

In the long term we could add a wrapper around root level ->requeue()
and do the bit handling just like ->enqueue(), sure.
I don't know if it's worth to mention, but now, if somebody really
uses this sch_blackhole under some upper qdiscs the stats will change.
That might even be useful.

As it stands it was borderline buggy.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help