Commit 62c5c3e (bridge: Rate limit the statistics update.) makes
ovs try committing the statistics even if ovs failed to get ovsdb
configuration.  This causes the ovs committing the NULL transaction
pointer.

To fix this issue, this commit makes ovs skip statistics update
if it cannot get ovsdb config.

VMware-BZ: #1331308

Signed-off-by: Alex Wang <al...@nicira.com>
---
 vswitchd/bridge.c |   34 ++++++++++++++++------------------
 1 file changed, 16 insertions(+), 18 deletions(-)

diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
index 656182f..d2643a0 100644
--- a/vswitchd/bridge.c
+++ b/vswitchd/bridge.c
@@ -2389,32 +2389,30 @@ bridge_run(void)
     }
 
     /* Refresh interface and mirror stats if necessary. */
-    if (time_msec() >= stats_timer) {
+    if (time_msec() >= stats_timer && cfg) {
         enum ovsdb_idl_txn_status status;
 
         /* Rate limit the update.  Do not start a new update if the
          * previous one is not done. */
         if (!stats_txn) {
-            if (cfg) {
-                stats_txn = ovsdb_idl_txn_create(idl);
-                HMAP_FOR_EACH (br, node, &all_bridges) {
-                    struct port *port;
-                    struct mirror *m;
-
-                    HMAP_FOR_EACH (port, hmap_node, &br->ports) {
-                        struct iface *iface;
-
-                        LIST_FOR_EACH (iface, port_elem, &port->ifaces) {
-                            iface_refresh_stats(iface);
-                        }
-                        port_refresh_stp_stats(port);
-                    }
-                    HMAP_FOR_EACH (m, hmap_node, &br->mirrors) {
-                        mirror_refresh_stats(m);
+            stats_txn = ovsdb_idl_txn_create(idl);
+            HMAP_FOR_EACH (br, node, &all_bridges) {
+                struct port *port;
+                struct mirror *m;
+
+                HMAP_FOR_EACH (port, hmap_node, &br->ports) {
+                    struct iface *iface;
+
+                    LIST_FOR_EACH (iface, port_elem, &port->ifaces) {
+                        iface_refresh_stats(iface);
                     }
+                    port_refresh_stp_stats(port);
+                }
+                HMAP_FOR_EACH (m, hmap_node, &br->mirrors) {
+                    mirror_refresh_stats(m);
                 }
-                refresh_controller_status();
             }
+            refresh_controller_status();
         }
 
         status = ovsdb_idl_txn_commit(stats_txn);
-- 
1.7.9.5

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to