From fee289beb48c8102c987d0c7d66d80b56a7c9cd6 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Sun, 17 Aug 2008 22:31:26 -0700 Subject: [PATCH] --- yaml --- r: 108815 b: refs/heads/master c: 1e0d5a5747772182d1bb2525d8153da640fdfb58 h: refs/heads/master i: 108813: 70aa474274f621b9da0fbb42935e53849470d933 108811: d6f4fda2931354cb634e73f88071d624b9ab0ddd 108807: 99f11bdfe0274ff094a62b5cfcd27c30fce5de42 108799: b3dd26fe354d7a61876f38cd6b7b4ba9a0a38a0c v: v3 --- [refs] | 2 +- trunk/include/net/sch_generic.h | 1 - trunk/net/sched/sch_generic.c | 27 +++++++++------------------ 3 files changed, 10 insertions(+), 20 deletions(-) diff --git a/[refs] b/[refs] index fc9a24fcb0dd..8c47c340cb4e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3a76e3716b4e571f5d91a20b6afb412560599083 +refs/heads/master: 1e0d5a5747772182d1bb2525d8153da640fdfb58 diff --git a/trunk/include/net/sch_generic.h b/trunk/include/net/sch_generic.h index 757ab087adbf..84d25f2e6188 100644 --- a/trunk/include/net/sch_generic.h +++ b/trunk/include/net/sch_generic.h @@ -61,7 +61,6 @@ struct Qdisc struct gnet_stats_basic bstats; struct gnet_stats_queue qstats; struct gnet_stats_rate_est rate_est; - struct rcu_head q_rcu; int (*reshape_fail)(struct sk_buff *skb, struct Qdisc *q); diff --git a/trunk/net/sched/sch_generic.c b/trunk/net/sched/sch_generic.c index 30b76aec723b..6f96b7bc0809 100644 --- a/trunk/net/sched/sch_generic.c +++ b/trunk/net/sched/sch_generic.c @@ -518,14 +518,19 @@ void qdisc_reset(struct Qdisc *qdisc) } EXPORT_SYMBOL(qdisc_reset); -/* this is the rcu callback function to clean up a qdisc when there - * are no further references to it */ +/* Under qdisc_lock(qdisc) and BH! */ -static void __qdisc_destroy(struct rcu_head *head) +void qdisc_destroy(struct Qdisc *qdisc) { - struct Qdisc *qdisc = container_of(head, struct Qdisc, q_rcu); const struct Qdisc_ops *ops = qdisc->ops; + if (qdisc->flags & TCQ_F_BUILTIN || + !atomic_dec_and_test(&qdisc->refcnt)) + return; + + if (qdisc->parent) + list_del(&qdisc->list); + #ifdef CONFIG_NET_SCHED qdisc_put_stab(qdisc->stab); #endif @@ -542,20 +547,6 @@ static void __qdisc_destroy(struct rcu_head *head) kfree((char *) qdisc - qdisc->padded); } - -/* Under qdisc_lock(qdisc) and BH! */ - -void qdisc_destroy(struct Qdisc *qdisc) -{ - if (qdisc->flags & TCQ_F_BUILTIN || - !atomic_dec_and_test(&qdisc->refcnt)) - return; - - if (qdisc->parent) - list_del(&qdisc->list); - - call_rcu(&qdisc->q_rcu, __qdisc_destroy); -} EXPORT_SYMBOL(qdisc_destroy); static bool dev_all_qdisc_sleeping_noop(struct net_device *dev)