Re: [PATCH v2 0/7] NFS DIRECT: handle misaligned READ and WRITE for LOCALIO

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux