On Nov 13, 2014, at 5:11 PM, Ben Pfaff <b...@nicira.com> wrote:

> On Thu, Nov 13, 2014 at 11:56:14AM -0800, Jarno Rajahalme wrote:
>> Previously, accurate iteration required writers to be excluded during
>> iteration.  This patch adds an rculist to struct cls_subtable, and a
>> corresponding list node to struct cls_rule, which makes iteration more
>> straightforward, and allows the iterators to remain ignorant of the
>> internals of the cls_match.  This new list allows iteration of rules
>> in the classifier by traversing the RCU-friendly subtables vector, and
>> the rculist of rules in each subtable.
>> 
>> Classifier modifications may be performed concurrently, but whether or
>> not the concurrent iterator sees those changes depends on the timing
>> of change.  More specifically, an concurrent iterator:
>> 
>> - May or may not see a rule that is being inserted or removed.
>> - Will see either the new or the old version of a rule that is replaced.
>> - Will see all the other rules (that are not being modified).
>> 
>> Finally, The subtable's rculist also allows to make
>> classifier_rule_overlaps() lockless, which this patch also does.
>> 
>> Signed-off-by: Jarno Rajahalme <jrajaha...@nicira.com>
> 
> Thanks, this is nice!
> 
>> /* A set of rules that all have the same fields wildcarded. */
>> struct cls_subtable {
>> -    /* The fields are only used by writers and iterators. */
>> -    struct cmap_node cmap_node; /* Within struct classifier 
>> 'subtables_map'. */
>> -
>> -    /* The fields are only used by writers. */
>> +    /* These fields are only used by writers. */
>> +    struct cmap_node cmap_node OVS_GUARDED; /* Within struct classifier's
>> +                                             * 'subtables_map'. */
> 
> If cmap_node is only used by writers (which have to have mutual
> exclusion), then it's questionable whether a cmap is the right data
> structure, since the main advantage of a cmap is to allow search and
> iterate to operate concurrently with modification.  But it looks like
> classifier_find_rule_exactly(), which is not a write operation, also
> uses the cmap_node.
> 

I resolved this by moving the comment to the line after the ‘cmap_node’ member.

> Otherwise:
> Acked-by: Ben Pfaff <b...@nicira.com>

Thanks!

Pushing in a moment,

  Jarno

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to