|
@@ -1037,7 +1037,6 @@ error:
|
|
|
static int ip_setup_cork(struct sock *sk, struct inet_cork *cork,
|
|
|
struct ipcm_cookie *ipc, struct rtable **rtp)
|
|
|
{
|
|
|
- struct inet_sock *inet = inet_sk(sk);
|
|
|
struct ip_options_rcu *opt;
|
|
|
struct rtable *rt;
|
|
|
|
|
@@ -1063,8 +1062,8 @@ static int ip_setup_cork(struct sock *sk, struct inet_cork *cork,
|
|
|
* We steal reference to this route, caller should not release it
|
|
|
*/
|
|
|
*rtp = NULL;
|
|
|
- cork->fragsize = inet->pmtudisc == IP_PMTUDISC_PROBE ?
|
|
|
- rt->dst.dev->mtu : dst_mtu(&rt->dst);
|
|
|
+ cork->fragsize = ip_sk_use_pmtu(sk) ?
|
|
|
+ dst_mtu(&rt->dst) : rt->dst.dev->mtu;
|
|
|
cork->dst = &rt->dst;
|
|
|
cork->length = 0;
|
|
|
cork->ttl = ipc->ttl;
|
|
@@ -1315,7 +1314,8 @@ struct sk_buff *__ip_make_skb(struct sock *sk,
|
|
|
/* DF bit is set when we want to see DF on outgoing frames.
|
|
|
* If local_df is set too, we still allow to fragment this frame
|
|
|
* locally. */
|
|
|
- if (inet->pmtudisc >= IP_PMTUDISC_DO ||
|
|
|
+ if (inet->pmtudisc == IP_PMTUDISC_DO ||
|
|
|
+ inet->pmtudisc == IP_PMTUDISC_PROBE ||
|
|
|
(skb->len <= dst_mtu(&rt->dst) &&
|
|
|
ip_dont_fragment(sk, &rt->dst)))
|
|
|
df = htons(IP_DF);
|