tipc: Handle broadcast attempt when no neighboring nodes exist
authorAllan Stephens <allan.stephens@windriver.com>
Mon, 24 Oct 2011 17:05:55 +0000 (13:05 -0400)
committerPaul Gortmaker <paul.gortmaker@windriver.com>
Tue, 27 Dec 2011 16:33:50 +0000 (11:33 -0500)
Adds a check to detect when an attempt is made to send a message
via the broadcast link and no neighboring nodes are currently available
to receive it. Rather than wasting effort passing the message to the
broadcast link and broadcast bearer, who will only throw it away,
TIPC now frees the message immediately and reports success (i.e. the
message has been delivered to all available destinations).

Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
net/tipc/bcast.c

index 5ca8fdda63ca0ae193bbe64d491a2a88d94c254b..8f58df24bac5f0f375694b41ddc6520c3ba6c5f6 100644 (file)
@@ -417,13 +417,19 @@ int tipc_bclink_send_msg(struct sk_buff *buf)
 
        spin_lock_bh(&bc_lock);
 
+       if (!bclink->bcast_nodes.count) {
+               res = msg_data_sz(buf_msg(buf));
+               buf_discard(buf);
+               goto exit;
+       }
+
        res = tipc_link_send_buf(bcl, buf);
        if (likely(res > 0))
                bclink_set_last_sent();
 
        bcl->stats.queue_sz_counts++;
        bcl->stats.accu_queue_sz += bcl->out_queue_size;
-
+exit:
        spin_unlock_bh(&bc_lock);
        return res;
 }