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

Reply via email to