X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fnet%2Fpkt_act.h;h=b225d8472b7e7536fbf4baa610eeec139ee59a4e;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=e7e7da3550129ecfd7de7643fb07ad21a76f5223;hpb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;p=linux-2.6.git diff --git a/include/net/pkt_act.h b/include/net/pkt_act.h index e7e7da355..b225d8472 100644 --- a/include/net/pkt_act.h +++ b/include/net/pkt_act.h @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include @@ -15,7 +15,6 @@ #include #include #include -#include #include #include #include @@ -60,7 +59,7 @@ tcf_hash_destroy(struct tcf_st *p) *p1p = p->next; write_unlock_bh(&tcf_t_lock); #ifdef CONFIG_NET_ESTIMATOR - qdisc_kill_estimator(&p->stats); + gen_kill_estimator(&p->bstats, &p->rate_est); #endif kfree(p); return; @@ -218,25 +217,22 @@ tcf_hash_search(struct tc_action *a, u32 index) #ifdef CONFIG_NET_ACT_INIT static inline struct tcf_st * -tcf_hash_check(struct tc_st *parm, struct tc_action *a, int ovr, int bind) +tcf_hash_check(u32 index, struct tc_action *a, int ovr, int bind) { struct tcf_st *p = NULL; - if (parm->index && (p = tcf_hash_lookup(parm->index)) != NULL) { - spin_lock(&p->lock); + if (index && (p = tcf_hash_lookup(index)) != NULL) { if (bind) { p->bindcnt++; p->refcnt++; } - spin_unlock(&p->lock); - a->priv = (void *) p; + a->priv = p; } return p; } static inline struct tcf_st * -tcf_hash_create(struct tc_st *parm, struct rtattr *est, struct tc_action *a, int size, int ovr, int bind) +tcf_hash_create(u32 index, struct rtattr *est, struct tc_action *a, int size, int ovr, int bind) { - unsigned h; struct tcf_st *p = NULL; p = kmalloc(size, GFP_KERNEL); @@ -252,32 +248,25 @@ tcf_hash_create(struct tc_st *parm, struct rtattr *est, struct tc_action *a, int spin_lock_init(&p->lock); p->stats_lock = &p->lock; - p->index = parm->index ? : tcf_hash_new_index(); + p->index = index ? : tcf_hash_new_index(); p->tm.install = jiffies; p->tm.lastuse = jiffies; #ifdef CONFIG_NET_ESTIMATOR - if (est) { - qdisc_new_estimator(&p->stats, p->stats_lock, est); - } + if (est) + gen_new_estimator(&p->bstats, &p->rate_est, p->stats_lock, est); #endif - h = tcf_hash(p->index); - write_lock_bh(&tcf_t_lock); - p->next = tcf_ht[h]; - tcf_ht[h] = p; - write_unlock_bh(&tcf_t_lock); - a->priv = (void *) p; return p; } -static inline struct tcf_st * -tcf_hash_init(struct tc_st *parm, struct rtattr *est, struct tc_action *a, int size, int ovr, int bind) +static inline void tcf_hash_insert(struct tcf_st *p) { - struct tcf_st *p = tcf_hash_check (parm,a,ovr,bind); + unsigned h = tcf_hash(p->index); - if (!p) - p = tcf_hash_create(parm, est, a, size, ovr, bind); - return p; + write_lock_bh(&tcf_t_lock); + p->next = tcf_ht[h]; + tcf_ht[h] = p; + write_unlock_bh(&tcf_t_lock); } #endif