On Mon, Aug 08, 2016 at 11:26:30AM -0700, Jarno Rajahalme wrote:
> Instead of storing the (big) struct ofputil_flow_mod, create the new
> rule and/or create the rule criteria for matching at bundle message
> insert time. This change reduces the size of a bundle flow mod from
> 3.5kb to 272 bytes, not counting the created rule, which was anyway
> created during bundle commit.
>
> In successful bundles this shifts work out of the ofproto_mutex
> critical section and should thus reduce the time the mutex is held
> during bundle commit.
>
> Signed-off-by: Jarno Rajahalme <[email protected]>
> ---
> v4: Fixed comments & memory leak.
There's something really funny going on above add_flow_init(). It has
two function comments:
/* Implements OFPFC_ADD and the cases for OFPFC_MODIFY and OFPFC_MODIFY_STRICT
* in which no matching flow already exists in the flow table.
*
* Adds the flow specified by 'fm', to the ofproto's flow table. Returns 0 on
* success, or an OpenFlow error code on failure.
*
* On successful return the caller must complete the operation either by
* calling add_flow_finish(), or add_flow_revert() if the operation needs to
* be reverted.
*
* The caller retains ownership of 'fm->ofpacts'. */
/* Creates a new flow according to 'fm' and stores it to 'ofm' for later
* reference. If the flow replaces other flow, it will be updated to match
* modify semantics later.
*
* On successful return the caller must complete the operation by calling
* add_flow_start(), and if that succeeds, then either add_flow_finish(), or
* add_flow_revert() if the operation needs to be reverted due to a later
* failure.
*/
static enum ofperr
add_flow_init(struct ofproto *ofproto, struct ofproto_flow_mod *ofm,
const struct ofputil_flow_mod *fm)
OVS_EXCLUDED(ofproto_mutex)
Probably, this is an easy fix, but this code is complicated enough that
I'm reluctant to fully review it before the intent is clear from the
comments.
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev