Skip to contentSkip to conversation

rose node number was never decreased

PATCH In review Bernard F6BVP 2 participants 2 messages Aug 26, 2010

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 rose node number was never decreased

When a ROSE node was deleted, node number was not decremented and addr kept going up when a new node was added.

/proc/net/rose_neigh

addr  callsign  dev  count use mode restart  t0  tf digipeaters
00007 F5KBW-9   ax0      1   0  DTE      no   0   0
00006 F6BVP-11  ax0      2   0  DTE      no   0   0
00005 F6BVP-9   ax0      2   0  DTE      no   0   0
00001 RSLOOP-0  ???      0   0  DCE     yes   0   0

With this patch, rose node number is correctly decreased when nodes are deleted and new ones added :

/proc/net/rose_neigh

addr  callsign  dev  count use mode restart  t0  tf digipeaters
00004 F5KBW-9   ax0      1   0  DTE      no   0   0
00003 F6BVP-11  ax0      2   0  DTE      no   0   0
00002 F6BVP-9   ax0      2   0  DTE      no   0   0
00001 RSLOOP-0  ???      0   0  DCE     yes   0   0
net/rose/rose_route.c +2 -0
@@ -240,6 +240,7 @@
 			ax25_cb_put(rose_neigh->ax25);
 		kfree(rose_neigh->digipeat);
 		kfree(rose_neigh);
+		rose_neigh_no--;
 		return;
 	}
 
@@ -250,6 +251,7 @@
 				ax25_cb_put(rose_neigh->ax25);
 			kfree(rose_neigh->digipeat);
 			kfree(rose_neigh);
+			rose_neigh_no--;
 			return;
 		}
 
maintainer
#1 lore raw

From: Bernard F6BVP <[email protected]>
Date: Fri, 27 Aug 2010 00:15:01 +0200

Quoted 14 lines

When a ROSE node was deleted, node number was not decremented and addr kept going up when a new node was added.

/proc/net/rose_neigh

addr  callsign  dev  count use mode restart  t0  tf digipeaters
00007 F5KBW-9   ax0      1   0  DTE      no   0   0
00006 F6BVP-11  ax0      2   0  DTE      no   0   0
00005 F6BVP-9   ax0      2   0  DTE      no   0   0
00001 RSLOOP-0  ???      0   0  DCE     yes   0   0

With this patch, rose node number is correctly decreased when nodes are deleted and new ones added :

Quoted 8 lines

/proc/net/rose_neigh

addr  callsign  dev  count use mode restart  t0  tf digipeaters
00004 F5KBW-9   ax0      1   0  DTE      no   0   0
00003 F6BVP-11  ax0      2   0  DTE      no   0   0
00002 F6BVP-9   ax0      2   0  DTE      no   0   0
00001 RSLOOP-0  ???      0   0  DCE     yes   0   0

I don't see how this patch is correct.

The whole point of the rose_neigh_no seems to be to make sure that unique numbers are given to the neighbours.

But with your patch, we can end up easily with neighbours assigned the same number. Consider adding 3 nodes, and let's say they get rose_neigh_no 1, 2, and 3

A: neigh_no 1
B: neigh_no 2
C: neigh_no 3

Delete B, now rose_neigh_no with your patch applied will be '3'. Next, add D, which will get neigh_no of '3' which is the same as what C has.

This can't be right.

What the code wants is an allocation of unique IDs and a simple bitmap along with find_next_zero_bit(), set_bit(), and clear_bit() ought to do the trick.