mbox series

[v4,0/9] make statx() return DIO alignment information

Message ID 20220722071228.146690-1-ebiggers@kernel.org
Headers show
Series make statx() return DIO alignment information | expand

Message

Eric Biggers July 22, 2022, 7:12 a.m. UTC
This patchset makes the statx() system call return direct I/O (DIO)
alignment information.  This allows userspace to easily determine
whether a file supports DIO, and if so with what alignment restrictions.

Patch 1 adds the basic VFS support for STATX_DIOALIGN.  Patch 2 wires it
up for all block device files.  The remaining patches wire it up for
regular files on ext4, f2fs, and xfs.  Support for regular files on
other filesystems can be added later.

I've also written a man-pages patch, which I'm sending separately.

Note, f2fs has one corner case where DIO reads are allowed but not DIO
writes.  The proposed statx fields can't represent this.  My proposal
(patch 6) is to just eliminate this case, as it seems much too weird.
But I'd appreciate any feedback on that part.

This patchset applies to v5.19-rc7.

Changed v3 => v4:
   - Added xfs support.

   - Moved the helper function for block devices into block/bdev.c.
   
   - Adjusted the ext4 patch to not introduce a bug where misaligned DIO
     starts being allowed on encrypted files when it gets combined with
     the patch "iomap: add support for dma aligned direct-io" that is
     queued in the block tree for 5.20.

   - Made a simplification in fscrypt_dio_supported().

Changed v2 => v3:
   - Dropped the stx_offset_align_optimal field, since its purpose
     wasn't clearly distinguished from the existing stx_blksize.

   - Renamed STATX_IOALIGN to STATX_DIOALIGN, to reflect the new focus
     on DIO only.

   - Similarly, renamed stx_{mem,offset}_align_dio to
     stx_dio_{mem,offset}_align, to reflect the new focus on DIO only.

   - Wired up STATX_DIOALIGN on block device files.

Changed v1 => v2:
   - No changes.

Eric Biggers (9):
  statx: add direct I/O alignment information
  vfs: support STATX_DIOALIGN on block devices
  fscrypt: change fscrypt_dio_supported() to prepare for STATX_DIOALIGN
  ext4: support STATX_DIOALIGN
  f2fs: move f2fs_force_buffered_io() into file.c
  f2fs: don't allow DIO reads but not DIO writes
  f2fs: simplify f2fs_force_buffered_io()
  f2fs: support STATX_DIOALIGN
  xfs: support STATX_DIOALIGN

 block/bdev.c              | 25 ++++++++++++++++++++
 fs/crypto/inline_crypt.c  | 49 +++++++++++++++++++--------------------
 fs/ext4/ext4.h            |  1 +
 fs/ext4/file.c            | 37 ++++++++++++++++++++---------
 fs/ext4/inode.c           | 36 ++++++++++++++++++++++++++++
 fs/f2fs/f2fs.h            | 45 -----------------------------------
 fs/f2fs/file.c            | 45 ++++++++++++++++++++++++++++++++++-
 fs/stat.c                 | 14 +++++++++++
 fs/xfs/xfs_iops.c         |  9 +++++++
 include/linux/blkdev.h    |  4 ++++
 include/linux/fscrypt.h   |  7 ++----
 include/linux/stat.h      |  2 ++
 include/uapi/linux/stat.h |  4 +++-
 13 files changed, 190 insertions(+), 88 deletions(-)

base-commit: ff6992735ade75aae3e35d16b17da1008d753d28

Comments

