diff --git a/net/decnet/dn_table.c b/net/decnet/dn_table.c
index d8ea583076cf7f6b7b6bdae42e785fdd5385994f..bd0a52dd1d40e65c2c6d905172cb4fc957dd3264 100644
--- a/net/decnet/dn_table.c
+++ b/net/decnet/dn_table.c
@@ -123,11 +123,12 @@ static inline void dn_rebuild_zone(struct dn_zone *dz,
 				   struct dn_fib_node **old_ht,
 				   int old_divisor)
 {
+	struct dn_fib_node *f, **fp, *next;
 	int i;
-	struct dn_fib_node *f, **fp;
 
 	for(i = 0; i < old_divisor; i++) {
-		for(f = old_ht[i]; f; f = f->fn_next) {
+		for(f = old_ht[i]; f; f = next) {
+			next = f->fn_next;
 			for(fp = dn_chain_p(f->fn_key, dz);
 				*fp && dn_key_leq((*fp)->fn_key, f->fn_key);
 				fp = &(*fp)->fn_next)