Re: [PATCH net] bridge: notify user space of fdb port change

Toshiaki Makita
2014-05-23T08:40:07Z

(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);
>
>