[ovs-dev] [PATCH 1/2] cfm: cfm_configure() only update when necessary.

Ethan Jackson ethan at nicira.com
Fri Apr 1 20:37:09 UTC 2011


Calling cfm_configure often could cause timers to be reset
resulting in unexpected behavior.  This commit only updates when
cfm configuration actually changed.

Bug #5244.
---
 lib/cfm.c |   19 ++++++++++++-------
 1 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/lib/cfm.c b/lib/cfm.c
index f6cfb2e..f9b3488 100644
--- a/lib/cfm.c
+++ b/lib/cfm.c
@@ -230,19 +230,24 @@ cfm_wait(struct cfm *cfm)
 bool
 cfm_configure(struct cfm *cfm)
 {
-    struct cfm_internal *cfmi;
+    struct cfm_internal *cfmi = cfm_to_internal(cfm);
+    uint8_t interval;
 
     if (!cfm_is_valid_mpid(cfm->mpid) || !cfm->interval) {
         return false;
     }
 
-    cfmi                  = cfm_to_internal(cfm);
-    cfmi->ccm_interval    = ms_to_ccm_interval(cfm->interval);
-    cfmi->ccm_interval_ms = ccm_interval_to_ms(cfmi->ccm_interval);
+    interval = ms_to_ccm_interval(cfm->interval);
+
+    if (interval != cfmi->ccm_interval) {
+        cfmi->ccm_interval = interval;
+        cfmi->ccm_interval_ms = ccm_interval_to_ms(interval);
+
+        /* Force a resend and check in case anything changed. */
+        timer_set_expired(&cfmi->tx_timer);
+        timer_set_expired(&cfmi->fault_timer);
+    }
 
-    /* Force a resend and check in case anything changed. */
-    timer_set_expired(&cfmi->tx_timer);
-    timer_set_expired(&cfmi->fault_timer);
     return true;
 }
 
-- 
1.7.4.2




More information about the dev mailing list