diff options
| author | Allan Stephens <Allan.Stephens@windriver.com> | 2011-01-18 13:53:16 -0500 | 
|---|---|---|
| committer | Paul Gortmaker <paul.gortmaker@windriver.com> | 2011-02-23 18:05:12 -0500 | 
| commit | 01d83eddc55c138cbb24a5917d5271c0b24956a1 (patch) | |
| tree | 4f955e6fa50ac93de90a496749aea82b4411746a /net/tipc/bcast.c | |
| parent | 77c81e0bb8af3f1a0e5d84dd0346fe57dfe3da27 (diff) | |
| download | olio-linux-3.10-01d83eddc55c138cbb24a5917d5271c0b24956a1.tar.xz olio-linux-3.10-01d83eddc55c138cbb24a5917d5271c0b24956a1.zip  | |
tipc: Clean up tracking of node requesting a broadcast retransmit
Allows the broadcast link to track the node that is requesting a retransmit
in a new field dedicated to that purpose. This replaces the existing
mechanism that (ab)uses an existing node structure linked list field to do
the tracking.
Signed-off-by: Allan Stephens <Allan.Stephens@windriver.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Diffstat (limited to 'net/tipc/bcast.c')
| -rw-r--r-- | net/tipc/bcast.c | 16 | 
1 files changed, 14 insertions, 2 deletions
diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c index b4d659df465..a5eb7dbfa0c 100644 --- a/net/tipc/bcast.c +++ b/net/tipc/bcast.c @@ -93,6 +93,7 @@ struct bcbearer {   * struct bclink - link used for broadcast messages   * @link: (non-standard) broadcast link structure   * @node: (non-standard) node structure representing b'cast link's peer node + * @retransmit_to: node that most recently requested a retransmit   *   * Handles sequence numbering, fragmentation, bundling, etc.   */ @@ -100,6 +101,7 @@ struct bcbearer {  struct bclink {  	struct link link;  	struct tipc_node node; +	struct tipc_node *retransmit_to;  }; @@ -184,6 +186,17 @@ static int bclink_ack_allowed(u32 n)  /** + * tipc_bclink_retransmit_to - get most recent node to request retransmission + * + * Called with bc_lock locked + */ + +struct tipc_node *tipc_bclink_retransmit_to(void) +{ +	return bclink->retransmit_to; +} + +/**   * bclink_retransmit_pkt - retransmit broadcast packets   * @after: sequence number of last packet to *not* retransmit   * @to: sequence number of last packet to retransmit @@ -444,10 +457,9 @@ void tipc_bclink_recv_pkt(struct sk_buff *buf)  			tipc_node_unlock(node);  			spin_lock_bh(&bc_lock);  			bcl->stats.recv_nacks++; -			bcl->owner->next = node;   /* remember requestor */ +			bclink->retransmit_to = node;  			bclink_retransmit_pkt(msg_bcgap_after(msg),  					      msg_bcgap_to(msg)); -			bcl->owner->next = NULL;  			spin_unlock_bh(&bc_lock);  		} else {  			tipc_bclink_peek_nack(msg_destnode(msg),  |