net: use rtnl_register_module where needed
[linux-2.6-microblaze.git] / net / decnet / dn_route.c
index b36dcea..73160d4 100644 (file)
@@ -125,7 +125,7 @@ static struct neighbour *dn_dst_neigh_lookup(const struct dst_entry *dst,
                                             struct sk_buff *skb,
                                             const void *daddr);
 static int dn_route_input(struct sk_buff *);
-static void dn_run_flush(unsigned long dummy);
+static void dn_run_flush(struct timer_list *unused);
 
 static struct dn_rt_hash_bucket *dn_rt_hash_table;
 static unsigned int dn_rt_hash_mask;
@@ -183,7 +183,7 @@ static __inline__ unsigned int dn_hash(__le16 src, __le16 dst)
        return dn_rt_hash_mask & (unsigned int)tmp;
 }
 
-static void dn_dst_check_expire(unsigned long dummy)
+static void dn_dst_check_expire(struct timer_list *unused)
 {
        int i;
        struct dn_route *rt;
@@ -199,11 +199,11 @@ static void dn_dst_check_expire(unsigned long dummy)
                                                lockdep_is_held(&dn_rt_hash_table[i].lock))) != NULL) {
                        if (atomic_read(&rt->dst.__refcnt) > 1 ||
                            (now - rt->dst.lastuse) < expire) {
-                               rtp = &rt->dst.dn_next;
+                               rtp = &rt->dn_next;
                                continue;
                        }
-                       *rtp = rt->dst.dn_next;
-                       rt->dst.dn_next = NULL;
+                       *rtp = rt->dn_next;
+                       rt->dn_next = NULL;
                        dst_dev_put(&rt->dst);
                        dst_release(&rt->dst);
                }
