diff options
author | Christoph Hellwig <hch@lst.de> | 2016-08-17 08:45:30 +1000 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2016-08-17 08:45:30 +1000 |
commit | 1d4795e7bde075588c90df2175349bb2251802d5 (patch) | |
tree | 109e17dfe043a88227e8cf17745ae46bfe0b9961 /fs/xfs/xfs_iops.c | |
parent | b95a21271b30544a9fb992269d79ed1e1978e023 (diff) | |
download | linux-1d4795e7bde075588c90df2175349bb2251802d5.tar.gz linux-1d4795e7bde075588c90df2175349bb2251802d5.tar.bz2 linux-1d4795e7bde075588c90df2175349bb2251802d5.zip |
xfs: (re-)implement FIEMAP_FLAG_XATTR
Use a special read-only iomap_ops implementation to support fiemap on
the attr fork.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
Diffstat (limited to 'fs/xfs/xfs_iops.c')
-rw-r--r-- | fs/xfs/xfs_iops.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index ab820f84ed50..b24c3102fa93 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -1009,7 +1009,14 @@ xfs_vn_fiemap( int error; xfs_ilock(XFS_I(inode), XFS_IOLOCK_SHARED); - error = iomap_fiemap(inode, fieinfo, start, length, &xfs_iomap_ops); + if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) { + fieinfo->fi_flags &= ~FIEMAP_FLAG_XATTR; + error = iomap_fiemap(inode, fieinfo, start, length, + &xfs_xattr_iomap_ops); + } else { + error = iomap_fiemap(inode, fieinfo, start, length, + &xfs_iomap_ops); + } xfs_iunlock(XFS_I(inode), XFS_IOLOCK_SHARED); return error; |