Skip to contentSkip to conversation

pkt_sched: sch_generic: Kfree gso_skb in qdisc_reset()

PATCH Applied Jarek Poplawski 2 participants 4 messages Nov 3, 2008

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 pkt_sched: sch_generic: Kfree gso_skb in qdisc_reset()

pkt_sched: sch_generic: Kfree gso_skb in qdisc_reset()

Since gso_skb is re-used for qdisc_peek_dequeued(), and this skb is counted in the qdisc->q.qlen, it has to be kfreed during qdisc_reset() when qlen is zeroed.

---

net/sched/sch_generic.c +2 -0
index 318c9f6..cdf064b 100644
@@ -542,6 +542,8 @@ void qdisc_reset(struct Qdisc *qdisc)
 
 	if (ops->reset)
 		ops->reset(qdisc);
+
+	kfree_skb(qdisc->gso_skb);
 }
 EXPORT_SYMBOL(qdisc_reset);
 
maintainer
#1 lore raw

From: Jarek Poplawski <[email protected]>
Date: Mon, 3 Nov 2008 09:02:25 +0000

Quoted 7 lines

pkt_sched: sch_generic: Kfree gso_skb in qdisc_reset()

Since gso_skb is re-used for qdisc_peek_dequeued(), and this skb is counted in the qdisc->q.qlen, it has to be kfreed during qdisc_reset() when qlen is zeroed.

Isn't it necessary, or at least more tidy, to NULL out this value too?

#2 lore raw

On Mon, Nov 03, 2008 at 01:27:55AM -0800, David Miller wrote:
...

Quoted 2 lines

Isn't it necessary, or at least more tidy, to NULL out this value too?

Sure it is!

Thanks!
Jarek P.
-----------------------> take 2

pkt_sched: sch_generic: Kfree gso_skb in qdisc_reset()

Since gso_skb is re-used for qdisc_peek_dequeued(), and this skb is counted in the qdisc->q.qlen, it has to be kfreed during qdisc_reset() when qlen is zeroed.

With help from David S. Miller <[email protected]>

---

net/sched/sch_generic.c +3 -0
index 318c9f6..1192da2 100644
@@ -542,6 +542,9 @@ void qdisc_reset(struct Qdisc *qdisc)
 
 	if (ops->reset)
 		ops->reset(qdisc);
+
+	kfree_skb(qdisc->gso_skb);
+	qdisc->gso_skb = NULL;
 }
 EXPORT_SYMBOL(qdisc_reset);
 
maintainer Applied
#3 lore raw

From: Jarek Poplawski <[email protected]>
Date: Mon, 3 Nov 2008 09:48:30 +0000

Quoted 9 lines

pkt_sched: sch_generic: Kfree gso_skb in qdisc_reset()

Since gso_skb is re-used for qdisc_peek_dequeued(), and this skb is counted in the qdisc->q.qlen, it has to be kfreed during qdisc_reset() when qlen is zeroed.

With help from David S. Miller <[email protected]>

Applied, thanks Jarek.