selftests: net: tcp_mmap must use TCP_ZEROCOPY_RECEIVE
authorEric Dumazet <edumazet@google.com>
Fri, 27 Apr 2018 15:58:09 +0000 (08:58 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 30 Apr 2018 01:29:55 +0000 (21:29 -0400)
commitaacb0c2e524c38d7ab48b0beb86427a36807079f
tree8b917914f2e12f287d7be8334c227dd65fa8ec8a
parent05255b823a6173525587f29c4e8f1ca33fd7677d
selftests: net: tcp_mmap must use TCP_ZEROCOPY_RECEIVE

After prior kernel change, mmap() on TCP socket only reserves VMA.

We have to use getsockopt(fd, IPPROTO_TCP, TCP_ZEROCOPY_RECEIVE, ...)
to perform the transfert of pages from skbs in TCP receive queue into such VMA.

struct tcp_zerocopy_receive {
__u64 address; /* in: address of mapping */
__u32 length; /* in/out: number of bytes to map/mapped */
__u32 recv_skip_hint; /* out: amount of bytes to skip */
};

After a successful getsockopt(...TCP_ZEROCOPY_RECEIVE...), @length contains
number of bytes that were mapped, and @recv_skip_hint contains number of bytes
that should be read using conventional read()/recv()/recvmsg() system calls,
to skip a sequence of bytes that can not be mapped, because not properly page
aligned.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Andy Lutomirski <luto@kernel.org>
Acked-by: Soheil Hassas Yeganeh <soheil@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/tcp_mmap.c