On Tue, May 20, 2014 at 03:53:26PM -0700, Ben Pfaff wrote:
> On Fri, Apr 11, 2014 at 06:34:20PM -0300, Flavio Leitner wrote:
> > This patch adds the functions needed to update the multicast
> > snooping database based on the Report/Leave/Query received.
> > 
> > They are marked with OVS_UNUSED for now.
> > 
> > Signed-off-by: Flavio Leitner <f...@redhat.com>
> 
> The body of the switch statement should be indented 4 fewer spaces, to
> match the existing style elsewhere.
> 
> ofproto-dpif-*.c is already quite big, so when I can reasonably put
> new code elsewhere I like to do so.  update_mcast_snooping_table__()
> seems like a candidate: can mcast-snooping.c just have a function to
> process such a packet?  Or, if not, could the individual functions
> that update_mcast_snooping_table__() calls do the logging internally?
> I guess that they would have trouble logging the names; maybe that's
> good enough reason to keep them here.
> 
> I find that it's easier to follow code flow with locks if there's only
> one place the lock gets unlocked.  In this case,
> update_mcast_snooping_table() doesn't do that, but it's easily
> transformed to do so, e.g. change:
>     if (mcast_xbundle && mcast_xbundle == in_xbundle) {
>         ovs_rwlock_unlock(&xbridge->ms->rwlock);
>         return;
>     }
> 
>     maddr.proto = flow->dl_type;
>     maddr.u.ip4 = flow->igmp_group.u.ip4;
>     update_mcast_snooping_table__(xbridge, flow, &maddr, vlan, in_xbundle);
>     ovs_rwlock_unlock(&xbridge->ms->rwlock);
> to:
>     if (!mcast_xbundle || mcast_xbundle != in_xbundle) {
>         maddr.proto = flow->dl_type;
>         maddr.u.ip4 = flow->igmp_group.u.ip4;
>         update_mcast_snooping_table__(xbridge, flow, &maddr, vlan, 
> in_xbundle);
>     }
>     ovs_rwlock_unlock(&xbridge->ms->rwlock);
> and you could even move the declaration of maddr inward.
> 
> I suspect that unconditionally taking the write-lock in
> update_mcast_snooping_table() is going to serialize flow translation,
> in practice.  That's why update_learning_table() checks whether any
> change is needed under the read-lock first, then grabs the write-lock
> if it's really needed.  But in the long run RCU is better (and we
> should probably adapt mac-learning to use it, or we could switch to a
> fatlock there as an easy first step).

Oh, also again I'd prefer to introduce these functions in the same
commit as their first users.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to