On Mon, Jan 25, 2021 at 10:17:22AM -0500, Brian Foster wrote: > 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. You're correct, we can drop the *dp parameter entirely. --D > Brian > > > +} > > + > > /* > > * This routine is called to allocate a quotaoff log item. > > */ > > >