mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-18 18:28:52 -04:00
inet: implement lockless IP_MTU_DISCOVER
inet->pmtudisc can be read locklessly. Implement proper lockless reads and writes to inet->pmtudisc ip_sock_set_mtu_discover() can now be called from arbitrary contexts. 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:
committed by
David S. Miller
parent
c9746e6a19
commit
ceaa714138
@@ -434,19 +434,22 @@ int ip_dont_fragment(const struct sock *sk, const struct dst_entry *dst)
|
||||
|
||||
static inline bool ip_sk_accept_pmtu(const struct sock *sk)
|
||||
{
|
||||
return inet_sk(sk)->pmtudisc != IP_PMTUDISC_INTERFACE &&
|
||||
inet_sk(sk)->pmtudisc != IP_PMTUDISC_OMIT;
|
||||
u8 pmtudisc = READ_ONCE(inet_sk(sk)->pmtudisc);
|
||||
|
||||
return pmtudisc != IP_PMTUDISC_INTERFACE &&
|
||||
pmtudisc != IP_PMTUDISC_OMIT;
|
||||
}
|
||||
|
||||
static inline bool ip_sk_use_pmtu(const struct sock *sk)
|
||||
{
|
||||
return inet_sk(sk)->pmtudisc < IP_PMTUDISC_PROBE;
|
||||
return READ_ONCE(inet_sk(sk)->pmtudisc) < IP_PMTUDISC_PROBE;
|
||||
}
|
||||
|
||||
static inline bool ip_sk_ignore_df(const struct sock *sk)
|
||||
{
|
||||
return inet_sk(sk)->pmtudisc < IP_PMTUDISC_DO ||
|
||||
inet_sk(sk)->pmtudisc == IP_PMTUDISC_OMIT;
|
||||
u8 pmtudisc = READ_ONCE(inet_sk(sk)->pmtudisc);
|
||||
|
||||
return pmtudisc < IP_PMTUDISC_DO || pmtudisc == IP_PMTUDISC_OMIT;
|
||||
}
|
||||
|
||||
static inline unsigned int ip_dst_mtu_maybe_forward(const struct dst_entry *dst,
|
||||
|
||||
Reference in New Issue
Block a user