Re: [PATCH] xfs: don't allow SWAPEXT if we'd screw up quota accounting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, May 14, 2020 at 04:12:44PM -0500, Eric Sandeen wrote:
> 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?"

No, it's not impossible[1], it's just the one person who replied also
declined to review it, so now I'm racing patches. :P

--D

[1] https://lore.kernel.org/linux-xfs/158864102885.182577.15936710415441871446.stgit@magnolia/

> 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 ||
> > 



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux