Hey Andy, Could you review the first two packets?
The second patch looks good to me, For this patch, I'm concerned about the use of ovsrcu_postpone(), since there is no rcu protected variable in 'struct ofgroup'. I suggest, we could move the code in group_destroy_cb() to ofproto_group_unref(). Want to hear about your comments on that. > diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c > index 9b26da7..b5a59f8 100644 > --- a/ofproto/ofproto.c > +++ b/ofproto/ofproto.c > @@ -2647,6 +2647,31 @@ ofproto_rule_unref(struct rule *rule) > } > } > > +static void > +group_destroy_cb(struct ofgroup *group) > +{ > + group->ofproto->ofproto_class->group_destruct(group); > + ofputil_bucket_list_destroy(&group->buckets); > + ovs_rwlock_destroy(&group->rwlock); > + group->ofproto->ofproto_class->group_dealloc(group); > +} > + > +void > +ofproto_group_ref(struct ofgroup *group) > +{ > + if (group) { > + ovs_refcount_ref(&group->ref_count); > + } > +} > + > +void > +ofproto_group_unref(struct ofgroup *group) > +{ > + if (group && ovs_refcount_unref(&group->ref_count) == 1) { > + ovsrcu_postpone(group_destroy_cb, group); > + } > +} > + > static uint32_t get_provider_meter_id(const struct ofproto *, > uint32_t of_meter_id); > > @@ -5622,6 +5647,7 @@ add_group(struct ofproto *ofproto, struct > ofputil_group_mod *gm) > ofgroup->group_id = gm->group_id; > ofgroup->type = gm->type; > ofgroup->created = ofgroup->modified = time_msec(); > + ovs_refcount_init(&ofgroup->ref_count); > > list_move(&ofgroup->buckets, &gm->buckets); > ofgroup->n_buckets = list_size(&ofgroup->buckets); > @@ -5752,12 +5778,8 @@ delete_group__(struct ofproto *ofproto, struct > ofgroup *ofgroup) > /* No-one can find this group any more. */ > ofproto->n_groups[ofgroup->type]--; > ovs_rwlock_unlock(&ofproto->groups_rwlock); > - > - ofproto->ofproto_class->group_destruct(ofgroup); > - ofputil_bucket_list_destroy(&ofgroup->buckets); > ovs_rwlock_unlock(&ofgroup->rwlock); > - ovs_rwlock_destroy(&ofgroup->rwlock); > - ofproto->ofproto_class->group_dealloc(ofgroup); > + ofproto_group_unref(ofgroup); > } > > /* Implements OFPGC_DELETE. */ > -- > 1.7.9.5 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev Thanks, Alex Wang,
_______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev