The wrong constant is used in the implementation of this feature.
File: lustre/utils/lfs_project.c
When process fsx.fsx_xflags bits the following functions use the wrong constant value to check the project inherit flag.
- project_check_one()
- project_set_one()
- project_clear_one()
These functions are using FS_IOC_FSGETXATTR and FS_IOC_FSGETXATTR ioctl calls to get or set fsxattr structure.
Currently, to process fsx_xflags field from the fsxattr structure these functions use the constant LL_PROJINHERIT_FL, which is defined as the following:
#define LL_PROJINHERIT_FL 0x20000000
However, when processing fsx_xflags from the fsxattr structure , the different constant should be used: FS_XFLAG_PROJINHERIT, which is defined in linux/fs.h file as following:
#define FS_XFLAG_PROJINHERIT 0x00000200 /* create with parents projid */
See the following
https://github.com/torvalds/linux/blob/master/include/uapi/linux/fs.h#L155
https://github.com/torvalds/linux/blob/master/include/uapi/linux/fs.h#L178
https://unix.stackexchange.com/questions/448637/file-system-inode-flags-difference-between-fs-ioc-getflags-and-fs-ioc-fsgetxatt/448639
Hi Alexander Mitin,
I pushed a proposed patch for this problem:
https://review.whamcloud.com/#/c/32828/
Thanks,
Shilong