diff --git a/dp-core/vr_flow.c b/dp-core/vr_flow.c index c3685b114..c86fc8b9d 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 391113567..68f8fb59e 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))