Message ID | 20090112131517.GD5901@ff.dom.local |
---|---|
State | RFC, archived |
Delegated to: | David Miller |
Headers | show |
On Mon, Jan 12, 2009 at 01:15:17PM +0000, Jarek Poplawski wrote: > > I've wondered if something like this could work as a temporary hack? No we should fix it in skb_splice_bits because the corruption can affect other terminations as well if a delay occurs. Cheers,
On Mon, Jan 12, 2009 at 01:15:17PM +0000, Jarek Poplawski wrote: ... > I've wondered if something like this could work as a temporary hack? ... > @@ -776,7 +777,8 @@ ssize_t tcp_sendpage(struct socket *sock, struct page *page, int offset, > struct sock *sk = sock->sk; > > if (!(sk->sk_route_caps & NETIF_F_SG) || > - !(sk->sk_route_caps & NETIF_F_ALL_CSUM)) > + !(sk->sk_route_caps & NETIF_F_ALL_CSUM) || > + PageSlab(page)) > return sock_no_sendpage(sock, page, offset, size, flags); Just for the record: this wouldn't work yet:-( It should be probably something like "PageCompound(compound_head(page))" test instead. Jarek P. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index ce572f9..99b0876 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -264,6 +264,7 @@ #include <linux/cache.h> #include <linux/err.h> #include <linux/crypto.h> +#include <linux/page-flags.h> #include <net/icmp.h> #include <net/tcp.h> @@ -776,7 +777,8 @@ ssize_t tcp_sendpage(struct socket *sock, struct page *page, int offset, struct sock *sk = sock->sk; if (!(sk->sk_route_caps & NETIF_F_SG) || - !(sk->sk_route_caps & NETIF_F_ALL_CSUM)) + !(sk->sk_route_caps & NETIF_F_ALL_CSUM) || + PageSlab(page)) return sock_no_sendpage(sock, page, offset, size, flags); lock_sock(sk);