From 3c987e2776dfe6f018f54c86809b95892b1ab951 Mon Sep 17 00:00:00 2001 From: "Anand H. Krishnan" Date: Fri, 29 Apr 2016 09:47:27 +0530 Subject: [PATCH] Before initiating eviction, wait for the reverse flow to move from HOLD If the reverse flow action is HOLD, it is possible that we might not flush the packets that are in the hold queue when we do eviction. There is also an unidentified case where such flows remain in the table in the eviction marked state. Also, free the vrouter operation request structure once the request is done. Change-Id: I75d54367c7f7a3b32c3a09332be4f01a64e06d2a Partial-BUG: #1570203 --- dp-core/vr_flow.c | 4 +++- dp-core/vrouter.c | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dp-core/vr_flow.c b/dp-core/vr_flow.c index 992e30c76..52cf2721f 100644 --- a/dp-core/vr_flow.c +++ b/dp-core/vr_flow.c @@ -678,7 +678,9 @@ vr_flow_mark_evict(struct vrouter *router, struct vr_flow_entry *fe) /* no modification. hence...*/ rfe = NULL; } else { - if ((rfe->fe_rflow == index) || (rfe->fe_rflow < 0)) { + /* we do not want hold flows to be evicted, just yet */ + if (((rfe->fe_rflow == index) || (rfe->fe_rflow < 0)) && + (rfe->fe_action != VR_FLOW_ACTION_HOLD)) { evict_forward_flow = __vr_flow_mark_evict(router, rfe); } } diff --git a/dp-core/vrouter.c b/dp-core/vrouter.c index e1e5e4753..a90fa66bd 100644 --- a/dp-core/vrouter.c +++ b/dp-core/vrouter.c @@ -256,7 +256,7 @@ vrouter_ops_destroy(vrouter_ops *req) req->vo_build_info = NULL; } - vr_free(req->vo_build_info); + vr_free(req); return; }