[PATCH] Discard token if foreign mcast message received during totemrrp_recv_flush

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Flush of regular mcast messages could trigger entry into gather state if the
regular mcast message in the kernel buffers contained a foriegn message.  This
should set orf_token_dicard to 1.  Unfortunately if this happens, the following
ORF tokens in the kernel buffer that are flushed should be rejected.  Since
the flush occurs after the check for orf_token_discard==1, the orf token is
not rejected.

Signed-off-by: Steven Dake <sdake@xxxxxxxxxx>
---
 exec/totemsrp.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/exec/totemsrp.c b/exec/totemsrp.c
index 5a78962..9c7b01d 100644
--- a/exec/totemsrp.c
+++ b/exec/totemsrp.c
@@ -3451,9 +3451,6 @@ static int message_handler_orf_token (
 	"Time since last token %0.4f ms\n", ((float)tv_diff) / 1000000.0);
 #endif
 
-	if (instance->orf_token_discard) {
-		return (0);
-	}
 #ifdef TEST_DROP_ORF_TOKEN_PERCENTAGE
 	if (random()%100 < TEST_DROP_ORF_TOKEN_PERCENTAGE) {
 		return (0);
@@ -3499,6 +3496,16 @@ static int message_handler_orf_token (
 	totemrrp_recv_flush (instance->totemrrp_context);
 
 	/*
+	 * Discard orf tokens in GATHER/COMMIT after recv_flush operation.  
+	 *
+	 * It is possible a foreign message caused a shift to the GATHER
+	 * state.
+	 */
+	if (instance->orf_token_discard) {
+		return (0);
+	}
+
+	/*
 	 * Determine if we should hold (in reality drop) the token
 	 */
 	instance->my_token_held = 0;
-- 
1.7.7.3

_______________________________________________
discuss mailing list
discuss@xxxxxxxxxxxx
http://lists.corosync.org/mailman/listinfo/discuss


[Index of Archives]     [Linux Clusters]     [Corosync Project]     [Linux USB Devel]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Linux Kernel]     [Linux SCSI]     [X.Org]

  Powered by Linux