I was just looking at the FS_*_FL flags in a recent linux/fs.h, and
I see that there is now a FS_DIRECTIO_FL defined as 0x100000. This
does not originate from ext* or e2fsprogs, and could result in a
conflict with a future ext* flag allocation without some attention
(at least defining it in e2fsprogs, along with EXT4_HUGE_FILE_FL 0x40000
which hasn't made it into e2fsprogs yet either).
There are a few things that worry me here:
- The migration of the EXT*_FL flags from ext*.h into fs.h has
hidden the fact that these flags define the on-disk format of
ext* inodes. There is no comment that these flags even need
to remain constant, and being part of an ioctl() interface
makes this less likely to change than an internal constant,
but it doesn't have the permanence of an on-disk (forever) constant.
- Since these values have been usurped from ext* into the VFS, we need
to add a translation function in ext*_ioctl() to convert from the
ioctl parameter into ext* values. There is no guarantee that these
mappings will remain identical.
- The ext2 code was changed to use the FS_*_FL values, but not
ext3 and ext4.
- The inode attribute flag is only a 32-bit value, and if these flags
are shared among all filesystems it could lead to exhaustion of the
flags before we would have wanted for ext* or the VFS.
Sr. Staff Engineer, Lustre Group
Sun Microsystems of Canada, Inc.