|
@@ -888,9 +888,6 @@ int tcp_sendpage(struct sock *sk, struct page *page, int offset,
|
|
|
}
|
|
|
EXPORT_SYMBOL(tcp_sendpage);
|
|
|
|
|
|
-#define TCP_PAGE(sk) (sk->sk_sndmsg_page)
|
|
|
-#define TCP_OFF(sk) (sk->sk_sndmsg_off)
|
|
|
-
|
|
|
static inline int select_size(const struct sock *sk, bool sg)
|
|
|
{
|
|
|
const struct tcp_sock *tp = tcp_sk(sk);
|
|
@@ -1008,13 +1005,13 @@ new_segment:
|
|
|
} else {
|
|
|
int merge = 0;
|
|
|
int i = skb_shinfo(skb)->nr_frags;
|
|
|
- struct page *page = TCP_PAGE(sk);
|
|
|
+ struct page *page = sk->sk_sndmsg_page;
|
|
|
int off;
|
|
|
|
|
|
if (page && page_count(page) == 1)
|
|
|
- TCP_OFF(sk) = 0;
|
|
|
+ sk->sk_sndmsg_off = 0;
|
|
|
|
|
|
- off = TCP_OFF(sk);
|
|
|
+ off = sk->sk_sndmsg_off;
|
|
|
|
|
|
if (skb_can_coalesce(skb, i, page, off) &&
|
|
|
off != PAGE_SIZE) {
|
|
@@ -1031,7 +1028,7 @@ new_segment:
|
|
|
} else if (page) {
|
|
|
if (off == PAGE_SIZE) {
|
|
|
put_page(page);
|
|
|
- TCP_PAGE(sk) = page = NULL;
|
|
|
+ sk->sk_sndmsg_page = page = NULL;
|
|
|
off = 0;
|
|
|
}
|
|
|
} else
|
|
@@ -1057,9 +1054,9 @@ new_segment:
|
|
|
/* If this page was new, give it to the
|
|
|
* socket so it does not get leaked.
|
|
|
*/
|
|
|
- if (!TCP_PAGE(sk)) {
|
|
|
- TCP_PAGE(sk) = page;
|
|
|
- TCP_OFF(sk) = 0;
|
|
|
+ if (!sk->sk_sndmsg_page) {
|
|
|
+ sk->sk_sndmsg_page = page;
|
|
|
+ sk->sk_sndmsg_off = 0;
|
|
|
}
|
|
|
goto do_error;
|
|
|
}
|
|
@@ -1069,15 +1066,15 @@ new_segment:
|
|
|
skb_frag_size_add(&skb_shinfo(skb)->frags[i - 1], copy);
|
|
|
} else {
|
|
|
skb_fill_page_desc(skb, i, page, off, copy);
|
|
|
- if (TCP_PAGE(sk)) {
|
|
|
+ if (sk->sk_sndmsg_page) {
|
|
|
get_page(page);
|
|
|
} else if (off + copy < PAGE_SIZE) {
|
|
|
get_page(page);
|
|
|
- TCP_PAGE(sk) = page;
|
|
|
+ sk->sk_sndmsg_page = page;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- TCP_OFF(sk) = off + copy;
|
|
|
+ sk->sk_sndmsg_off = off + copy;
|
|
|
}
|
|
|
|
|
|
if (!copied)
|