On Tue, May 13, 2025, at 11:17, Andrey Albershteyn wrote: > > long syscall(SYS_file_getattr, int dirfd, const char *pathname, > struct fsxattr *fsx, size_t size, unsigned int at_flags); > long syscall(SYS_file_setattr, int dirfd, const char *pathname, > struct fsxattr *fsx, size_t size, unsigned int at_flags);
I don't think we can have both the "struct fsxattr" from the uapi headers, and a variable size as an additional argument. I would still prefer not having the extensible structure at all and just use fsxattr, but if you want to make it extensible in this way, it should use a different structure (name). Otherwise adding fields after fsx_pad[] would break the ioctl interface. I also find the bit confusing where the argument contains both "ignored but assumed zero" flags, and "required to be zero" flags depending on whether it's in the fsx_pad[] field or after it. This would be fine if it was better documented. > fsx.fsx_xflags |= FS_XFLAG_NODUMP; > error = syscall(468, dfd, "./foo", &fsx, 0); The example still uses the calling conventions from a previous version. Arnd