mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
inet: lockless getsockopt(IP_MTU)
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>
This commit is contained in:
parent
a4725d0d89
commit
3523bc91e4
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user