• Eric Dumazet's avatar
    selftests: net: tcp_mmap must use TCP_ZEROCOPY_RECEIVE · aacb0c2e
    Eric Dumazet authored
    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: default avatarEric Dumazet <edumazet@google.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Acked-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    aacb0c2e
tcp_mmap.c 11.8 KB