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. 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 > >