Revert "ipv6: save dontfrag in cork"
This reverts commit c1502fc84d which is
commit a18dfa9925b9ef6107ea3aa5814ca3c704d34a8a upstream.
It breaks the Android kernel abi and can be brought back in the future
in an abi-safe way if it is really needed.
Bug: 161946584
Change-Id: I903d355bf399107b2cd8482f437fbddfc55a8ff3
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -214,7 +214,6 @@ struct inet6_cork {
|
|||||||
struct ipv6_txoptions *opt;
|
struct ipv6_txoptions *opt;
|
||||||
u8 hop_limit;
|
u8 hop_limit;
|
||||||
u8 tclass;
|
u8 tclass;
|
||||||
u8 dontfrag:1;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* struct ipv6_pinfo - ipv6 private area */
|
/* struct ipv6_pinfo - ipv6 private area */
|
||||||
|
|||||||
@@ -1386,7 +1386,6 @@ static int ip6_setup_cork(struct sock *sk, struct inet_cork_full *cork,
|
|||||||
}
|
}
|
||||||
v6_cork->hop_limit = ipc6->hlimit;
|
v6_cork->hop_limit = ipc6->hlimit;
|
||||||
v6_cork->tclass = ipc6->tclass;
|
v6_cork->tclass = ipc6->tclass;
|
||||||
v6_cork->dontfrag = ipc6->dontfrag;
|
|
||||||
if (rt->dst.flags & DST_XFRM_TUNNEL)
|
if (rt->dst.flags & DST_XFRM_TUNNEL)
|
||||||
mtu = READ_ONCE(np->pmtudisc) >= IPV6_PMTUDISC_PROBE ?
|
mtu = READ_ONCE(np->pmtudisc) >= IPV6_PMTUDISC_PROBE ?
|
||||||
READ_ONCE(rt->dst.dev->mtu) : dst_mtu(&rt->dst);
|
READ_ONCE(rt->dst.dev->mtu) : dst_mtu(&rt->dst);
|
||||||
@@ -1418,7 +1417,7 @@ static int __ip6_append_data(struct sock *sk,
|
|||||||
int getfrag(void *from, char *to, int offset,
|
int getfrag(void *from, char *to, int offset,
|
||||||
int len, int odd, struct sk_buff *skb),
|
int len, int odd, struct sk_buff *skb),
|
||||||
void *from, size_t length, int transhdrlen,
|
void *from, size_t length, int transhdrlen,
|
||||||
unsigned int flags)
|
unsigned int flags, struct ipcm6_cookie *ipc6)
|
||||||
{
|
{
|
||||||
struct sk_buff *skb, *skb_prev = NULL;
|
struct sk_buff *skb, *skb_prev = NULL;
|
||||||
struct inet_cork *cork = &cork_full->base;
|
struct inet_cork *cork = &cork_full->base;
|
||||||
@@ -1472,7 +1471,7 @@ static int __ip6_append_data(struct sock *sk,
|
|||||||
if (headersize + transhdrlen > mtu)
|
if (headersize + transhdrlen > mtu)
|
||||||
goto emsgsize;
|
goto emsgsize;
|
||||||
|
|
||||||
if (cork->length + length > mtu - headersize && v6_cork->dontfrag &&
|
if (cork->length + length > mtu - headersize && ipc6->dontfrag &&
|
||||||
(sk->sk_protocol == IPPROTO_UDP ||
|
(sk->sk_protocol == IPPROTO_UDP ||
|
||||||
sk->sk_protocol == IPPROTO_ICMPV6 ||
|
sk->sk_protocol == IPPROTO_ICMPV6 ||
|
||||||
sk->sk_protocol == IPPROTO_RAW)) {
|
sk->sk_protocol == IPPROTO_RAW)) {
|
||||||
@@ -1844,7 +1843,7 @@ int ip6_append_data(struct sock *sk,
|
|||||||
|
|
||||||
return __ip6_append_data(sk, &sk->sk_write_queue, &inet->cork,
|
return __ip6_append_data(sk, &sk->sk_write_queue, &inet->cork,
|
||||||
&np->cork, sk_page_frag(sk), getfrag,
|
&np->cork, sk_page_frag(sk), getfrag,
|
||||||
from, length, transhdrlen, flags);
|
from, length, transhdrlen, flags, ipc6);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(ip6_append_data);
|
EXPORT_SYMBOL_GPL(ip6_append_data);
|
||||||
|
|
||||||
@@ -2049,7 +2048,7 @@ struct sk_buff *ip6_make_skb(struct sock *sk,
|
|||||||
err = __ip6_append_data(sk, &queue, cork, &v6_cork,
|
err = __ip6_append_data(sk, &queue, cork, &v6_cork,
|
||||||
¤t->task_frag, getfrag, from,
|
¤t->task_frag, getfrag, from,
|
||||||
length + exthdrlen, transhdrlen + exthdrlen,
|
length + exthdrlen, transhdrlen + exthdrlen,
|
||||||
flags);
|
flags, ipc6);
|
||||||
if (err) {
|
if (err) {
|
||||||
__ip6_flush_pending_frames(sk, &queue, cork, &v6_cork);
|
__ip6_flush_pending_frames(sk, &queue, cork, &v6_cork);
|
||||||
return ERR_PTR(err);
|
return ERR_PTR(err);
|
||||||
|
|||||||
Reference in New Issue
Block a user