diff --git a/dp-core/vr_flow.c b/dp-core/vr_flow.c index 13f496a54..dce99c430 100644 --- a/dp-core/vr_flow.c +++ b/dp-core/vr_flow.c @@ -343,7 +343,8 @@ vr_flow_start_modify(struct vrouter *router, struct vr_flow_entry *fe) unsigned short flags; flags = fe->fe_flags; - if (!(flags & (VR_FLOW_FLAG_MODIFIED | VR_FLOW_FLAG_EVICTED))) { + if (!(flags & (VR_FLOW_FLAG_MODIFIED | VR_FLOW_FLAG_EVICTED | + VR_FLOW_FLAG_NEW_FLOW))) { if (__sync_bool_compare_and_swap(&fe->fe_flags, flags, flags | VR_FLOW_FLAG_MODIFIED)) { return true; diff --git a/include/vr_flow.h b/include/vr_flow.h index 08e133202..d52089846 100644 --- a/include/vr_flow.h +++ b/include/vr_flow.h @@ -34,7 +34,8 @@ typedef enum { #define VR_FLOW_FLAG_DP_FLAGS (VR_FLOW_FLAG_EVICT_CANDIDATE |\ VR_FLOW_FLAG_EVICTED |\ - VR_FLOW_FLAG_NEW_FLOW) + VR_FLOW_FLAG_NEW_FLOW |\ + VR_FLOW_FLAG_MODIFIED) #define VR_FLOW_FLAG_DP_BITS(fe) (((fe)->fe_flags) &\ (VR_FLOW_FLAG_DP_FLAGS))