Re: [PATCH v4 4/9] ext4: support STATX_DIOALIGN
From: "Theodore Ts'o" <tytso@mit.edu>
Date: 2022-07-22 17:06:05
Also in:
linux-block, linux-ext4, linux-f2fs-devel, linux-fscrypt, linux-fsdevel, linux-xfs, lkml
On Fri, Jul 22, 2022 at 12:12:23AM -0700, Eric Biggers wrote:
-static bool ext4_dio_supported(struct kiocb *iocb, struct iov_iter *iter) +/* + * Returns %true if the given DIO request should be attempted with DIO, or + * %false if it should fall back to buffered I/O. + * + * DIO isn't well specified; when it's unsupported (either due to the request + * being misaligned, or due to the file not supporting DIO at all), filesystems + * either fall back to buffered I/O or return EINVAL. For files that don't use + * any special features like encryption or verity, ext4 has traditionally + * returned EINVAL for misaligned DIO. iomap_dio_rw() uses this convention too. + * In this case, we should attempt the DIO, *not* fall back to buffered I/O. + * + * In contrast, in cases where DIO is unsupported due to ext4 features, ext4 + * traditionally falls back to buffered I/O. + * + * This function implements the traditional ext4 behavior in all these cases.
Heh. I had been under the impression that misaligned I/O fell back to buffered I/O for ext4, since that's what a lot of historical Unix systems did. Obviously, it's not something I've tested since "you should never do that". There's actually some interesting discussion about what Linux *should* be doing in the futre in this discussion: https://patchwork.ozlabs.org/project/linux-ext4/patch/1461472078-20104-1-git-send-email-tytso@mit.edu/ Including the following from Christoph Hellwig: https://patchwork.ozlabs.org/project/linux-ext4/patch/1461472078-20104-1-git-send-email-tytso@mit.edu/#1335016
I've been doing an audit of our direct I/O implementations, and most of them does some form of transparent fallback, including some that only pretend to support O_DIRECT, but do anything special for it at all, while at the same time we go through greast efforts to check a file system actualy supports direct I/O, leading to nasty no-op ->direct_IO implementations as we even got that abstraction wrong. At this point I wonder if we should simply treat O_DIRECT as a hint and always allow it, and just let the file system optimize for it (skip buffering, require alignment, relaxed Posix atomicy requirements) if it is set.
The thread also mentioned XFS_IOC_DIOINFO and how We Really Should have something with equivalent functionality to the VFS --- six years ago. :-) Anyway, this change to ext4 looks good. Acked-by: Theodore Ts'o <tytso@mit.edu> - Ted