A while back Iustin Pop sent a patch to fix a problem with being
unable to set extent size hint values on directories. That patch -
along with new xfstests functionality to always check the scratch
device after a test - has pointed out that we allow certain
directory only inode flags to be set on other types of inodes (e.g.
regular files). It also pointed out that we could set extent size
hints on inodes that don't have extent size hint flags set.
This patchset does not attempt to fix the original problem, not add
any new validation of what is passed from userspace. Instead, it
simply ensures that what we end up with on disk is valid. That is,
directory only flags are only set on directory inodes, and extent
size hints are set if the inode flags are set, otherwise it is
cleared. Hence we don't end up with "invalid" state on disk, and so
xfstests doesn't get upset with directory only flags being set on
non directory inodes.
Further followups will be needed to address the original issue of
changing extent size hints on directories and handling invalid
flag/value combinations from userspace. I have not attempted to
solve that problem here because it could have impact on userspace
application behaviour and that's a different issue to ensuring we
end up with valid inode state on disk.
Thoughts, comments, flames?