xfs: clean up icreate quota reservation calls
authorDarrick J. Wong <djwong@kernel.org>
Sat, 23 Jan 2021 00:48:34 +0000 (16:48 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 3 Feb 2021 17:18:49 +0000 (09:18 -0800)
Create a proper helper so that inode creation calls can reserve quota
with a dedicated function.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
fs/xfs/xfs_inode.c
fs/xfs/xfs_quota.h
fs/xfs/xfs_symlink.c
fs/xfs/xfs_trans_dquot.c

index e2a1db4cee431c3b23b36d0b7ccd27b3591b400a..4bbd2fb628f75fc66d756562b2d28678310a6066 100644 (file)
@@ -1037,8 +1037,7 @@ xfs_create(
        /*
         * Reserve disk quota and the inode.
         */
-       error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp,
-                                               pdqp, resblks, 1, 0);
+       error = xfs_trans_reserve_quota_icreate(tp, udqp, gdqp, pdqp, resblks);
        if (error)
                goto out_trans_cancel;
 
@@ -1169,8 +1168,7 @@ xfs_create_tmpfile(
        if (error)
                goto out_release_inode;
 
-       error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp,
-                                               pdqp, resblks, 1, 0);
+       error = xfs_trans_reserve_quota_icreate(tp, udqp, gdqp, pdqp, resblks);
        if (error)
                goto out_trans_cancel;
 
index 31d0de899cc4707d9e97a4fa5fe968be0dd14a59..919c3a9248218d2f82d72e1b348f9bc3c49685ca 100644 (file)
@@ -86,6 +86,9 @@ extern int xfs_trans_reserve_quota_nblks(struct xfs_trans *,
 extern int xfs_trans_reserve_quota_bydquots(struct xfs_trans *,
                struct xfs_mount *, struct xfs_dquot *,
                struct xfs_dquot *, struct xfs_dquot *, int64_t, long, uint);
+int xfs_trans_reserve_quota_icreate(struct xfs_trans *tp,
+               struct xfs_dquot *udqp, struct xfs_dquot *gdqp,
+               struct xfs_dquot *pdqp, int64_t dblocks);
 
 extern int xfs_qm_vop_dqalloc(struct xfs_inode *, kuid_t, kgid_t,
                prid_t, uint, struct xfs_dquot **, struct xfs_dquot **,
@@ -149,6 +152,13 @@ xfs_quota_reserve_blkres(struct xfs_inode *ip, int64_t blocks)
        return 0;
 }
 
+static inline int
+xfs_trans_reserve_quota_icreate(struct xfs_trans *tp, struct xfs_dquot *udqp,
+               struct xfs_dquot *gdqp, struct xfs_dquot *pdqp, int64_t dblocks)
+{
+       return 0;
+}
+
 #define xfs_qm_vop_create_dqattach(tp, ip, u, g, p)
 #define xfs_qm_vop_rename_dqattach(it)                                 (0)
 #define xfs_qm_vop_chown(tp, ip, old, new)                             (NULL)
@@ -164,10 +174,6 @@ xfs_quota_reserve_blkres(struct xfs_inode *ip, int64_t blocks)
 #define xfs_qm_unmount_quotas(mp)
 #endif /* CONFIG_XFS_QUOTA */
 
-#define xfs_trans_reserve_quota(tp, mp, ud, gd, pd, nb, ni, f) \
-       xfs_trans_reserve_quota_bydquots(tp, mp, ud, gd, pd, nb, ni, \
-                               f | XFS_QMOPT_RES_REGBLKS)
-
 static inline int
 xfs_quota_unreserve_blkres(struct xfs_inode *ip, int64_t blocks)
 {
index 7f96649e918a0d8067a58951fc9e216bbc6e318a..d5dee8f409b20494a7a527a29233bf3370065055 100644 (file)
@@ -215,8 +215,7 @@ xfs_symlink(
        /*
         * Reserve disk quota : blocks and inode.
         */
-       error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp,
-                                               pdqp, resblks, 1, 0);
+       error = xfs_trans_reserve_quota_icreate(tp, udqp, gdqp, pdqp, resblks);
        if (error)
                goto out_trans_cancel;
 
index 28b8ac7019199a560de92fd39918f7f9d9477fc2..22aa875b84f7dc5dfe0f817b80a437cd950d6978 100644 (file)
@@ -804,6 +804,24 @@ 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_dquot        *udqp,
+       struct xfs_dquot        *gdqp,
+       struct xfs_dquot        *pdqp,
+       int64_t                 dblocks)
+{
+       struct xfs_mount        *mp = tp->t_mountp;
+
+       if (!XFS_IS_QUOTA_RUNNING(mp) || !XFS_IS_QUOTA_ON(mp))
+               return 0;
+
+       return xfs_trans_reserve_quota_bydquots(tp, mp, udqp, gdqp, pdqp,
+                       dblocks, 1, XFS_QMOPT_RES_REGBLKS);
+}
+
 /*
  * This routine is called to allocate a quotaoff log item.
  */