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
Oleg Drokin (green@whamcloud.com) merged in patch https://review.whamcloud.com/32112/
Subject:
LU-10030hsm: make changelog flag argument an enumProject: fs/lustre-release
Branch: master
Current Patch Set:
Commit: 2496089a0017f5b0ff94a7a7994f4c62c8f30d94