mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
xfs: error out if trying to add attrs and anextents > 0
We shouldn't assert if somehow we end up trying to add an attr fork to an inode that apparently already has attr extents because this is an indication of on-disk corruption. Instead, return an error code to userspace. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
96a3aefb8f
commit
0f352f8ee8
1 changed files with 4 additions and 1 deletions
|
@ -1153,6 +1153,10 @@ xfs_bmap_add_attrfork(
|
||||||
goto trans_cancel;
|
goto trans_cancel;
|
||||||
if (XFS_IFORK_Q(ip))
|
if (XFS_IFORK_Q(ip))
|
||||||
goto trans_cancel;
|
goto trans_cancel;
|
||||||
|
if (ip->i_d.di_anextents != 0) {
|
||||||
|
error = -EFSCORRUPTED;
|
||||||
|
goto trans_cancel;
|
||||||
|
}
|
||||||
if (ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS) {
|
if (ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS) {
|
||||||
/*
|
/*
|
||||||
* For inodes coming from pre-6.2 filesystems.
|
* For inodes coming from pre-6.2 filesystems.
|
||||||
|
@ -1160,7 +1164,6 @@ xfs_bmap_add_attrfork(
|
||||||
ASSERT(ip->i_d.di_aformat == 0);
|
ASSERT(ip->i_d.di_aformat == 0);
|
||||||
ip->i_d.di_aformat = XFS_DINODE_FMT_EXTENTS;
|
ip->i_d.di_aformat = XFS_DINODE_FMT_EXTENTS;
|
||||||
}
|
}
|
||||||
ASSERT(ip->i_d.di_anextents == 0);
|
|
||||||
|
|
||||||
xfs_trans_ijoin(tp, ip, 0);
|
xfs_trans_ijoin(tp, ip, 0);
|
||||||
xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
|
xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
|
||||||
|
|
Loading…
Reference in a new issue