Message ID | 1679971005.11740655.1400821172875.JavaMail.zimbra@redhat.com |
---|---|
State | RFC, archived |
Delegated to: | David Miller |
Headers | show |
(2014/05/23 13:59), Jon Maxwell wrote: ... > Makita-san, > > I recoded this using your idea and ran it through a reproducer. > It work fine. After some more consideration I agree that > setting fdb->dst = source is only required when source != fdb->dst. > > Thanks for your suggestions. This is the revised patch. It should > retain the original behaviour except for the notify after the fdb update. > > Please let me know if you have any further input? I have no more comments except for style problems (bracket position, indentation, type mismatch). thank you for rewriting :) Thanks, Toshiaki Makita > > $ diff -Naur br_fdb.c br_fdb.c.patch > --- br_fdb.c 2014-05-17 12:43:23.346319609 +1000 > +++ br_fdb.c.patch 2014-05-17 16:54:46.280235728 +1000 > @@ -487,6 +487,7 @@ > { > struct hlist_head *head = &br->hash[br_mac_hash(addr, vid)]; > struct net_bridge_fdb_entry *fdb; > + bool fdb_modified = 0; > > /* some users want to always flood. */ > if (hold_time(br) == 0) > @@ -507,10 +508,16 @@ > source->dev->name); > } else { > /* fastpath: update of existing entry */ > - fdb->dst = source; > + if (unlikely(source != fdb->dst)) > + { > + fdb->dst = source; > + fdb_modified = 1; > + } > fdb->updated = jiffies; > if (unlikely(added_by_user)) > fdb->added_by_user = 1; > + if (unlikely(fdb_modified)) > + fdb_notify(br, fdb, RTM_NEWNEIGH); > } > } else { > spin_lock(&br->hash_lock); > > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> I have no more comments except for style problems (bracket position, > indentation, type mismatch). > thank you for rewriting :) np, yes this is a draft but I will make sure complies with checkpatch.pl before submitting it. Regards Jon > > Thanks, > Toshiaki Makita > > > > > $ diff -Naur br_fdb.c br_fdb.c.patch > > --- br_fdb.c 2014-05-17 12:43:23.346319609 +1000 > > +++ br_fdb.c.patch 2014-05-17 16:54:46.280235728 +1000 > > @@ -487,6 +487,7 @@ > > { > > struct hlist_head *head = &br->hash[br_mac_hash(addr, vid)]; > > struct net_bridge_fdb_entry *fdb; > > + bool fdb_modified = 0; > > > > /* some users want to always flood. */ > > if (hold_time(br) == 0) > > @@ -507,10 +508,16 @@ > > source->dev->name); > > } else { > > /* fastpath: update of existing entry */ > > - fdb->dst = source; > > + if (unlikely(source != fdb->dst)) > > + { > > + fdb->dst = source; > > + fdb_modified = 1; > > + } > > fdb->updated = jiffies; > > if (unlikely(added_by_user)) > > fdb->added_by_user = 1; > > + if (unlikely(fdb_modified)) > > + fdb_notify(br, fdb, RTM_NEWNEIGH); > > } > > } else { > > spin_lock(&br->hash_lock); > > > > > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
--- br_fdb.c 2014-05-17 12:43:23.346319609 +1000 +++ br_fdb.c.patch 2014-05-17 16:54:46.280235728 +1000 @@ -487,6 +487,7 @@ { struct hlist_head *head = &br->hash[br_mac_hash(addr, vid)]; struct net_bridge_fdb_entry *fdb; + bool fdb_modified = 0; /* some users want to always flood. */ if (hold_time(br) == 0) @@ -507,10 +508,16 @@ source->dev->name); } else { /* fastpath: update of existing entry */ - fdb->dst = source; + if (unlikely(source != fdb->dst)) + { + fdb->dst = source; + fdb_modified = 1; + } fdb->updated = jiffies; if (unlikely(added_by_user)) fdb->added_by_user = 1; + if (unlikely(fdb_modified)) + fdb_notify(br, fdb, RTM_NEWNEIGH); } } else { spin_lock(&br->hash_lock);