X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fnet%2Fpkt_act.h;h=cf5e4d2e4c21ce77be2a4f7a8f5fd111d651e469;hb=653a9213ae6f303790975dd836d95778aab070de;hp=bf55ad5694ee25dda243a6ee71b61a591719d3ac;hpb=433e2af4175021d339b067f6e7ee0a4e4c4f7e2d;p=linux-2.6.git diff --git a/include/net/pkt_act.h b/include/net/pkt_act.h index bf55ad569..cf5e4d2e4 100644 --- a/include/net/pkt_act.h +++ b/include/net/pkt_act.h @@ -4,7 +4,6 @@ #include #include #include -#include #include #include #include @@ -15,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -218,25 +216,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,31 +247,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) 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