tipc: fix a link reset issue due to retransmission failures
When a node joins a cluster while we are transmitting a fragment stream over the broadcast link, it's missing the preceding fragments needed to build a meaningful message. As a result, the node has to drop it. However, as the fragment message is not acknowledged to its sender before it's dropped, it accidentally causes link reset of retransmission failure on the node. Reported-by: Erik Hugne <erik.hugne@ericsson.com> Signed-off-by: Ying Xue <ying.xue@windriver.com> Reviewed-by: Erik Hugne <erik.hugne@ericsson.com> Tested-by: Erik Hugne <erik.hugne@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
358e048d67
commit
bc14b8d6a9
1 changed files with 5 additions and 3 deletions
|
@ -523,11 +523,13 @@ void tipc_bclink_rcv(struct net *net, struct sk_buff *buf)
|
|||
tipc_bclink_unlock(net);
|
||||
tipc_node_unlock(node);
|
||||
} else if (msg_user(msg) == MSG_FRAGMENTER) {
|
||||
tipc_buf_append(&node->bclink.reasm_buf, &buf);
|
||||
if (unlikely(!buf && !node->bclink.reasm_buf))
|
||||
goto unlock;
|
||||
tipc_bclink_lock(net);
|
||||
bclink_accept_pkt(node, seqno);
|
||||
tipc_buf_append(&node->bclink.reasm_buf, &buf);
|
||||
if (unlikely(!buf && !node->bclink.reasm_buf)) {
|
||||
tipc_bclink_unlock(net);
|
||||
goto unlock;
|
||||
}
|
||||
bcl->stats.recv_fragments++;
|
||||
if (buf) {
|
||||
bcl->stats.recv_fragmented++;
|
||||
|
|
Loading…
Reference in a new issue