From mboxrd@z Thu Jan  1 00:00:00 1970
Received: from mail-il1-f176.google.com (mail-il1-f176.google.com [209.85.166.176])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by smtp.subspace.kernel.org (Postfix) with ESMTPS id A54DF1A7253
	for <io-uring@vger.kernel.org>; Tue,  1 Apr 2025 19:12:24 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.166.176
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
	t=1743534748; cv=none; b=WJ/cC8lE3nUP+S5eJ8Aq+vu9XCV+wr+GqILasjKMyzm4P7S+5bTjFfzP3/LVPvpG047T0zwr7jdEOJrGjIoPQe7hutrT6QZcoQCkEp8K77VLkC5Een1izcGOsWIWyCnxcKRx5jmuZ/GQ6gx7poCcQAp/pPA3ktcA+WLXJtzNKyg=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
	s=arc-20240116; t=1743534748; c=relaxed/simple;
	bh=eAQVZUQs+EmMrKpIZPMeHucISBrVQJw3Vs0Szl2gbi0=;
	h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:
	 In-Reply-To:Content-Type; b=uk7/+UeVWaha8/y3HjqxOFvK2ddhkfzAg6nRtCV2XbRfAJC3Fy1oG/i8CGlsKMX5/4XcUwqJ2fKGGW0TXHyPMWcOlQTwqREtVrL6aB3aBjmVVa4KY2nZOrh5t1LU+5Zcjyl7tKLOejL7DGZGzSBJcDd8QiYgy484roUUTSduTJo=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.dk; spf=pass smtp.mailfrom=kernel.dk; dkim=pass (2048-bit key) header.d=kernel-dk.20230601.gappssmtp.com header.i=@kernel-dk.20230601.gappssmtp.com header.b=Iw1PCjOy; arc=none smtp.client-ip=209.85.166.176
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.dk
Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=kernel.dk
Authentication-Results: smtp.subspace.kernel.org;
	dkim=pass (2048-bit key) header.d=kernel-dk.20230601.gappssmtp.com header.i=@kernel-dk.20230601.gappssmtp.com header.b="Iw1PCjOy"
Received: by mail-il1-f176.google.com with SMTP id e9e14a558f8ab-3cf8e017abcso24275975ab.1
        for <io-uring@vger.kernel.org>; Tue, 01 Apr 2025 12:12:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=kernel-dk.20230601.gappssmtp.com; s=20230601; t=1743534744; x=1744139544; darn=vger.kernel.org;
        h=content-transfer-encoding:in-reply-to:from:content-language
         :references:cc:to:subject:user-agent:mime-version:date:message-id
         :from:to:cc:subject:date:message-id:reply-to;
        bh=mNOpdjfSxsaQ6kxQg3VPtD5H95PG7oR89VrL16uDA2k=;
        b=Iw1PCjOy7DRehbRm1ACVIvIYwaFwgCGKeLBTCtvA/dnAhrzAOMX14Sm+S9ORPunyMD
         4HCblyyTDsxnH5ID54BIf8hxtdFk4ZfKNbEaHt4zZTKncc8+qa5Nt0/VrmtknwLUMOIV
         8Dhpw44D2MCZNJneuqnotTqgcsivWPXsTsWfIAzVdrqB1zcIu5oNKFWgOsqAsKsv/rPY
         L3kRuw4/4IjjBIGL91nYnD783h7B1RQBJ+XqtIwKOYf62mT77tkkkatcyM9Wc6vXvra1
         7PhNy3OUs8XMYNzJ0UsEGrrLWai5kZESQjce3oyavLcSzqnHAzdFM6VseFCcMNbrLXxL
         Hihg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20230601; t=1743534744; x=1744139544;
        h=content-transfer-encoding:in-reply-to:from:content-language
         :references:cc:to:subject:user-agent:mime-version:date:message-id
         :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
        bh=mNOpdjfSxsaQ6kxQg3VPtD5H95PG7oR89VrL16uDA2k=;
        b=t/Bsv09sB/IgoI8D/RWuHKr+AX65RH/MjpkDtDHg0p+CDFM2BYvvMZIsPShcOrJZ6I
         86K7GkVdt+9ri7ok+gazwgxgSIJC3UQP98S6EYw9n5SmjC/Gtm6+iigyvphWIjBlehUv
         H0WZH4y4+3+bpAp6kdlnpvmS7usM5GdYtaeDAH9WblwFGp7jXy4wDPIFolOSorEPMT9k
         LHe/wof+bkCEZOJOGBbeuHDr2wnMoeJ8zrxLexERqBAzVdqFGFM1UKqOE2O7j9puIaNu
         P80QXGyOFc6R0W25zeXJKXUc+2lIMghMgMddCsMl8MQ5zLJgmoreBSFVt/34a25tzvda
         HQxQ==
X-Forwarded-Encrypted: i=1; AJvYcCU6giKsgIRVVnymFGcSqM4dBdJVYzZ1+FtKY2whnCQ+oviJIyPJ7ecBSZCBsud3K79yO4W55q4sQw==@vger.kernel.org
X-Gm-Message-State: AOJu0YzPr2fjiLB49HL6ST4obhwNSMrry/mVajuKYhb1dyeFA5HAeh4g
	2jvSKN+65jAdQHkiiRbjRDVawnUOO9Ipo49/lAXCg5nDy9LcKfGu61UPmZW4DdA=
X-Gm-Gg: ASbGncujCE0ZdckSIWe12HZpC1Lj8tPlqtSwidQ2V+i8MlX7IrJOKG5ZqKE8LeMPuOR
	bQcb4vhI5x6J3dcfMnyvSeCIcORQvTkEVBfAo6zB2Os9rfc+uuSKNcpZdZjYXZmjPBa8SuoVNqc
	gQldC47e1B5QOeO5nNdpU485WzfsN/cVJnVnS1ZIi0UwXaKrg3WQX3CdHRByWKSjddwcfe8yGJF
	d6cGlXmdy/DoLS3KRRhSCjmyyfXU0eo5p4c4hdViVsDxSczhc9mBNO2+8jW7S1yhFtmsi2KJL8T
	O7wUOTWkx7KZiAWxb8XgB7YJgkAM83SQsZuzX3QWLbvIRpHvbiBB
X-Google-Smtp-Source: AGHT+IFf1iWU+UL97ExpA+SqHCgxDOQNpbFNj00K5tdoP0qec11ojyhUjHhnCPX5aRmUioQIL467IA==
X-Received: by 2002:a05:6e02:17c5:b0:3d4:6f9d:c0d0 with SMTP id e9e14a558f8ab-3d5e0909503mr159231755ab.8.1743534743719;
        Tue, 01 Apr 2025 12:12:23 -0700 (PDT)
Received: from [192.168.1.150] ([198.8.77.157])
        by smtp.gmail.com with ESMTPSA id 8926c6da1cb9f-4f4647186desm2580540173.10.2025.04.01.12.12.22
        (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
        Tue, 01 Apr 2025 12:12:23 -0700 (PDT)
Message-ID: <3c1a39f0-a6d7-41af-8235-af299f164633@kernel.dk>
Date: Tue, 1 Apr 2025 13:12:22 -0600
Precedence: bulk
X-Mailing-List: io-uring@vger.kernel.org
List-Id: <io-uring.vger.kernel.org>
List-Subscribe: <mailto:io-uring+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:io-uring+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH] io_uring/zcrx: return early from io_zcrx_recv_skb if
 readlen is 0
To: David Wei <dw@davidwei.uk>, io-uring@vger.kernel.org
Cc: Pavel Begunkov <asml.silence@gmail.com>
References: <20250401182813.1115909-1-dw@davidwei.uk>
 <e89aef50-7364-4ab9-9582-aef6aec8cffb@kernel.dk>
 <20e4d11f-688f-46de-9094-765073f0dc41@davidwei.uk>
Content-Language: en-US
From: Jens Axboe <axboe@kernel.dk>
In-Reply-To: <20e4d11f-688f-46de-9094-765073f0dc41@davidwei.uk>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

On 4/1/25 1:10 PM, David Wei wrote:
> On 2025-04-01 11:56, Jens Axboe wrote:
>> On 4/1/25 12:28 PM, David Wei wrote:
>>> When readlen is set for a recvzc request, tcp_read_sock() will call
>>> io_zcrx_recv_skb() one final time with len == desc->count == 0. This is
>>> caused by the !desc->count check happening too late. The offset + 1 !=
>>> skb->len happens earlier and causes the while loop to continue.
>>>
>>> Fix this in io_zcrx_recv_skb() instead of tcp_read_sock(). Return early
>>> if len is 0 i.e. the read is done.
>>
>> Needs a Fixes tag, which looks like it should be:
>>
>> Fixes: 6699ec9a23f8 ("io_uring/zcrx: add a read limit to recvzc requests")
>>
>> ?
> 
> Sorry I missed that, will add the tag.
> 
>>
>>> Signed-off-by: David Wei <dw@davidwei.uk>
>>> ---
>>>  io_uring/zcrx.c | 2 ++
>>>  1 file changed, 2 insertions(+)
>>>
>>> diff --git a/io_uring/zcrx.c b/io_uring/zcrx.c
>>> index 9c95b5b6ec4e..d1dd25e7cf4a 100644
>>> --- a/io_uring/zcrx.c
>>> +++ b/io_uring/zcrx.c
>>> @@ -818,6 +818,8 @@ io_zcrx_recv_skb(read_descriptor_t *desc, struct sk_buff *skb,
>>>  	int ret = 0;
>>>  
>>>  	len = min_t(size_t, len, desc->count);
>>> +	if (!len)
>>> +		goto out;
>>
>> just return 0 here? Jumping to out would make more sense if there
>> are things to fixup/account at this point, but it's just going
>> to find offset == start_off and return 'ret', which is 0 anyway.
>>
> 
> Makes sense, yeah. I'll return 0 here early.

Probably augment that with an unlikely() as well for v2, it's definitely
an error/unexpected case.

-- 
Jens Axboe