Stephen Rothwell <s...@canb.auug.org.au> writes:

> diff --cc drivers/net/vxlan.c
> index 0565f8880199,71c3b7b6b1ab..000000000000
> --- a/drivers/net/vxlan.c
> +++ b/drivers/net/vxlan.c
> @@@ -3297,16 -3483,9 +3484,16 @@@ static int __vxlan_dev_create(struct ne
>   
>       list_add(&vxlan->next, &vn->vxlan_list);
>       return 0;
>  +
>   errout:
>  +    /* unregister_netdevice() destroys the default FDB entry with deletion
>  +     * notification. But the addition notification was not sent yet, so
>  +     * destroy the entry by hand here.
>  +     */
>       if (f)
> -             vxlan_fdb_destroy(vxlan, f, false);
> +             vxlan_fdb_destroy(vxlan, f, false, false);
>  +    if (unregister)
>  +            unregister_netdevice(dev);
>       return err;
>   }
>   
> @@@ -3540,8 -3719,10 +3727,9 @@@ static int vxlan_changelink(struct net_
>   {
>       struct vxlan_dev *vxlan = netdev_priv(dev);
>       struct vxlan_rdst *dst = &vxlan->default_dst;
> +     unsigned long old_age_interval;
>       struct vxlan_rdst old_dst;
>       struct vxlan_config conf;
>  -    struct vxlan_fdb *f = NULL;
>       int err;
>   
>       err = vxlan_nl2conf(tb, data,
> @@@ -3564,13 -3749,13 +3756,14 @@@
>                                          vxlan->cfg.dst_port,
>                                          old_dst.remote_vni,
>                                          old_dst.remote_vni,
> -                                        old_dst.remote_ifindex, 0);
> +                                        old_dst.remote_ifindex,
> +                                        true);
>   
>               if (!vxlan_addr_any(&dst->remote_ip)) {
>  -                    err = vxlan_fdb_create(vxlan, all_zeros_mac,
>  +                    err = vxlan_fdb_update(vxlan, all_zeros_mac,
>                                              &dst->remote_ip,
>                                              NUD_REACHABLE | NUD_PERMANENT,
>  +                                           NLM_F_APPEND | NLM_F_CREATE,
>                                              vxlan->cfg.dst_port,
>                                              dst->remote_vni,
>                                              dst->remote_vni,

The above looks correct, but the last hunk has one non-conflicting line
that nonetheless needs fixing up:

diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index efd709a5e3a8..5209ee9aac47 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -3768,7 +3768,7 @@ static int vxlan_changelink(struct net_device *dev, 
struct nlattr *tb[],
                                               dst->remote_vni,
                                               dst->remote_vni,
                                               dst->remote_ifindex,
-                                              NTF_SELF);
+                                              NTF_SELF, true);
                        if (err) {
                                spin_unlock_bh(&vxlan->hash_lock);
                                return err;

Thanks!

Reply via email to