From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8679C30216D for ; Wed, 3 Jun 2026 19:14:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780514099; cv=none; b=BiSn5jEOODFgDtaWpGzKGyqufUUoBrymqRp8SNaxnuQLuq2PXKSlPv1k1Fn70VGVCfpkgbtMolPTeNbnrXrbbjlW1BSqKabgvtMze6c9ztVcO9nOWpVxJVTj64X1Mxz4jJtTZDXSeXINwD/AWpwNceJy+/zAP1kaxi7wYfXOGkg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780514099; c=relaxed/simple; bh=KlraIHoO9dT7uQixZ1PcG6ChAwDAZ0OPlciMZSGCqQ4=; h=MIME-Version:Date:From:To:Cc:Message-Id:In-Reply-To:References: Subject:Content-Type; b=aq1Yg/cnFGIZ7L90CFCfLzwnIO3aS/ZTfaN9cV+IkNvLynoRSP90T10X6qaHuQL45i3dG9cQvuNHMQMl3eduKbZSm+yiolybPCBAAlSOPNT3ToMyTllBwidjEUCQXNhK3QxTTCQHi8jZfoRZFMI2yqCc2YvYms1EjnIvzQ6HSVI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eXA2MGoC; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="eXA2MGoC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F014F1F00893; Wed, 3 Jun 2026 19:14:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780514097; bh=zRiAvnR4/QeSXm7p6R5pu7S/hlCFjtD18rrCTstWfD8=; h=Date:From:To:Cc:In-Reply-To:References:Subject; b=eXA2MGoCuJYE5miKpYjCHdpKEKeGAjNsc334Blil8qVtK3DsBHt8qguN/tuW7LOcl DO3WeIkjFAKU9ef9bcuX9Un7yiS82SOJusdFywpyclWXXClb5XSb6qenHouSP1G5vs gugT54KpkFxyE8cqktqDEPFfqReW0BHhEsafxtOe75MCa6NV+tw5pfmm88Rt+uTwVE gMKfx6feWn2v31Qo2QzoDPllztQ45j6mLCx9MS2uQuGr2GulU42fwUpuGTgevOmoSf rxTCYnfDjprRj8aTqkPg08YBliTcu5rWaRDVglNqKd8m/vXWBDRR5ajBQkv40ZxEYf OVPRL1kW7VC4w== Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfauth.phl.internal (Postfix) with ESMTP id 28ACFF4006C; Wed, 3 Jun 2026 15:14:56 -0400 (EDT) Received: from phl-imap-04 ([10.202.2.82]) by phl-compute-02.internal (MEProxy); Wed, 03 Jun 2026 15:14:56 -0400 X-ME-Sender: X-ME-Proxy-Cause: dmFkZTF4B7mJMt3lRrh6wQMVI8cdziCIeAKm30NpqgaNQgENFV8NB97khw/2Hn2Sn+jeeb JFhi+EmGgl9OZSTWDXSJrkm5aHJt22L8jaNUnFYdKn5tLHDZlJ4zkg+sqizEFkSuBUGabr JinbF2LQRjwVtWrGJ9KTFDClbX0pMB/y2/+4oqaWTPIiCjSBj/DPLNwYDXCN5KpWkqFfqE XMkqXFa83en0J3fXhV/F2WxKq8B9Af96uyfxYrZyZWvWRqIDsvbvH81xE7FdFNv3d7TSIO oZQr1SSAJqH6YBJmrYUxwu81GeEL94aMAMWcSB/ZHBv2neyw7d9eooBRWr2Wtxkjx4z7ic E5SYjvbVJqv5AkuIUpCLQ9NKEjP50c4AJFlNqUE9XM8sALm6b2z7ezK64d9NlxsR9UH490 /KANSxo35NBiaDXz6wzzbaxRqKtCydWycqhdxpx0d/I2tRZ3zaIQ72tRWtbkP+TNUje6ly dPPezlrQr1x6VorvYzdedy4dKD7BAy05j57QKKSypFCkXo7Y6/tKo95lkFnOqTB13CPBWx XXFcbelytCIqq+OQSwYIo4QQjU85lAU07gvijk1P0dke5ZqBx3UHMRTXFzn7/I1uYPjcZW D3P678kOzvBtRu1HJ2KMjz+012RlagTtw/2r1TM4ZOHy69HbA3ynSNvJKD+Q X-ME-Proxy: Feedback-ID: i20964851:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 01256B6006F; Wed, 3 Jun 2026 15:14:55 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ThreadId: AuoKuaWt7G2w Date: Wed, 03 Jun 2026 15:14:35 -0400 From: "Anna Schumaker" To: "Pranjal Shrivastava" , linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org Cc: "Trond Myklebust" , "Christoph Hellwig" , "Christoph Hellwig" , "Shivaji Kant" Message-Id: <29a0511d-5216-46f2-a7e4-9c04ae9b1890@app.fastmail.com> In-Reply-To: <20260603053033.3300318-7-praan@google.com> References: <20260603053033.3300318-1-praan@google.com> <20260603053033.3300318-7-praan@google.com> Subject: Re: [PATCH v1 6/7] nfs: Optimize direct I/O to use folios for requests Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi Pranjal, On Wed, Jun 3, 2026, at 1:30 AM, Pranjal Shrivastava wrote: > Optimize nfs_direct_extract_pages() to group contiguous pages from the > same folio into single nfs_page structures. This effectively migrates > NFS Direct I/O from being page-based to being folio-based. > > Reduce the number of nfs_page allocations and subsequent iterations > by utilizing nfs_page_create_from_folio() to create aggregated > requests. I am seeing a LOT of failing xfstests after applying this patch (testing against various NFS versions over TCP with AUTH_SYS): +-------------+-----------+-------------+-------------+-------------+ | testcase | tcp-sys-3 | tcp-sys-4.0 | tcp-sys-4.1 | tcp-sys-4.2 | +-------------+-----------+-------------+-------------+-------------+ | generic/091 | failure | failure | failure | failure | | generic/130 | failure | failure | failure | failure | | generic/139 | skipped | skipped | skipped | failure | | generic/143 | skipped | skipped | skipped | failure | | generic/154 | skipped | skipped | skipped | failure | | generic/155 | skipped | skipped | skipped | failure | | generic/183 | skipped | skipped | skipped | failure | | generic/188 | skipped | skipped | skipped | failure | | generic/190 | skipped | skipped | skipped | failure | | generic/196 | skipped | skipped | skipped | failure | | generic/198 | failure | failure | failure | failure | | generic/203 | skipped | skipped | skipped | failure | | generic/214 | skipped | skipped | skipped | failure | | generic/240 | failure | failure | failure | failure | | generic/263 | failure | failure | failure | failure | | generic/287 | skipped | skipped | skipped | failure | | generic/290 | skipped | skipped | skipped | failure | | generic/292 | skipped | skipped | skipped | failure | | generic/330 | skipped | skipped | skipped | failure | | generic/444 | failure | skipped | skipped | skipped | | generic/450 | failure | failure | failure | failure | | generic/451 | failure | failure | failure | failure | | generic/586 | skipped | skipped | skipped | failure | | generic/647 | failure | failure | failure | failure | | generic/708 | failure | failure | failure | failure | | generic/729 | failure | failure | failure | failure | | generic/760 | failure | failure | failure | failure | +-------------+-----------+-------------+-------------+-------------+ I'm curious if you've run xfstests against your changes, and if you see the same failures? Thanks, Anna > > Signed-off-by: Pranjal Shrivastava > --- > fs/nfs/direct.c | 36 +++++++++++++++++++++++++++++------- > 1 file changed, 29 insertions(+), 7 deletions(-) > > diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c > index 59002c150f23..93e1af9ec36b 100644 > --- a/fs/nfs/direct.c > +++ b/fs/nfs/direct.c > @@ -194,23 +194,45 @@ static ssize_t nfs_direct_extract_pages(struct > nfs_direct_req *dreq, > return result; > > npages = (result + pgbase + PAGE_SIZE - 1) >> PAGE_SHIFT; > - for (i = 0; i < npages; i++) { > + for (i = 0; i < npages; ) { > + unsigned int chunk_len, folio_offset; > + unsigned int nr_to_add = 1; > struct nfs_page *req; > - unsigned int req_len = min_t(size_t, result - bytes, PAGE_SIZE - pgbase); > + struct folio *folio; > > - req = nfs_page_create_from_page(dreq->ctx, pagevec[i], > - pinned, pgbase, *pos, > - req_len); > + folio = page_folio(pagevec[i]); > + folio_offset = (folio_page_idx(folio, pagevec[i]) << PAGE_SHIFT) + pgbase; > + chunk_len = min_t(size_t, result - bytes, PAGE_SIZE - pgbase); > + > + while (i + nr_to_add < npages) { > + struct page *next_page = pagevec[i + nr_to_add]; > + struct page *prev_page = pagevec[i + nr_to_add - 1]; > + > + if (page_folio(next_page) != folio || > + next_page != prev_page + 1) > + break; > + > + chunk_len += min_t(size_t, result - bytes - chunk_len, PAGE_SIZE); > + nr_to_add++; > + } > + > + req = nfs_page_create_from_folio(dreq->ctx, folio, > + pinned, folio_offset, > + chunk_len); > if (IS_ERR(req)) { > if (!bytes) > bytes = PTR_ERR(req); > break; > } > > + req->wb_index = *pos >> PAGE_SHIFT; > + req->wb_offset = *pos; > + > list_add_tail(&req->wb_list, list); > pgbase = 0; > - bytes += req_len; > - *pos += req_len; > + bytes += chunk_len; > + *pos += chunk_len; > + i += nr_to_add; > } > > if (i < npages) { > -- > 2.54.0.1013.g208068f2d8-goog