sk_dst_get() does not require socket lock.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
                        return -EFAULT;
                return 0;
        }
-       }
-
-       if (needs_rtnl)
-               rtnl_lock();
-       sockopt_lock_sock(sk);
-
-       switch (optname) {
        case IP_MTU:
        {
                struct dst_entry *dst;
                        val = dst_mtu(dst);
                        dst_release(dst);
                }
-               if (!val) {
-                       sockopt_release_sock(sk);
+               if (!val)
                        return -ENOTCONN;
-               }
-               break;
+               goto copyval;
+       }
        }
+
+       if (needs_rtnl)
+               rtnl_lock();
+       sockopt_lock_sock(sk);
+
+       switch (optname) {
        case IP_UNICAST_IF:
                val = (__force int)htonl((__u32) inet->uc_index);
                break;