On 5/22/20 10:31 PM, Bijan Mottahedeh wrote: > v1 -> v2 > > - Separate statx and open in io_kiocb > - Remove external declarations for unused statx interfaces > > This patch set is a fix for the liburing statx test failure. > > The test fails with a "Miscompare between io_uring and statx" error > because the statx system call path has additional processing in vfs_statx(): > > stat->result_mask |= STATX_MNT_ID; > if (path.mnt->mnt_root == path.dentry) > stat->attributes |= STATX_ATTR_MOUNT_ROOT; > stat->attributes_mask |= STATX_ATTR_MOUNT_ROOT; > > which then results in different result_mask values. > > Allowing the system call to be invoked directly simplifies the io_uring > interface and avoids potential future incompatibilities. I'm not sure > if there was other reasoning fort not doing so initially. > > One issue I cannot account for is the difference in "used" memory reported > by free(1) after running the statx a large (10000) number of times. > > The difference is significant ~100k and doesn't really change after > dropping caches. > > I enabled memory leak detection and couldn't see anything related to the test. > > Bijan Mottahedeh (4): > io_uring: add io_statx structure > statx: allow system call to be invoked from io_uring > io_uring: call statx directly > statx: hide interfaces no longer used by io_uring > > fs/internal.h | 4 ++-- > fs/io_uring.c | 72 +++++++++++++++-------------------------------------------- > fs/stat.c | 37 +++++++++++++++++------------- > 3 files changed, 42 insertions(+), 71 deletions(-) Thanks, this looks better. For a bit of history, the initial attempt was to do the statx without async offload if we could do so without blocking. Without that, we may as well simplify it. -- Jens Axboe