diff options
author | Jon Paul Maloy <jon.maloy@ericsson.com> | 2015-10-22 08:51:46 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-10-24 06:56:45 -0700 |
commit | c72fa872a23f03b2b9c17e88f3b0a8070924e5f1 (patch) | |
tree | 852fd70aa5212a91390478247131ba9adb93b8fb /net/tipc/link.c | |
parent | 7214bcf8753109256d635ba079938fbd6fcf713b (diff) | |
download | op-kernel-dev-c72fa872a23f03b2b9c17e88f3b0a8070924e5f1.zip op-kernel-dev-c72fa872a23f03b2b9c17e88f3b0a8070924e5f1.tar.gz |
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>
Diffstat (limited to 'net/tipc/link.c')
-rw-r--r-- | net/tipc/link.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c index 7d3b6e7..819fb71 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c @@ -175,9 +175,12 @@ bool link_is_bc_rcvlink(struct tipc_link *l) int tipc_link_is_active(struct tipc_link *l) { - struct tipc_node *n = l->owner; + return l->active; +} - return (node_active_link(n, 0) == l) || (node_active_link(n, 1) == l); +void tipc_link_set_active(struct tipc_link *l, bool active) +{ + l->active = active; } void tipc_link_add_bc_peer(struct tipc_link *snd_l, @@ -250,7 +253,7 @@ static u32 link_own_addr(struct tipc_link *l) * * Returns true if link was created, otherwise false */ -bool tipc_link_create(struct tipc_node *n, char *if_name, int bearer_id, +bool tipc_link_create(struct net *net, char *if_name, int bearer_id, int tolerance, char net_plane, u32 mtu, int priority, int window, u32 session, u32 ownnode, u32 peer, u16 peer_caps, @@ -284,7 +287,7 @@ bool tipc_link_create(struct tipc_node *n, char *if_name, int bearer_id, l->addr = peer; l->peer_caps = peer_caps; l->media_addr = maddr; - l->owner = n; + l->net = net; l->peer_session = WILDCARD_SESSION; l->bearer_id = bearer_id; l->tolerance = tolerance; @@ -318,7 +321,7 @@ bool tipc_link_create(struct tipc_node *n, char *if_name, int bearer_id, * * Returns true if link was created, otherwise false */ -bool tipc_link_bc_create(struct tipc_node *n, u32 ownnode, u32 peer, +bool tipc_link_bc_create(struct net *net, u32 ownnode, u32 peer, int mtu, int window, u16 peer_caps, struct sk_buff_head *inputq, struct sk_buff_head *namedq, @@ -327,7 +330,7 @@ bool tipc_link_bc_create(struct tipc_node *n, u32 ownnode, u32 peer, { struct tipc_link *l; - if (!tipc_link_create(n, "", MAX_BEARERS, 0, 'Z', mtu, 0, window, + if (!tipc_link_create(net, "", MAX_BEARERS, 0, 'Z', mtu, 0, window, 0, ownnode, peer, peer_caps, NULL, bc_sndlink, NULL, inputq, namedq, link)) return false; @@ -889,10 +892,10 @@ void tipc_link_push_packets(struct tipc_link *link) msg_set_ack(msg, ack); msg_set_seqno(msg, seqno); seqno = mod(seqno + 1); - msg_set_bcast_ack(msg, link->owner->bclink.last_in); + /* msg_set_bcast_ack(msg, link->owner->bclink.last_in); */ link->rcv_unacked = 0; __skb_queue_tail(&link->transmq, skb); - tipc_bearer_send(link->owner->net, link->bearer_id, + tipc_bearer_send(link->net, link->bearer_id, skb, link->media_addr); } link->snd_nxt = seqno; @@ -966,8 +969,8 @@ void tipc_link_retransmit(struct tipc_link *l_ptr, struct sk_buff *skb, break; msg = buf_msg(skb); msg_set_ack(msg, mod(l_ptr->rcv_nxt - 1)); - msg_set_bcast_ack(msg, l_ptr->owner->bclink.last_in); - tipc_bearer_send(l_ptr->owner->net, l_ptr->bearer_id, skb, + /* msg_set_bcast_ack(msg, l_ptr->owner->bclink.last_in); */ + tipc_bearer_send(l_ptr->net, l_ptr->bearer_id, skb, l_ptr->media_addr); retransmits--; l_ptr->stats.retransmitted++; @@ -1102,9 +1105,9 @@ static int tipc_link_input(struct tipc_link *l, struct sk_buff *skb, } return 0; } else if (usr == BCAST_PROTOCOL) { - tipc_bcast_lock(l->owner->net); + tipc_bcast_lock(l->net); tipc_link_bc_init_rcv(l->bc_rcvlink, hdr); - tipc_bcast_unlock(l->owner->net); + tipc_bcast_unlock(l->net); } drop: kfree_skb(skb); @@ -1300,7 +1303,7 @@ void tipc_link_proto_xmit(struct tipc_link *l, u32 msg_typ, int probe_msg, skb = __skb_dequeue(&xmitq); if (!skb) return; - tipc_bearer_xmit_skb(l->owner->net, l->bearer_id, skb, l->media_addr); + tipc_bearer_xmit_skb(l->net, l->bearer_id, skb, l->media_addr); l->rcv_unacked = 0; } @@ -2004,7 +2007,7 @@ static int __tipc_nl_add_link(struct net *net, struct tipc_nl_msg *msg, if (tipc_link_is_up(link)) if (nla_put_flag(msg->skb, TIPC_NLA_LINK_UP)) goto attr_msg_full; - if (tipc_link_is_active(link)) + if (link->active) if (nla_put_flag(msg->skb, TIPC_NLA_LINK_ACTIVE)) goto attr_msg_full; |