diff options
author | Allan Stephens <allan.stephens@windriver.com> | 2010-08-17 07:00:08 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-08-17 20:31:54 -0400 |
commit | 7e3e5d0950559d1118dccbdff3c765fffcf04fd5 (patch) | |
tree | 9741b0dcae188721790b9f384e3b7d8d518951b5 /net/tipc | |
parent | b02b69c8a403859ec72090742727e853d606a325 (diff) |
tipc: Prevent crash when broadcast link cannot send to all nodes
Allow TIPC's broadcast link to continue operation when it is unable
to send a message to all nodes in the cluster. Previously, the
broadcast link attempted to put the broadcast pseudo-bearer into a
blocked state; however, this caused a crash because the associated
bearer structure is only partially initialized. Further
investigation has revealed some conceptual problems with blocking
the pseudo-bearer; consequently, this functionality has been
disabled for the time being and the undelivered message is
eventually resent by the broadcast link's existing message
retransmission mechanism (if possible).
Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc')
-rw-r--r-- | net/tipc/bcast.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c index a008c6689305..42b1737f0dcf 100644 --- a/net/tipc/bcast.c +++ b/net/tipc/bcast.c | |||
@@ -609,11 +609,13 @@ static int tipc_bcbearer_send(struct sk_buff *buf, | |||
609 | bcbearer->remains = bcbearer->remains_new; | 609 | bcbearer->remains = bcbearer->remains_new; |
610 | } | 610 | } |
611 | 611 | ||
612 | /* Unable to reach all targets */ | 612 | /* |
613 | * Unable to reach all targets (indicate success, since currently | ||
614 | * there isn't code in place to properly block & unblock the | ||
615 | * pseudo-bearer used by the broadcast link) | ||
616 | */ | ||
613 | 617 | ||
614 | bcbearer->bearer.publ.blocked = 1; | 618 | return TIPC_OK; |
615 | bcl->stats.bearer_congs++; | ||
616 | return 1; | ||
617 | } | 619 | } |
618 | 620 | ||
619 | /** | 621 | /** |