Jeffrey Layton Aug. 26, 2022, 5:19 p.m. UTC | #1
On Fri, 2022-07-22 at 00:12 -0700, Eric Biggers wrote:
> This patchset makes the statx() system call return direct I/O (DIO)
> alignment information.  This allows userspace to easily determine
> whether a file supports DIO, and if so with what alignment restrictions.
> 
> Patch 1 adds the basic VFS support for STATX_DIOALIGN.  Patch 2 wires it
> up for all block device files.  The remaining patches wire it up for
> regular files on ext4, f2fs, and xfs.  Support for regular files on
> other filesystems can be added later.
> 
> I've also written a man-pages patch, which I'm sending separately.
> 
> Note, f2fs has one corner case where DIO reads are allowed but not DIO
> writes.  The proposed statx fields can't represent this.  My proposal
> (patch 6) is to just eliminate this case, as it seems much too weird.
> But I'd appreciate any feedback on that part.
> 
> This patchset applies to v5.19-rc7.
> 
> Changed v3 => v4:
>    - Added xfs support.
> 
>    - Moved the helper function for block devices into block/bdev.c.
>    
>    - Adjusted the ext4 patch to not introduce a bug where misaligned DIO
>      starts being allowed on encrypted files when it gets combined with
>      the patch "iomap: add support for dma aligned direct-io" that is
>      queued in the block tree for 5.20.
> 
>    - Made a simplification in fscrypt_dio_supported().
> 
> Changed v2 => v3:
>    - Dropped the stx_offset_align_optimal field, since its purpose
>      wasn't clearly distinguished from the existing stx_blksize.
> 
>    - Renamed STATX_IOALIGN to STATX_DIOALIGN, to reflect the new focus
>      on DIO only.
> 
>    - Similarly, renamed stx_{mem,offset}_align_dio to
>      stx_dio_{mem,offset}_align, to reflect the new focus on DIO only.
> 
>    - Wired up STATX_DIOALIGN on block device files.
> 
> Changed v1 => v2:
>    - No changes.
> 
> Eric Biggers (9):
>   statx: add direct I/O alignment information
>   vfs: support STATX_DIOALIGN on block devices
>   fscrypt: change fscrypt_dio_supported() to prepare for STATX_DIOALIGN
>   ext4: support STATX_DIOALIGN
>   f2fs: move f2fs_force_buffered_io() into file.c
>   f2fs: don't allow DIO reads but not DIO writes
>   f2fs: simplify f2fs_force_buffered_io()
>   f2fs: support STATX_DIOALIGN
>   xfs: support STATX_DIOALIGN
> 
>  block/bdev.c              | 25 ++++++++++++++++++++
>  fs/crypto/inline_crypt.c  | 49 +++++++++++++++++++--------------------
>  fs/ext4/ext4.h            |  1 +
>  fs/ext4/file.c            | 37 ++++++++++++++++++++---------
>  fs/ext4/inode.c           | 36 ++++++++++++++++++++++++++++
>  fs/f2fs/f2fs.h            | 45 -----------------------------------
>  fs/f2fs/file.c            | 45 ++++++++++++++++++++++++++++++++++-
>  fs/stat.c                 | 14 +++++++++++
>  fs/xfs/xfs_iops.c         |  9 +++++++
>  include/linux/blkdev.h    |  4 ++++
>  include/linux/fscrypt.h   |  7 ++----
>  include/linux/stat.h      |  2 ++
>  include/uapi/linux/stat.h |  4 +++-
>  13 files changed, 190 insertions(+), 88 deletions(-)
> 
> base-commit: ff6992735ade75aae3e35d16b17da1008d753d28

Hi Eric,

Can I ask what your plans are with this set? I didn't see it in
linux-next yet, so I wasn't sure when you were looking to get it merged.
I'm working on patches to add a new statx field for the i_version
counter as well and I want to make sure that our work doesn't collide.

