From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (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 4A2453749F4 for ; Tue, 16 Jun 2026 14:11:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781619100; cv=none; b=sLsScp8V2FIE+wWPMF84fwmzfsCi7Kwl5LvIdHh0IGeU9cKOPsWuxpt4FXpaj7i1lLJKU9NJAc0Qyf/6qj19X+UIDr3gUNl2gtjFAYvl3SlZATWN6otAjOxnWs2QcMmWcYfaVnmhpmF+CW1fkiKN0wdQzHg+RACfke2U344s+mo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781619100; c=relaxed/simple; bh=mMKRkGAPxYFjnF7LcG8cNkZXWSK+DE2zRyfF+UJ/h90=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=im3Wki4j174BmdnopvYU1OJR04NZYG9Uv1LHcikD2BDAbfAUapk8FjAMrVgMZh1p/O1dgNmhoh/7dYBgG9o6iy924Ej7jC4WvdTfTHdIkhXr5nEL6nb+TY+L9LUN0l21VuOaTg1V6Vl99GZxqN8INMhuf/2dcdDv+6sOSNaKSh0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=YNkls+VH; arc=none smtp.client-ip=209.85.214.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="YNkls+VH" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-2bf2d865383so47715ad.1 for ; Tue, 16 Jun 2026 07:11:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1781619098; x=1782223898; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=MYKDImdJE6b0vXpqzbcBAxSut29kw8xV4RyLeJvmZtE=; b=YNkls+VHDJuyjVWKZ0Ytu2OKZQrnmFodL5p56XbmlNCtG5EIqA0I8+Fs25J7kjkmBD yBqE9Mxclyi9IfjUzVr7rGCBZy5d/RA73rjZFAWNEH6q6TNCZmK05dpdPOpXEs3X8cSS WpxzHb2ZDzkrB+EEvYW+OXB4fY8uCUk5bcwhtTZtej12mOuSwJiGHFZ3LZZZuW/RAa86 0L/pGCiVLrHusVq2divd+ICBnXP7siqxtmX7x+wv77zbb0pSgDoBFdIPvZTSr8t0W5Ym xN/Tp3dwTN2Jv89cDRhPwplxNMAT9sdVAPuELLE5d0U4dFA9w2qEXq6D8B5FPn/B8Iu6 /O7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781619098; x=1782223898; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MYKDImdJE6b0vXpqzbcBAxSut29kw8xV4RyLeJvmZtE=; b=aa2m50jqv6R1aXHrD9jFIPpCVydnZnXhN6uqBvHZEv3fLEJvq4+Wm97kLTLLOvBzr9 qviH3/S5QXTzEDZIja2FxWc9TE75QKTeadtTM7uVbchE/DU12wD0qk+f4t2aFv5MvnX5 skJiWC2dVEos9ODnl3Y2msImhiCg+r5Po3ZDpW8UThonLm/rJyCFRup6iUimyEsuSqbP J6gR+VJubym/91w63uNmJc42nz/fuzaNjDC1n9F3g5ndWJ13nvpXoqpBxgsvh1Vz/QvI GKLAcuKuTAXUwus0KoZDbIxIGQBqO5B8P9WlvjyJBJAIM1zIbXMS6xfEuhn8TvXVG2is OfCA== X-Forwarded-Encrypted: i=1; AFNElJ9CIzNAIdrO56lRXPcT16+dz3/2OKWwlbh1TbjtkqCHx6kfJXPd7gkXxB8FCTh1B03yLb4/DzhLj+XJxME=@vger.kernel.org X-Gm-Message-State: AOJu0YyI5uj0ddCwhXuJx7Lu00+jfufxrUlgnb0SMRKRiS0iTreOh08E 2uiwUWkQSCvFCQu/PV+fUgZN8hG/B+STq3m/EVKgw1uGYf5eDbVfLxH68wjSnxBjEA== X-Gm-Gg: Acq92OGCfJgIibkMR5b+kAqJ2Q7aWNhgtbf2zPQWdAy6p/g9c/Sze6E3SKuUbwdnVOW WlcGTcgnV0IUETNDWkKlac9gCU7cw8Rpj6jjAvq9VLKVU8ZlXwNgfsXRLiHmsDIiFP4tdcS+fle nON13Vu3ufc1GPCft5i4s6XjR6u5IAueAyPDWcrjSF5iDxDWDdjjVmpzYc8rNZbl3JDSHQInFCP yKXEksF6Ed1HwmeAqP18DfMIbKjD7Jk40hoASghm2Ae21UkzqU2XhSV8GKa56WpV1Cs3Wh9RzBa ojuoZy0Pq4+0Of34SsU5dJr4Oci8s3CRQ28l5ovYJ6g0ttzvmKhdu4CJ6rVBS/fwu5IU2AE0Gdw Q4LCqf6F1wJyB4Lbwm6IitzqIIX/++OMDkQEEgUIb1Wwt0gWmo/EpzYAqRk9W1hpm5rAMFEZjMi XY5ragf8GWNmqZqdXMLrka5Szmt14LN1v6HO8B2BnNwb9xfVGbWdlbdDPky8V1 X-Received: by 2002:a17:903:1b0e:b0:2bd:6dad:7cca with SMTP id d9443c01a7336-2c69a357a8cmr2492675ad.22.1781619097997; Tue, 16 Jun 2026 07:11:37 -0700 (PDT) Received: from google.com (199.255.142.34.bc.googleusercontent.com. [34.142.255.199]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-37c521a959bsm3218373a91.2.2026.06.16.07.11.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Jun 2026 07:11:37 -0700 (PDT) Date: Tue, 16 Jun 2026 14:11:32 +0000 From: Pranjal Shrivastava To: Anna Schumaker Cc: linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org, Trond Myklebust , Christoph Hellwig , Christoph Hellwig , Shivaji Kant Subject: Re: [PATCH v1 6/7] nfs: Optimize direct I/O to use folios for requests Message-ID: References: <20260603053033.3300318-1-praan@google.com> <20260603053033.3300318-7-praan@google.com> <29a0511d-5216-46f2-a7e4-9c04ae9b1890@app.fastmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: On Thu, Jun 04, 2026 at 07:59:14AM +0000, Pranjal Shrivastava wrote: > On Wed, Jun 03, 2026 at 03:14:35PM -0400, Anna Schumaker wrote: > > 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? > > Hi Anna, I was able to run xfstests [1] and identify the issues. I've fixed those issues and posted a v2 [2]. I don't see any failure, here's a run v2: ./check generic/091 generic/130 generic/139 generic/143 generic/154 \ generic/155 generic/183 generic/188 generic/190 generic/196 \ generic/198 generic/203 generic/214 generic/240 generic/263 \ generic/287 generic/290 generic/292 generic/330 generic/444 \ generic/450 generic/451 generic/586 generic/647 generic/708 \ generic/729 generic/760 SECTION -- rdma3 ========================= Ran: generic/091 generic/130 generic/139 generic/143 generic/154 generic/155 generic/183 generic/188 generic/190 generic/196 generic/198 generic/203 generic/214 generic/240 generic/263 generic/287 generic/290 generic/292 generic/330 generic/444 generic/450 generic/451 generic/586 generic/647 generic/708 generic/729 generic/760 Not run: generic/183 generic/188 generic/190 generic/196 generic/203 generic/287 generic/290 generic/292 generic/330 generic/444 Passed all 27 tests SECTION -- rdma40 ========================= Ran: generic/091 generic/130 generic/139 generic/143 generic/154 generic/155 generic/183 generic/188 generic/190 generic/196 generic/198 generic/203 generic/214 generic/240 generic/263 generic/287 generic/290 generic/292 generic/330 generic/444 generic/450 generic/451 generic/586 generic/647 generic/708 generic/729 generic/760 Not run: generic/183 generic/188 generic/190 generic/196 generic/203 generic/287 generic/290 generic/292 generic/330 generic/444 Passed all 27 tests SECTION -- rdma41 ========================= Ran: generic/091 generic/130 generic/139 generic/143 generic/154 generic/155 generic/183 generic/188 generic/190 generic/196 generic/198 generic/203 generic/214 generic/240 generic/263 generic/287 generic/290 generic/292 generic/330 generic/444 generic/450 generic/451 generic/586 generic/647 generic/708 generic/729 generic/760 Not run: generic/183 generic/188 generic/190 generic/196 generic/203 generic/287 generic/290 generic/292 generic/330 generic/444 Passed all 27 tests SECTION -- rdma42 ========================= Ran: generic/091 generic/130 generic/139 generic/143 generic/154 generic/155 generic/183 generic/188 generic/190 generic/196 generic/198 generic/203 generic/214 generic/240 generic/263 generic/287 generic/290 generic/292 generic/330 generic/444 generic/450 generic/451 generic/586 generic/647 generic/708 generic/729 generic/760 Not run: generic/444 Passed all 27 tests SECTION -- tcp3 ========================= Ran: generic/091 generic/130 generic/139 generic/143 generic/154 generic/155 generic/183 generic/188 generic/190 generic/196 generic/198 generic/203 generic/214 generic/240 generic/263 generic/287 generic/290 generic/292 generic/330 generic/444 generic/450 generic/451 generic/586 generic/647 generic/708 generic/729 generic/760 Not run: generic/183 generic/188 generic/190 generic/196 generic/203 generic/287 generic/290 generic/292 generic/330 generic/444 Passed all 27 tests SECTION -- tcp40 ========================= Ran: generic/091 generic/130 generic/139 generic/143 generic/154 generic/155 generic/183 generic/188 generic/190 generic/196 generic/198 generic/203 generic/214 generic/240 generic/263 generic/287 generic/290 generic/292 generic/330 generic/444 generic/450 generic/451 generic/586 generic/647 generic/708 generic/729 generic/760 Not run: generic/183 generic/188 generic/190 generic/196 generic/203 generic/287 generic/290 generic/292 generic/330 generic/444 Passed all 27 tests SECTION -- tcp41 ========================= Ran: generic/091 generic/130 generic/139 generic/143 generic/154 generic/155 generic/183 generic/188 generic/190 generic/196 generic/198 generic/203 generic/214 generic/240 generic/263 generic/287 generic/290 generic/292 generic/330 generic/444 generic/450 generic/451 generic/586 generic/647 generic/708 generic/729 generic/760 Not run: generic/183 generic/188 generic/190 generic/196 generic/203 generic/287 generic/290 generic/292 generic/330 generic/444 Passed all 27 tests SECTION -- tcp42 ========================= Ran: generic/091 generic/130 generic/139 generic/143 generic/154 generic/155 generic/183 generic/188 generic/190 generic/196 generic/198 generic/203 generic/214 generic/240 generic/263 generic/287 generic/290 generic/292 generic/330 generic/444 generic/450 generic/451 generic/586 generic/647 generic/708 generic/729 generic/760 Not run: generic/444 Passed all 27 tests I couldn't figure out the tool used to generate that table, so I wrote a small script [3] that picked up logs from each run in results/* dir. $ python3 display.py results/*/check.log +--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ | testcase | rdma-sys-3 | rdma-sys-4.0 | rdma-sys-4.1 | rdma-sys-4.2 | tcp-sys-3 | tcp-sys-4.0 | tcp-sys-4.1 | tcp-sys-4.2 | +--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ | generic/091 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/130 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/139 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/143 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/154 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/155 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/183 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass | | generic/188 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass | | generic/190 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass | | generic/196 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass | | generic/198 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/203 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass | | generic/214 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/240 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/263 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/287 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass | | generic/290 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass | | generic/292 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass | | generic/330 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass | | generic/444 | skipped | skipped | skipped | skipped | skipped | skipped | skipped | skipped | | generic/450 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/451 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/586 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/647 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/708 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/729 | pass | pass | pass | pass | pass | pass | pass | pass | | generic/760 | pass | pass | pass | pass | pass | pass | pass | pass | +--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ Thanks, Praan [1] https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git [2] https://lore.kernel.org/all/20260616134000.2733403-1-praan@google.com/ [3] https://github.com/pran005/tools/blob/main/display.py