|
@@ -282,10 +282,12 @@ int ip_decrease_ttl(struct iphdr *iph)
|
|
|
}
|
|
|
|
|
|
static inline
|
|
|
-int ip_dont_fragment(struct sock *sk, struct dst_entry *dst)
|
|
|
+int ip_dont_fragment(const struct sock *sk, const struct dst_entry *dst)
|
|
|
{
|
|
|
- return inet_sk(sk)->pmtudisc == IP_PMTUDISC_DO ||
|
|
|
- (inet_sk(sk)->pmtudisc == IP_PMTUDISC_WANT &&
|
|
|
+ u8 pmtudisc = READ_ONCE(inet_sk(sk)->pmtudisc);
|
|
|
+
|
|
|
+ return pmtudisc == IP_PMTUDISC_DO ||
|
|
|
+ (pmtudisc == IP_PMTUDISC_WANT &&
|
|
|
!(dst_metric_locked(dst, RTAX_MTU)));
|
|
|
}
|
|
|
|