On Fri, May 05, 2023 at 08:26:23AM +1000, Dave Chinner wrote: > > ok, we can do that but would also then make statx field 64b. I'm fine with > > that if it is wise to do so - I don't don't want to wastefully use up an > > extra 2 x 32b in struct statx. > > Why do we need specific varibles for DIO atomic write alignment > limits? We already have direct IO alignment and size constraints in statx(), > so why wouldn't we just reuse those variables when the user requests > atomic limits for DIO? > > i.e. if STATX_DIOALIGN is set, we return normal DIO alignment > constraints. If STATX_DIOALIGN_ATOMIC is set, we return the atomic > DIO alignment requirements in those variables..... > > Yes, we probably need the dio max size to be added to statx for > this. Historically speaking, I wanted statx to support this in the > first place because that's what we were already giving userspace > with XFS_IOC_DIOINFO and we already knew that atomic IO when it came > along would require a bound maximum IO size much smaller than normal > DIO limits. i.e.: > > struct dioattr { > __u32 d_mem; /* data buffer memory alignment */ > __u32 d_miniosz; /* min xfer size */ > __u32 d_maxiosz; /* max xfer size */ > }; > > where d_miniosz defined the alignment and size constraints for DIOs. > > If we simply document that STATX_DIOALIGN_ATOMIC returns minimum > (unit) atomic IO size and alignment in statx->dio_offset_align (as > per STATX_DIOALIGN) and the maximum atomic IO size in > statx->dio_max_iosize, then we don't burn up anywhere near as much > space in the statx structure.... I don't think that's how statx() is meant to work. The request mask is a bitmask, and the user can request an arbitrary combination of different items. For example, the user could request both STATX_DIOALIGN and STATX_WRITE_ATOMIC at the same time. That doesn't work if different items share the same fields. - Eric