Loading net/ipv4/tcp.c +10 −13 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -1008,13 +1005,13 @@ int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, } 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) { Loading @@ -1031,7 +1028,7 @@ int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, } else if (page) { if (off == PAGE_SIZE) { put_page(page); TCP_PAGE(sk) = page = NULL; sk->sk_sndmsg_page = page = NULL; off = 0; } } else Loading @@ -1057,9 +1054,9 @@ int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, /* 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; } Loading @@ -1069,15 +1066,15 @@ int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, 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) Loading Loading
net/ipv4/tcp.c +10 −13 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -1008,13 +1005,13 @@ int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, } 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) { Loading @@ -1031,7 +1028,7 @@ int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, } else if (page) { if (off == PAGE_SIZE) { put_page(page); TCP_PAGE(sk) = page = NULL; sk->sk_sndmsg_page = page = NULL; off = 0; } } else Loading @@ -1057,9 +1054,9 @@ int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, /* 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; } Loading @@ -1069,15 +1066,15 @@ int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, 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) Loading