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
Andreas Dilger (adilger@whamcloud.com) uploaded a new patch: https://review.whamcloud.com/36469
Subject:
LU-10030mds: add enums for MDS_OPEN flagsProject: fs/lustre-release
Branch: master
Current Patch Set: 1
Commit: 7622048ecbd5ceab7fa72951a587769cac941da7