On 5/14/20 3:54 PM, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > > Since the old SWAPEXT ioctl doesn't know how to adjust quota ids, > bail out of the ids don't match and quotas are enabled. > > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> makes sense, I probably missed the discussion that presumably arrived at "ye gods trying to fix up the quota allocations is nigh impossible?" And in the end, what's yet another -EINVAL return here, anyway? ;) Reviewed-by: Eric Sandeen <sandeen@xxxxxxxxxx> > --- > fs/xfs/xfs_bmap_util.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c > index cc23a3e23e2d..5e7da27c6e98 100644 > --- a/fs/xfs/xfs_bmap_util.c > +++ b/fs/xfs/xfs_bmap_util.c > @@ -1210,6 +1210,12 @@ xfs_swap_extents_check_format( > struct xfs_inode *ip, /* target inode */ > struct xfs_inode *tip) /* tmp inode */ > { > + /* User/group/project quota ids must match if quotas are enforced. */ > + if (XFS_IS_QUOTA_ON(ip->i_mount) && > + (!uid_eq(VFS_I(ip)->i_uid, VFS_I(tip)->i_uid) || > + !gid_eq(VFS_I(ip)->i_gid, VFS_I(tip)->i_gid) || > + ip->i_d.di_projid != tip->i_d.di_projid)) > + return -EINVAL; > > /* Should never get a local format */ > if (ip->i_d.di_format == XFS_DINODE_FMT_LOCAL || >