On Thu, Jan 20, 2022 at 12:30:23AM -0800, Christoph Hellwig wrote: > On Wed, Jan 19, 2022 at 11:12:10PM -0800, Eric Biggers wrote: > > > > Given the above, as far as I know the only remaining objection to this > > patchset would be that DIO constraints aren't sufficiently discoverable > > by userspace. Now, to put this in context, this is a longstanding issue > > with all Linux filesystems, except XFS which has XFS_IOC_DIOINFO. It's > > not specific to this feature, and it doesn't actually seem to be too > > important in practice; many other filesystem features place constraints > > on DIO, and f2fs even *only* allows fully FS block size aligned DIO. > > (And for better or worse, many systems using fscrypt already have > > out-of-tree patches that enable DIO support, and people don't seem to > > have trouble with the FS block size alignment requirement.) > > It might make sense to use this as an opportunity to implement > XFS_IOC_DIOINFO for ext4 and f2fs. Hmm. A potential problem with DIOINFO is that it doesn't explicitly list the /file/ position alignment requirement: struct dioattr { __u32 d_mem; /* data buffer memory alignment */ __u32 d_miniosz; /* min xfer size */ __u32 d_maxiosz; /* max xfer size */ }; Since I /think/ fscrypt requires that directio writes be aligned to file block size, right? > > I plan to propose a new generic ioctl to address the issue of DIO > > constraints being insufficiently discoverable. But until then, I'm Which is what I suspect Eric meant by this sentence. :) > > wondering if people are willing to consider this patchset again, or > > whether it is considered blocked by this issue alone. (And if this > > patchset is still unacceptable, would it be acceptable with f2fs support > > only, given that f2fs *already* only allows FS block size aligned DIO?) > > I think the patchset looks fine, but I'd really love to have a way for > the alignment restrictions to be discoverable from the start. I agree. The mechanics of the patchset look ok to me, but it's very unfortunate that there's no way for userspace programs to ask the kernel about the directio geometry for a file. Ever since we added reflink to XFS I've wanted to add a way to tell userspace that direct writes to a reflink(able) file will be much more efficient if they can align the io request to 1 fs block instead of 1 sector. How about something like this: struct dioattr2 { __u32 d_mem; /* data buffer memory alignment */ __u32 d_miniosz; /* min xfer size */ __u32 d_maxiosz; /* max xfer size */ /* file range must be aligned to this value */ __u32 d_min_fpos; /* for optimal performance, align file range to this */ __u32 d_opt_fpos; __u32 d_padding[11]; }; --D