Acked-by: Ethan Jackson <et...@nicira.com> Thanks a lot.
On Fri, Aug 16, 2013 at 8:39 AM, Ben Pfaff <b...@nicira.com> wrote: > The OpenFlow OFPFF_CHECK_OVERLAP flag requires us to check whether the flow > being inserted overlaps with any existing flows. That isn't efficiently > implemented and typically requires us to compare the new flow against most > or all of the existing flows. We don't have to do that work if > OFPFF_CHECK_OVERLAP is not requested, but commit 0b4f207828c (classifier: > Make use of the classifier thread safe.) inadvertently made us do it > anyway. > > Signed-off-by: Ben Pfaff <b...@nicira.com> > --- > ofproto/ofproto.c | 20 ++++++++++++-------- > 1 file changed, 12 insertions(+), 8 deletions(-) > > diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c > index bbdb2d2..a22cce4 100644 > --- a/ofproto/ofproto.c > +++ b/ofproto/ofproto.c > @@ -3345,7 +3345,6 @@ add_flow(struct ofproto *ofproto, struct ofconn *ofconn, > struct rule *victim; > struct rule *rule; > uint8_t table_id; > - bool overlaps; > int error; > > error = check_table_id(ofproto, fm->table_id); > @@ -3402,13 +3401,18 @@ add_flow(struct ofproto *ofproto, struct ofconn > *ofconn, > } > > /* Check for overlap, if requested. */ > - ovs_rwlock_rdlock(&table->cls.rwlock); > - overlaps = classifier_rule_overlaps(&table->cls, &rule->cr); > - ovs_rwlock_unlock(&table->cls.rwlock); > - if (fm->flags & OFPFF_CHECK_OVERLAP && overlaps) { > - cls_rule_destroy(&rule->cr); > - ofproto->ofproto_class->rule_dealloc(rule); > - return OFPERR_OFPFMFC_OVERLAP; > + if (fm->flags & OFPFF_CHECK_OVERLAP) { > + bool overlaps; > + > + ovs_rwlock_rdlock(&table->cls.rwlock); > + overlaps = classifier_rule_overlaps(&table->cls, &rule->cr); > + ovs_rwlock_unlock(&table->cls.rwlock); > + > + if (overlaps) { > + cls_rule_destroy(&rule->cr); > + ofproto->ofproto_class->rule_dealloc(rule); > + return OFPERR_OFPFMFC_OVERLAP; > + } > } > > /* FIXME: Implement OFPFF12_RESET_COUNTS */ > -- > 1.7.10.4 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev X-CudaMail-Whitelist-To: dev@openvswitch.org _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev