On Mon, Jun 18, 2018 at 7:04 AM, Hangbin Liu <liuhang...@gmail.com> wrote: > @@ -94,10 +95,13 @@ static int ipvlan_set_port_mode(struct ipvl_port *port, > u16 nval) > mdev->l3mdev_ops = NULL; > } > list_for_each_entry(ipvlan, &port->ipvlans, pnode) { > + flags = ipvlan->dev->flags; > if (nval == IPVLAN_MODE_L3 || nval == IPVLAN_MODE_L3S) > - ipvlan->dev->flags |= IFF_NOARP; > + dev_change_flags(ipvlan->dev, > + flags | IFF_NOARP); > else > - ipvlan->dev->flags &= ~IFF_NOARP; > + dev_change_flags(ipvlan->dev, > + flags & ~IFF_NOARP);
You need to check the return value of dev_change_flags().