On Thu, Dec 1, 2016 at 6:14 PM, Felix Jia <felix....@alliedtelesis.co.nz> wrote: > +static void addrconf_addrgenmode_change(struct net *net) > +{ > + struct net_device *dev; > + struct inet6_dev *idev; > + > + read_lock(&dev_base_lock); > + for_each_netdev(net, dev) { > + rcu_read_lock(); > + idev = __in6_dev_get(dev); > + if (idev) { > + idev->cnf.addrgenmode = ipv6_devconf_dflt.addrgenmode; > + idev->addr_gen_mode = ipv6_devconf_dflt.addrgenmode; > + rtnl_lock(); > + addrconf_dev_config(idev->dev); > + rtnl_unlock();
You can't call rtnl lock in atomic context. > + } > + rcu_read_unlock(); > + } > + read_unlock(&dev_base_lock); Did you test your patch seriously?