From 9fe215f0f65c77593436e920cd07cf9bb24a7db8 Mon Sep 17 00:00:00 2001 From: Ethan Jackson Date: Thu, 3 Mar 2011 15:59:25 -0800 Subject: [PATCH] ofproto: facet_execute() stats changes. facet_execute() should rely on facet_update_stats() to update the relevant facet's used parameter. Before this patch, in very rare cases, the current practice could lead to assertion failures. The used value of a facet could be slightly in the future due to the clocks being out of sync between the kernel and user space. Thus manually setting the used parameter of a facet could put it slightly behind an already pushed used value causing an assertion failure. Bug #4745. --- ofproto/ofproto.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index 590b792a..49f99cbb 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -2161,12 +2161,10 @@ facet_execute(struct ofproto *ofproto, struct facet *facet, assert(ofpbuf_headroom(packet) >= sizeof(struct ofp_packet_in)); flow_extract_stats(&facet->flow, packet, &stats); + stats.used = time_msec(); if (execute_odp_actions(ofproto, &facet->flow, facet->actions, facet->actions_len, packet)) { - facet->used = time_msec(); facet_update_stats(ofproto, facet, &stats); - netflow_flow_update_time(ofproto->netflow, - &facet->nf_flow, facet->used); } } -- 2.30.2