Acked. ///jon
> -----Original Message----- > From: Hoang Le <hoang.h...@dektech.com.au> > Sent: 11-Nov-19 04:24 > To: Jon Maloy <jon.ma...@ericsson.com>; ma...@donjonn.com; > tipc-discussion@lists.sourceforge.net > Subject: [net-next] tipc: update mon's self addr when node addr generated > > In commit 25b0b9c4e835 ("tipc: handle collisions of 32-bit node address > hash values"), the 32-bit node address only generated after one second > trial period expired. However the self's addr in struct tipc_monitor do > not update according to node address generated. This lead to it is > always zero as initial value. As result, sorting algorithm using this > value does not work as expected, neither neighbor monitoring framework. > > In this commit, we add a fix to update self's addr when 32-bit node > address generated. > > Fixes: 25b0b9c4e835 ("tipc: handle collisions of 32-bit node address hash > values") > Signed-off-by: Hoang Le <hoang.h...@dektech.com.au> > --- > net/tipc/monitor.c | 15 +++++++++++++++ > net/tipc/monitor.h | 1 + > net/tipc/net.c | 2 ++ > 3 files changed, 18 insertions(+) > > diff --git a/net/tipc/monitor.c b/net/tipc/monitor.c > index 6a6eae88442f..58708b4c7719 100644 > --- a/net/tipc/monitor.c > +++ b/net/tipc/monitor.c > @@ -665,6 +665,21 @@ void tipc_mon_delete(struct net *net, int bearer_id) > kfree(mon); > } > > +void tipc_mon_reinit_self(struct net *net) > +{ > + struct tipc_monitor *mon; > + int bearer_id; > + > + for (bearer_id = 0; bearer_id < MAX_BEARERS; bearer_id++) { > + mon = tipc_monitor(net, bearer_id); > + if (!mon) > + continue; > + write_lock_bh(&mon->lock); > + mon->self->addr = tipc_own_addr(net); > + write_unlock_bh(&mon->lock); > + } > +} > + > int tipc_nl_monitor_set_threshold(struct net *net, u32 cluster_size) > { > struct tipc_net *tn = tipc_net(net); > diff --git a/net/tipc/monitor.h b/net/tipc/monitor.h > index 2a21b93e0d04..ed63d2e650b0 100644 > --- a/net/tipc/monitor.h > +++ b/net/tipc/monitor.h > @@ -77,6 +77,7 @@ int __tipc_nl_add_monitor(struct net *net, struct > tipc_nl_msg *msg, > u32 bearer_id); > int tipc_nl_add_monitor_peer(struct net *net, struct tipc_nl_msg *msg, > u32 bearer_id, u32 *prev_node); > +void tipc_mon_reinit_self(struct net *net); > > extern const int tipc_max_domain_size; > #endif > diff --git a/net/tipc/net.c b/net/tipc/net.c > index 85707c185360..2de3cec9929d 100644 > --- a/net/tipc/net.c > +++ b/net/tipc/net.c > @@ -42,6 +42,7 @@ > #include "node.h" > #include "bcast.h" > #include "netlink.h" > +#include "monitor.h" > > /* > * The TIPC locking policy is designed to ensure a very fine locking > @@ -136,6 +137,7 @@ static void tipc_net_finalize(struct net *net, u32 addr) > tipc_set_node_addr(net, addr); > tipc_named_reinit(net); > tipc_sk_reinit(net); > + tipc_mon_reinit_self(net); > tipc_nametbl_publish(net, TIPC_CFG_SRV, addr, addr, > TIPC_CLUSTER_SCOPE, 0, addr); > } > -- > 2.20.1 _______________________________________________ tipc-discussion mailing list tipc-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tipc-discussion