From: Eric Dumazet Date: Fri, 22 Sep 2023 03:42:18 +0000 (+0000) Subject: inet: lockless getsockopt(IP_MTU) X-Git-Tag: io_uring-6.7-2023-11-10~40^2~274^2~3 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=3523bc91e4b4da39ccf18a0252d13108877ece0a;p=linux-2.6-block.git inet: lockless getsockopt(IP_MTU) sk_dst_get() does not require socket lock. Signed-off-by: Eric Dumazet Reviewed-by: David Ahern Signed-off-by: David S. Miller --- diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index 45d89487914a..04579e390ddd 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c @@ -1620,13 +1620,6 @@ int do_ip_getsockopt(struct sock *sk, int level, int optname, return -EFAULT; return 0; } - } - - if (needs_rtnl) - rtnl_lock(); - sockopt_lock_sock(sk); - - switch (optname) { case IP_MTU: { struct dst_entry *dst; @@ -1636,12 +1629,17 @@ int do_ip_getsockopt(struct sock *sk, int level, int optname, 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;