@@ -233,11 +233,11 @@ static int dn_dst_gc(struct dst_ops *ops)
                                                lockdep_is_held(&dn_rt_hash_table[i].lock))) != NULL) {
                        if (atomic_read(&rt->dst.__refcnt) > 1 ||
                            (now - rt->dst.lastuse) < expire) {
-                               rtp = &rt->dst.dn_next;
+                               rtp = &rt->dn_next;
                                continue;
                        }
-                       *rtp = rt->dst.dn_next;
-                       rt->dst.dn_next = NULL;
+                       *rtp = rt->dn_next;
+                       rt->dn_next = NULL;
                        dst_dev_put(&rt->dst);
                        dst_release(&rt->dst);
                        break;
@@ -333,8 +333,8 @@ static int dn_insert_route(struct dn_route *rt, unsigned int hash, struct dn_rou
                                                lockdep_is_held(&dn_rt_hash_table[hash].lock))) != NULL) {
                if (compare_keys(&rth->fld, &rt->fld)) {
                        /* Put it first */
-                       *rthp = rth->dst.dn_next;
-                       rcu_assign_pointer(rth->dst.dn_next,
+                       *rthp = rth->dn_next;
+                       rcu_assign_pointer(rth->dn_next,
                                           dn_rt_hash_table[hash].chain);
                        rcu_assign_pointer(dn_rt_hash_table[hash].chain, rth);
 
@@ -345,10 +345,10 @@ static int dn_insert_route(struct dn_route *rt, unsigned int hash, struct dn_rou
                        *rp = rth;
                        return 0;
                }
-               rthp = &rth->dst.dn_next;
+               rthp = &rth->dn_next;
        }
 
-       rcu_assign_pointer(rt->dst.dn_next, dn_rt_hash_table[hash].chain);
+       rcu_assign_pointer(rt->dn_next, dn_rt_hash_table[hash].chain);
        rcu_assign_pointer(dn_rt_hash_table[hash].chain, rt);
 
        dst_hold_and_use(&rt->dst, now);
@@ -357,7 +357,7 @@ static int dn_insert_route(struct dn_route *rt, unsigned int hash, struct dn_rou
        return 0;
 }
 
-static void dn_run_flush(unsigned long dummy)
+static void dn_run_flush(struct timer_list *unused)
 {
        int i;
        struct dn_route *rt, *next;
@@ -369,8 +369,8 @@ static void dn_run_flush(unsigned long dummy)
                        goto nothing_to_declare;
 
                for(; rt; rt = next) {
-                       next = rcu_dereference_raw(rt->dst.dn_next);
-                       RCU_INIT_POINTER(rt->dst.dn_next, NULL);
+                       next = rcu_dereference_raw(rt->dn_next);
+                       RCU_INIT_POINTER(rt->dn_next, NULL);
                        dst_dev_put(&rt->dst);
                        dst_release(&rt->dst);
                }
@@ -1183,6 +1183,7 @@ make_route:
        if (rt == NULL)
                goto e_nobufs;
 
+       rt->dn_next = NULL;
        memset(&rt->fld, 0, sizeof(rt->fld));
        rt->fld.saddr        = oldflp->saddr;
        rt->fld.daddr        = oldflp->daddr;
@@ -1252,7 +1253,7 @@ static int __dn_route_output_key(struct dst_entry **pprt, const struct flowidn *
        if (!(flags & MSG_TRYHARD)) {
                rcu_read_lock_bh();
                for (rt = rcu_dereference_bh(dn_rt_hash_table[hash].chain); rt;
-                       rt = rcu_dereference_bh(rt->dst.dn_next)) {
+                       rt = rcu_dereference_bh(rt->dn_next)) {
                        if ((flp->daddr == rt->fld.daddr) &&
                            (flp->saddr == rt->fld.saddr) &&
                            (flp->flowidn_mark == rt->fld.flowidn_mark) &&
@@ -1448,6 +1449,7 @@ make_route:
        if (rt == NULL)
                goto e_nobufs;
 
+       rt->dn_next = NULL;
        memset(&rt->fld, 0, sizeof(rt->fld));
        rt->rt_saddr      = fld.saddr;
        rt->rt_daddr      = fld.daddr;
@@ -1529,7 +1531,7 @@ static int dn_route_input(struct sk_buff *skb)
 
        rcu_read_lock();
        for(rt = rcu_dereference(dn_rt_hash_table[hash].chain); rt != NULL;
-           rt = rcu_dereference(rt->dst.dn_next)) {
+           rt = rcu_dereference(rt->dn_next)) {
                if ((rt->fld.saddr == cb->src) &&
                    (rt->fld.daddr == cb->dst) &&
                    (rt->fld.flowidn_oif == 0) &&
@@ -1749,7 +1751,7 @@ int dn_cache_dump(struct sk_buff *skb, struct netlink_callback *cb)
                rcu_read_lock_bh();
                for(rt = rcu_dereference_bh(dn_rt_hash_table[h].chain), idx = 0;
                        rt;
-                       rt = rcu_dereference_bh(rt->dst.dn_next), idx++) {
+                       rt = rcu_dereference_bh(rt->dn_next), idx++) {
                        if (idx < s_idx)
                                continue;
                        skb_dst_set(skb, dst_clone(&rt->dst));
@@ -1795,7 +1797,7 @@ static struct dn_route *dn_rt_cache_get_next(struct seq_file *seq, struct dn_rou
 {
        struct dn_rt_cache_iter_state *s = seq->private;
 
-       rt = rcu_dereference_bh(rt->dst.dn_next);
+       rt = rcu_dereference_bh(rt->dn_next);
        while (!rt) {
                rcu_read_unlock_bh();
                if (--s->bucket < 0)
@@ -1875,7 +1877,7 @@ void __init dn_route_init(void)
                kmem_cache_create("dn_dst_cache", sizeof(struct dn_route), 0,
                                  SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);
        dst_entries_init(&dn_dst_ops);
-       setup_timer(&dn_route_timer, dn_dst_check_expire, 0);
+       timer_setup(&dn_route_timer, dn_dst_check_expire, 0);
        dn_route_timer.expires = jiffies + decnet_dst_gc_interval * HZ;
        add_timer(&dn_route_timer);
 
@@ -1921,11 +1923,11 @@ void __init dn_route_init(void)
                    &dn_rt_cache_seq_fops);
 
 #ifdef CONFIG_DECNET_ROUTER
-       rtnl_register(PF_DECnet, RTM_GETROUTE, dn_cache_getroute,
-                     dn_fib_dump, 0);
+       rtnl_register_module(THIS_MODULE, PF_DECnet, RTM_GETROUTE,
+                            dn_cache_getroute, dn_fib_dump, 0);
 #else
-       rtnl_register(PF_DECnet, RTM_GETROUTE, dn_cache_getroute,
-                     dn_cache_dump, 0);
+       rtnl_register_module(THIS_MODULE, PF_DECnet, RTM_GETROUTE,
+                            dn_cache_getroute, dn_cache_dump, 0);
 #endif
 }