patch-2.4.0-test2 linux/net/decnet/dn_route.c

Next file: linux/net/ethernet/eth.c
Previous file: linux/net/decnet/dn_nsp_in.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test1/linux/net/decnet/dn_route.c linux/net/decnet/dn_route.c
@@ -131,7 +131,7 @@
 	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 @@
 		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 @@
 			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 @@
 		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 @@
 	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;
@@ -250,6 +255,8 @@
 		write_unlock_bh(&dn_rt_hash_table[i].lock);
 	}
 }
+
+SMP_TIMER_DEFINE(dn_run_flush, dn_flush_task);
 
 static spinlock_t dn_rt_flush_lock = SPIN_LOCK_UNLOCKED;
 

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)