xfs: fix behaviour of XFS_IOC_FSSETXATTR on directories
authorIustin Pop <iustin@k1024.org>
Sun, 1 Feb 2015 23:26:26 +0000 (10:26 +1100)
committerDave Chinner <david@fromorbit.com>
Sun, 1 Feb 2015 23:26:26 +0000 (10:26 +1100)
commit9b94fcc39822b450af823b3d8cbef6b53ce87ed9
tree1b663a4ca38574d135b903c2242728234db23a49
parent23bd0735cfdf5322170a9ef48c7d47c2e6567ba8
xfs: fix behaviour of XFS_IOC_FSSETXATTR on directories

Currently, the ioctl handling code for XFS_IOC_FSSETXATTR treats all
targets as regular files: it refuses to change the extent size if
extents are allocated. This is wrong for directories, as there the
extent size is only used as a default for children.

The patch fixes this issue and improves validation of flag
combinations:

- only disallow extent size changes after extents have been allocated
  for regular files
- only allow XFS_XFLAG_EXTSIZE for regular files
- only allow XFS_XFLAG_EXTSZINHERIT for directories
- automatically clear the flags if the extent size is zero

Thanks to Dave Chinner for guidance on the proper fix for this issue.

[dchinner: ported changes onto cleanup series. Makes changes clear
   and obvious.]
[dchinner: added comments documenting validity checking rules.]

Signed-off-by: Iustin Pop <iustin@k1024.org>
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
fs/xfs/xfs_ioctl.c