diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index aa1040b5a9776d2f88043c2e487d57cffba1d2a8..b9e44ad2b40d97e88ac1e3133338f9916d731631 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -1904,6 +1904,14 @@ static int tcp_zerocopy_receive(struct sock *sk, sock_rps_record_flow(sk); + if (inq < PAGE_SIZE) { + zc->length = 0; + zc->recv_skip_hint = inq; + if (!inq && sock_flag(sk, SOCK_DONE)) + return -EIO; + return 0; + } + mmap_read_lock(current->mm); vma = find_vma(current->mm, address);