Re: [PATCH v2 2/3] net_sched: Add accessor function for packet length for qdiscs
From: Jarek Poplawski <hidden>
Date: 2008-07-25 12:03:42
From: Jarek Poplawski <hidden>
Date: 2008-07-25 12:03:42
On Fri, Jul 25, 2008 at 04:52:15AM -0700, David Miller wrote:
From: Jarek Poplawski <redacted> Date: Fri, 25 Jul 2008 11:53:55 +0000quoted
On Fri, Jul 25, 2008 at 11:37:57AM +0000, Jarek Poplawski wrote: As a matter of fact it's a good example: in your patch we have this: + ret = cl->un.leaf.q->enqueue(skb, cl->un.leaf.q); + if (ret == NET_XMIT_DROP) { + sch->qstats.drops++; + cl->qstats.drops++; + } else { + cl->bstats.packets += + skb_is_gso(skb)?skb_shinfo(skb)->gso_segs:1; + cl->bstats.bytes += skb->len; So, if something works like noop_enqueue() and returns NET_XMIT_CN here, we're just using skb after kfree...noop_enqueue() can only be a root qdisc, never a leaf hanging off of a class
OK, sfq does the same.
What TCP depends upon is that DROP means DROP, and that the packet never reached the device and has been freed.
IMHO, TCP should depend on it's skb "refcount". A qdisc, after passing skb to other qdisc shouldn't depend on TCP's "refcount" because not everything has to work like TCP. Jarek P.