Re: [PATCH v1 6/7] nfs: Optimize direct I/O to use folios for requests
From: Pranjal Shrivastava
Date: Thu Jun 04 2026 - 04:01:14 EST
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've just run fio and haven't run xfstests (sorry wasn't aware of them)
I suppose it's this one [1] ? I will set up the environment.
Given that generic/091 (fsx) is failing across the board, I suspect there
is an error in the contiguous grouping logic in Patch 6, likely the
offset calculation or handles partial page boundaries.
I'll run xfstest with this patch and confirm.
Would you suggest breaking out the move to folio in a separate series if
patches 1-5 work fine?
> Thanks,
> Anna
>
[...]
Thanks,
Praan
[1] https://wiki.linux-nfs.org/wiki/index.php/Xfstests