On 7/23/25 2:40 PM, Mike Snitzer wrote: > On Mon, Jul 21, 2025 at 10:49:17PM -0400, Mike Snitzer wrote: >> Hi, >> >> This "NFS DIRECT" series depends on the "NFSD DIRECT" series here: >> https://lore.kernel.org/linux-nfs/20250714224216.14329-1-snitzer@xxxxxxxxxx/ >> (for the benefit of nfsd_file_dio_alignment patch in this series) >> >> The first patch was posted as part of a LOCALIO revert series I posted >> a week or so ago, thankfully that series isn't needed thanks to Trond >> and Neil's efforts. BUT the first patch is needed, has Reviewed-by >> from Jeff and Neil and is marked for stable@. >> >> The biggest change in v2 is the introduction of O_DIRECT misaligned >> READ and WRITE handling for the benefit of LOCALIO. Please see patches >> 6 and 7 for more details. > > Turns out that these NFS client (fs/nfs/direct.c) changes that focused > on benefiting LOCALIO actually also benefit NFSD if/when it is > configured to use O_DIRECT [0]. > > Such that the NFS client's O_DIRECT code will split any misaligned > WRITE IO and NFSD will then happily issue the DIO-aligned "middle" of > a given misaligned WRITE IO down to the underlying filesystem. > > Same goes for READ, NFS client will expand the front of any misaligned > READ such that the bulk of the IO becomes DIO-aligned (only the final > partial tail page is misaligned). > > So with the NFS client changes in this series we actually don't _need_ > NFSD to have the same type of misaligned IO analysis and handling to > expand READs or split WRITEs to be DIO-aligned. Which reduces work > that NFSD needs to do by leaning on the NFS client having the > capability. I'm not quite following. Does that apply to non-Linux NFS clients too? > Which means that we _could_ drop the more complicated NFSD misaligned > READ change (last patch [1]) from the v4 NFSD DIRECT patchset I just > posted [2]. And just do the basic NFSD enablement for DIRECT and > DONTCACHE (so we'd still need the v4 NFSD patchest's patches 1-4). > > Thanks, > Mike > > [0]: https://lore.kernel.org/linux-nfs/20250723154351.59042-1-snitzer@xxxxxxxxxx/ > [1]: https://lore.kernel.org/linux-nfs/20250723154351.59042-6-snitzer@xxxxxxxxxx/ > [2]: https://lore.kernel.org/linux-nfs/20250723154351.59042-1-snitzer@xxxxxxxxxx/ > >> >> Changes since v1: >> - renamed nfs modparam from localio_O_DIRECT_align_misaligned_READ to >> localio_O_DIRECT_align_misaligned_IO (is used for misaligned READ >> and WRITE support in fs/nfs/direct.c) >> - added misaligned O_DIRECT handling for both READ and WRITE to >> fs/nfs/direct.c which in practice obviates LOCALIO's need to >> fallback to sending misaligned READs to NFSD. >> - But the 5th patch that adds LOCALIO support to fallback to NFSD is a >> useful backup mechanism (that will hopefully never be needed unless >> some fs/nfs/direct.c bug gets introduced in the future). Patch 5 >> also provides refactoring that is useful. >> >> Thanks, >> Mike >> >> Mike Snitzer (7): >> nfs/localio: avoid bouncing LOCALIO if nfs_client_is_local() >> nfs/localio: make trace_nfs_local_open_fh more useful >> nfs/localio: add nfsd_file_dio_alignment >> nfs/localio: refactor iocb initialization >> nfs/localio: fallback to NFSD for misaligned O_DIRECT READs >> nfs/direct: add misaligned READ handling >> nfs/direct: add misaligned WRITE handling >> >> fs/nfs/direct.c | 262 +++++++++++++++++++++++-- >> fs/nfs/flexfilelayout/flexfilelayout.c | 1 + >> fs/nfs/internal.h | 17 +- >> fs/nfs/localio.c | 231 ++++++++++++++-------- >> fs/nfs/nfstrace.h | 47 ++++- >> fs/nfs/pagelist.c | 22 ++- >> fs/nfsd/localio.c | 11 ++ >> include/linux/nfs_page.h | 1 + >> include/linux/nfslocalio.h | 2 + >> 9 files changed, 485 insertions(+), 109 deletions(-) >> >> -- >> 2.44.0 >> >> -- Chuck Lever