On Sat, Jan 23, 2021 at 10:51:57AM -0800, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > Create a proper helper so that inode creation calls can reserve quota > with a dedicated function. > > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> > Reviewed-by: Christoph Hellwig <hch@xxxxxx> > --- > fs/xfs/xfs_inode.c | 8 ++++---- > fs/xfs/xfs_quota.h | 15 +++++++++++---- > fs/xfs/xfs_symlink.c | 4 ++-- > fs/xfs/xfs_trans_dquot.c | 21 +++++++++++++++++++++ > 4 files changed, 38 insertions(+), 10 deletions(-) > > ... > diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c > index 28b8ac701919..3315498a6fa1 100644 > --- a/fs/xfs/xfs_trans_dquot.c > +++ b/fs/xfs/xfs_trans_dquot.c > @@ -804,6 +804,27 @@ xfs_trans_reserve_quota_nblks( > nblks, ninos, flags); > } > > +/* Change the quota reservations for an inode creation activity. */ > +int > +xfs_trans_reserve_quota_icreate( > + struct xfs_trans *tp, > + struct xfs_inode *dp, > + struct xfs_dquot *udqp, > + struct xfs_dquot *gdqp, > + struct xfs_dquot *pdqp, > + int64_t nblks) > +{ > + struct xfs_mount *mp = dp->i_mount; > + > + if (!XFS_IS_QUOTA_RUNNING(mp) || !XFS_IS_QUOTA_ON(mp)) > + return 0; > + > + ASSERT(!xfs_is_quota_inode(&mp->m_sb, dp->i_ino)); > + > + return xfs_trans_reserve_quota_bydquots(tp, dp->i_mount, udqp, gdqp, > + pdqp, nblks, 1, XFS_QMOPT_RES_REGBLKS); Considering we can get mp from tp (and it looks like we always pass tp), is it worth even passing in dp for an (unlikely) assert? That seems a little odd anyways since nothing down in this path actually uses or cares about the parent inode. Also, no need to pass dp->i_mount above if we've already defined mp, at least. Brian > +} > + > /* > * This routine is called to allocate a quotaoff log item. > */ >