Writing over /proc/sys/net/ipv6/conf/default/disable_ipv6
does not need to hold RTNL.
v3: remove a wrong change (Jakub Kicinski feedback)
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
 
 static int addrconf_disable_ipv6(struct ctl_table *table, int *p, int newf)
 {
-       struct net *net;
+       struct net *net = (struct net *)table->extra2;
        int old;
 
+       if (p == &net->ipv6.devconf_dflt->disable_ipv6) {
+               WRITE_ONCE(*p, newf);
+               return 0;
+       }
+
        if (!rtnl_trylock())
                return restart_syscall();
 
-       net = (struct net *)table->extra2;
        old = *p;
        WRITE_ONCE(*p, newf);
 
-       if (p == &net->ipv6.devconf_dflt->disable_ipv6) {
-               rtnl_unlock();
-               return 0;
-       }
-
        if (p == &net->ipv6.devconf_all->disable_ipv6) {
                WRITE_ONCE(net->ipv6.devconf_dflt->disable_ipv6, newf);
                addrconf_disable_change(net, newf);