From: Allan Stephens Date: Mon, 24 Oct 2011 18:59:20 +0000 (-0400) Subject: tipc: Flush unsent broadcast messages when contact with last node is lost X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=10745cd5990542447268f60078133df8b1ee960b;p=~shefty%2Frdma-dev.git tipc: Flush unsent broadcast messages when contact with last node is lost Adds code to release any unsent broadcast messages in the broadcast link transmit queue if TIPC loses contact with its only neighboring node. Previously, a broadcast link that was in the congested state would hold on to the unsent messages, even though the messages were now undeliverable. Signed-off-by: Allan Stephens Signed-off-by: Paul Gortmaker --- diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c index dd990b08143..4609819ea80 100644 --- a/net/tipc/bcast.c +++ b/net/tipc/bcast.c @@ -252,7 +252,17 @@ void tipc_bclink_acknowledge(struct tipc_node *n_ptr, u32 acked) while (crs && less_eq(buf_seqno(crs), acked)) { next = crs->next; - bcbuf_decr_acks(crs); + + if (crs != bcl->next_out) + bcbuf_decr_acks(crs); + else if (bclink->bcast_nodes.count) + break; + else { + bcbuf_set_acks(crs, 0); + bcl->next_out = next; + bclink_set_last_sent(); + } + if (bcbuf_acks(crs) == 0) { bcl->first_out = next; bcl->out_queue_size--;