aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/node.c
diff options
context:
space:
mode:
authorJon Maloy <jon.maloy@ericsson.com>2018-07-06 14:10:03 -0400
committerDavid S. Miller <davem@davemloft.net>2018-07-07 06:49:01 -0400
commit2a57f182420174c7fd4b19db979a2d135231a963 (patch)
tree2995b49645166b4f744bfc775079b00b6f6fdf78 /net/tipc/node.c
parent0f62aeec0f05e579ea9fd5c09edda48bd8bed73a (diff)
tipc: fix wrong return value from function tipc_node_try_addr()
The function for checking if there is an node address conflict is supposed to return a suggestion for a new address if it finds a conflict, and zero otherwise. But in case the peer being checked is previously unknown it does instead return a "suggestion" for the checked address itself. This results in a DSC_TRIAL_FAIL_MSG being sent unecessarily to the peer, and sometimes makes the trial period starting over again. Fixes: 25b0b9c4e835 ("tipc: handle collisions of 32-bit node address hash values") Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/node.c')
-rw-r--r--net/tipc/node.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/net/tipc/node.c b/net/tipc/node.c
index 6a44eb812baf..0453bd451ce8 100644
--- a/net/tipc/node.c
+++ b/net/tipc/node.c
@@ -797,6 +797,7 @@ static u32 tipc_node_suggest_addr(struct net *net, u32 addr)
797} 797}
798 798
799/* tipc_node_try_addr(): Check if addr can be used by peer, suggest other if not 799/* tipc_node_try_addr(): Check if addr can be used by peer, suggest other if not
800 * Returns suggested address if any, otherwise 0
800 */ 801 */
801u32 tipc_node_try_addr(struct net *net, u8 *id, u32 addr) 802u32 tipc_node_try_addr(struct net *net, u8 *id, u32 addr)
802{ 803{
@@ -819,12 +820,14 @@ u32 tipc_node_try_addr(struct net *net, u8 *id, u32 addr)
819 if (n) { 820 if (n) {
820 addr = n->addr; 821 addr = n->addr;
821 tipc_node_put(n); 822 tipc_node_put(n);
823 return addr;
822 } 824 }
823 /* Even this node may be in trial phase */ 825
826 /* Even this node may be in conflict */
824 if (tn->trial_addr == addr) 827 if (tn->trial_addr == addr)
825 return tipc_node_suggest_addr(net, addr); 828 return tipc_node_suggest_addr(net, addr);
826 829
827 return addr; 830 return 0;
828} 831}
829 832
830void tipc_node_check_dest(struct net *net, u32 addr, 833void tipc_node_check_dest(struct net *net, u32 addr,