Subject: [net-next 5/8] tcp: Fast return if inq < PAGE_SIZE for recv zerocopy.

From: Arjun Roy <[email-masked]>
Date: Thu, 12 Nov 2020 11:02:02 -0800

From: Arjun Roy <[email-masked]>

Sometimes, we may call tcp receive zerocopy when inq is 0,
or inq < PAGE_SIZE, in which case we cannot remap pages. In this case,
simply return the appropriate hint for regular copying without taking
mmap_sem.

Signed-off-by: Arjun Roy <[email-masked]>
Signed-off-by: Eric Dumazet <[email-masked]>
Signed-off-by: Soheil Hassas Yeganeh <[email-masked]>

---
 net/ipv4/tcp.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index f3bd606a678d..38f8e03f1182 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -1885,6 +1885,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);
-- 
2.29.2.222.g5d2a92d10f8-goog