Thanks,
Eric Biggers Aug. 27, 2022, 7:07 a.m. UTC | #2
On Fri, Aug 26, 2022 at 01:19:37PM -0400, Jeff Layton wrote:
> On Fri, 2022-07-22 at 00:12 -0700, Eric Biggers wrote:
> > This patchset makes the statx() system call return direct I/O (DIO)
> > alignment information.  This allows userspace to easily determine
> > whether a file supports DIO, and if so with what alignment restrictions.
> > 
> > Patch 1 adds the basic VFS support for STATX_DIOALIGN.  Patch 2 wires it
> > up for all block device files.  The remaining patches wire it up for
> > regular files on ext4, f2fs, and xfs.  Support for regular files on
> > other filesystems can be added later.
> > 
> > I've also written a man-pages patch, which I'm sending separately.
> > 
> > Note, f2fs has one corner case where DIO reads are allowed but not DIO
> > writes.  The proposed statx fields can't represent this.  My proposal
> > (patch 6) is to just eliminate this case, as it seems much too weird.
> > But I'd appreciate any feedback on that part.
> > 
> > This patchset applies to v5.19-rc7.
> > 
> > Changed v3 => v4:
> >    - Added xfs support.
> > 
> >    - Moved the helper function for block devices into block/bdev.c.
> >    
> >    - Adjusted the ext4 patch to not introduce a bug where misaligned DIO
> >      starts being allowed on encrypted files when it gets combined with
> >      the patch "iomap: add support for dma aligned direct-io" that is
> >      queued in the block tree for 5.20.
> > 
> >    - Made a simplification in fscrypt_dio_supported().
> > 
> > Changed v2 => v3:
> >    - Dropped the stx_offset_align_optimal field, since its purpose
> >      wasn't clearly distinguished from the existing stx_blksize.
> > 
> >    - Renamed STATX_IOALIGN to STATX_DIOALIGN, to reflect the new focus
> >      on DIO only.
> > 
> >    - Similarly, renamed stx_{mem,offset}_align_dio to
> >      stx_dio_{mem,offset}_align, to reflect the new focus on DIO only.
> > 
> >    - Wired up STATX_DIOALIGN on block device files.
> > 
> > Changed v1 => v2:
> >    - No changes.
> > 
> > Eric Biggers (9):
> >   statx: add direct I/O alignment information
> >   vfs: support STATX_DIOALIGN on block devices
> >   fscrypt: change fscrypt_dio_supported() to prepare for STATX_DIOALIGN
> >   ext4: support STATX_DIOALIGN
> >   f2fs: move f2fs_force_buffered_io() into file.c
> >   f2fs: don't allow DIO reads but not DIO writes
> >   f2fs: simplify f2fs_force_buffered_io()
> >   f2fs: support STATX_DIOALIGN
> >   xfs: support STATX_DIOALIGN
> > 
> >  block/bdev.c              | 25 ++++++++++++++++++++
> >  fs/crypto/inline_crypt.c  | 49 +++++++++++++++++++--------------------
> >  fs/ext4/ext4.h            |  1 +
> >  fs/ext4/file.c            | 37 ++++++++++++++++++++---------
> >  fs/ext4/inode.c           | 36 ++++++++++++++++++++++++++++
> >  fs/f2fs/f2fs.h            | 45 -----------------------------------
> >  fs/f2fs/file.c            | 45 ++++++++++++++++++++++++++++++++++-
> >  fs/stat.c                 | 14 +++++++++++
> >  fs/xfs/xfs_iops.c         |  9 +++++++
> >  include/linux/blkdev.h    |  4 ++++
> >  include/linux/fscrypt.h   |  7 ++----
> >  include/linux/stat.h      |  2 ++
> >  include/uapi/linux/stat.h |  4 +++-
> >  13 files changed, 190 insertions(+), 88 deletions(-)
> > 
> > base-commit: ff6992735ade75aae3e35d16b17da1008d753d28
> 
> Hi Eric,
> 
> Can I ask what your plans are with this set? I didn't see it in
> linux-next yet, so I wasn't sure when you were looking to get it merged.
> I'm working on patches to add a new statx field for the i_version
> counter as well and I want to make sure that our work doesn't collide.
> 

I've just sent v5.  I guess I'll try to get it merged for 6.1.  We were a bit
stuck on the read-only DIO issue.  All things considered though, including that
Christoph thinks it's possible for f2fs to support DIO writes on zoned block
devices, I'm willing to bet that read-only DIO doesn't really matter enough for
it to be worth it to add a direction field to STATX_DIOALIGN (which would make
it harder to use STATX_DIOALIGN, as the field would always have to be checked).

- Eric