tipc: eliminate link's reference to owner node

With the recent commit series, we have established a one-way dependency
between the link aggregation (struct tipc_node) instances and their
pertaining tipc_link instances. This has enabled quite significant code
and structure simplifications.

In this commit, we eliminate the field 'owner', which points to an
instance of struct tipc_node, from struct tipc_link, and replace it with
a pointer to struct net, which is the only external reference now needed
by a link instance.

Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Reviewed-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
diff --git a/net/tipc/node.c b/net/tipc/node.c
index b274390..eb739d2 100644
--- a/net/tipc/node.c
+++ b/net/tipc/node.c
@@ -178,7 +178,7 @@
 	n_ptr->signature = INVALID_NODE_SIG;
 	n_ptr->active_links[0] = INVALID_BEARER_ID;
 	n_ptr->active_links[1] = INVALID_BEARER_ID;
-	if (!tipc_link_bc_create(n_ptr, tipc_own_addr(net), n_ptr->addr,
+	if (!tipc_link_bc_create(net, tipc_own_addr(net), n_ptr->addr,
 				 U16_MAX, tipc_bc_sndlink(net)->window,
 				 n_ptr->capabilities,
 				 &n_ptr->bc_entry.inputq1,
@@ -366,7 +366,10 @@
 		pr_debug("Old link <%s> becomes standby\n", ol->name);
 		*slot0 = bearer_id;
 		*slot1 = bearer_id;
+		tipc_link_set_active(nl, true);
+		tipc_link_set_active(ol, false);
 	} else if (nl->priority == ol->priority) {
+		tipc_link_set_active(nl, true);
 		*slot0 = bearer_id;
 	} else {
 		pr_debug("New link <%s> is standby\n", nl->name);
@@ -599,7 +602,7 @@
 			goto exit;
 		}
 		if_name = strchr(b->name, ':') + 1;
-		if (!tipc_link_create(n, if_name, b->identity, b->tolerance,
+		if (!tipc_link_create(net, if_name, b->identity, b->tolerance,
 				      b->net_plane, b->mtu, b->priority,
 				      b->window, mod(tipc_net(net)->random),
 				      tipc_own_addr(net), onode,