diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-06-25 01:20:01 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-06-25 01:20:01 +0000 |
commit | 3797ba0b62debb71af4606910acacc9896a9ae3b (patch) | |
tree | 414eea76253c7871bfdf3bd9d1817771eb40917c /net/decnet | |
parent | 2b6c0c580795a4404f72d2a794214dd9e080709d (diff) |
Merge with Linux 2.4.0-test2.
Diffstat (limited to 'net/decnet')
-rw-r--r-- | net/decnet/af_decnet.c | 11 | ||||
-rw-r--r-- | net/decnet/dn_neigh.c | 4 | ||||
-rw-r--r-- | net/decnet/dn_route.c | 23 |
3 files changed, 21 insertions, 17 deletions
diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c index ab244350e..5322b3a89 100644 --- a/net/decnet/af_decnet.c +++ b/net/decnet/af_decnet.c @@ -285,7 +285,7 @@ int dn_username2sockaddr(unsigned char *data, int len, struct sockaddr_dn *sdn, switch(*fmt) { case 0: - sdn->sdn_objnum = dn_htons(type); + sdn->sdn_objnum = type; return 2; case 1: namel = 16; @@ -526,10 +526,6 @@ static void dn_destroy_sock(struct sock *sk) { struct dn_scp *scp = &sk->protinfo.dn; - if (sk->dead) - return; - - sk->dead = 1; scp->nsp_rxtshift = 0; /* reset back off */ if (sk->socket) { @@ -661,11 +657,12 @@ dn_release(struct socket *sock) struct sock *sk = sock->sk; if (sk) { + sock_orphan(sk); + sock_hold(sk); lock_sock(sk); - sock->sk = NULL; - sk->socket = NULL; dn_destroy_sock(sk); release_sock(sk); + sock_put(sk); } return 0; diff --git a/net/decnet/dn_neigh.c b/net/decnet/dn_neigh.c index b2c6b2051..00c27cdec 100644 --- a/net/decnet/dn_neigh.c +++ b/net/decnet/dn_neigh.c @@ -441,7 +441,7 @@ int dn_neigh_router_hello(struct sk_buff *skb) struct dn_dev *dn_db; dn_address src; - src = dn_eth2dn(msg->id); + src = dn_htons(dn_eth2dn(msg->id)); neigh = __neigh_lookup(&dn_neigh_table, &src, skb->dev, 1); @@ -498,7 +498,7 @@ int dn_neigh_endnode_hello(struct sk_buff *skb) struct dn_neigh *dn; dn_address src; - src = dn_eth2dn(msg->id); + src = dn_htons(dn_eth2dn(msg->id)); neigh = __neigh_lookup(&dn_neigh_table, &src, skb->dev, 1); diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c index 11c67f0c5..5ce55ebb2 100644 --- a/net/decnet/dn_route.c +++ b/net/decnet/dn_route.c @@ -131,7 +131,7 @@ static __inline__ unsigned dn_hash(unsigned short src, unsigned short dst) return dn_rt_hash_mask & (unsigned)tmp; } -static void dn_dst_check_expire(unsigned long dummy) +static void SMP_TIMER_NAME(dn_dst_check_expire)(unsigned long dummy) { int i; struct dn_route *rt, **rtp; @@ -142,10 +142,12 @@ static void dn_dst_check_expire(unsigned long dummy) rtp = &dn_rt_hash_table[i].chain; write_lock(&dn_rt_hash_table[i].lock); - for(;(rt=*rtp); rtp = &rt->u.rt_next) { + while((rt=*rtp) != NULL) { if (atomic_read(&rt->u.dst.__refcnt) || - (now - rt->u.dst.lastuse) < expire) + (now - rt->u.dst.lastuse) < expire) { + rtp = &rt->u.rt_next; continue; + } *rtp = rt->u.rt_next; rt->u.rt_next = NULL; dst_free(&rt->u.dst); @@ -156,10 +158,11 @@ static void dn_dst_check_expire(unsigned long dummy) break; } - dn_route_timer.expires = now + decnet_dst_gc_interval * HZ; - add_timer(&dn_route_timer); + mod_timer(&dn_route_timer, now + decnet_dst_gc_interval * HZ); } +SMP_TIMER_DEFINE(dn_dst_check_expire, dn_dst_task); + static int dn_dst_gc(void) { struct dn_route *rt, **rtp; @@ -172,10 +175,12 @@ static int dn_dst_gc(void) write_lock_bh(&dn_rt_hash_table[i].lock); rtp = &dn_rt_hash_table[i].chain; - for(; (rt=*rtp); rtp = &rt->u.rt_next) { + while((rt=*rtp) != NULL) { if (atomic_read(&rt->u.dst.__refcnt) || - (now - rt->u.dst.lastuse) < expire) + (now - rt->u.dst.lastuse) < expire) { + rtp = &rt->u.rt_next; continue; + } *rtp = rt->u.rt_next; rt->u.rt_next = NULL; dst_free(&rt->u.dst); @@ -229,7 +234,7 @@ static void dn_insert_route(struct dn_route *rt, unsigned hash) write_unlock_bh(&dn_rt_hash_table[hash].lock); } -void dn_run_flush(unsigned long dummy) +void SMP_TIMER_NAME(dn_run_flush)(unsigned long dummy) { int i; struct dn_route *rt, *next; @@ -251,6 +256,8 @@ nothing_to_declare: } } +SMP_TIMER_DEFINE(dn_run_flush, dn_flush_task); + static spinlock_t dn_rt_flush_lock = SPIN_LOCK_UNLOCKED; void dn_rt_cache_flush(int delay) |