A flow's statistics could be partially lost in the following situation:
* A flow is dumped from the datapath
* Some traffic hits that flow
* Revalidation fails for that flow

Previously, we would delete such a flow without fetching the latest
statistics for it, causing the intermediate statistics to be lost. This
patch fixes the bug by queueing the flow up for deletion and cleanup
along with the other flows that will be deleted.

Signed-off-by: Joe Stringer <joestrin...@nicira.com>
---
 ofproto/ofproto-dpif-upcall.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c
index e4f81a1..3478444 100644
--- a/ofproto/ofproto-dpif-upcall.c
+++ b/ofproto/ofproto-dpif-upcall.c
@@ -1534,8 +1534,9 @@ revalidate_udumps(struct revalidator *revalidator, struct 
list *udumps)
         ukey->mark = true;
 
         if (!revalidate_ukey(udpif, udump, ukey)) {
-            dpif_flow_del(udpif->dpif, udump->key, udump->key_len, NULL);
-            ukey_delete(revalidator, ukey);
+            struct dump_op *dop = &ops[n_ops++];
+
+            dump_op_init(dop, udump->key, udump->key_len, ukey, udump);
         }
 
         list_remove(&udump->list_node);
-- 
1.7.9.5

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

Reply via email to