xfs: simplify validation of the unwritten extent bit
XFS only supports the unwritten extent bit in the data fork, and only if the file system has a version 5 superblock or the unwritten extent feature bit. We currently have two routines that validate the invariant: xfs_check_nostate_extents which return -EFSCORRUPTED when it's not met, and xfs_validate_extent that triggers and assert in debug build. Both of them iterate over all extents of an inode fork when called, which isn't very efficient. This patch instead adds a new helper that verifies the invariant one extent at a time, and calls it from the places where we iterate over all extents to converted them from or two the in-memory format. The callers then return -EFSCORRUPTED when reading invalid extents from disk, or trigger an assert when writing them to disk. Signed-off-by:Christoph Hellwig <hch@lst.de> Reviewed-by:
Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by:
Darrick J. Wong <darrick.wong@oracle.com>
Showing
- fs/xfs/libxfs/xfs_bmap.c 2 additions, 14 deletionsfs/xfs/libxfs/xfs_bmap.c
- fs/xfs/libxfs/xfs_bmap.h 0 additions, 2 deletionsfs/xfs/libxfs/xfs_bmap.h
- fs/xfs/libxfs/xfs_bmap_btree.c 0 additions, 26 deletionsfs/xfs/libxfs/xfs_bmap_btree.c
- fs/xfs/libxfs/xfs_bmap_btree.h 14 additions, 7 deletionsfs/xfs/libxfs/xfs_bmap_btree.h
- fs/xfs/libxfs/xfs_format.h 0 additions, 8 deletionsfs/xfs/libxfs/xfs_format.h
- fs/xfs/libxfs/xfs_inode_fork.c 25 additions, 65 deletionsfs/xfs/libxfs/xfs_inode_fork.c
Loading
Please register or sign in to comment