Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> 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!