]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
xfs: refactor testing if a particular dquot is being enforced
authorDarrick J. Wong <darrick.wong@oracle.com>
Thu, 16 Jul 2020 00:48:31 +0000 (17:48 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Wed, 29 Jul 2020 03:24:14 +0000 (20:24 -0700)
Create a small helper to test if enforcement is enabled for a
given incore dquot and replace the open-code logic testing.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/xfs_dquot.h
fs/xfs/xfs_qm_syscalls.c
fs/xfs/xfs_trans_dquot.c

index 17a21677723f67a149fd3a4a179376abf126dbdb..fcf9bd6766150a512f5f72cf4b08a37d8119e1b2 100644 (file)
@@ -156,6 +156,23 @@ static inline struct xfs_dquot *xfs_inode_dquot(struct xfs_inode *ip, int type)
        }
 }
 
+/* Decide if the dquot's limits are actually being enforced. */
+static inline bool
+xfs_dquot_is_enforced(
+       const struct xfs_dquot  *dqp)
+{
+       switch (dqp->dq_flags & XFS_DQTYPE_REC_MASK) {
+       case XFS_DQTYPE_USER:
+               return XFS_IS_UQUOTA_ENFORCED(dqp->q_mount);
+       case XFS_DQTYPE_GROUP:
+               return XFS_IS_GQUOTA_ENFORCED(dqp->q_mount);
+       case XFS_DQTYPE_PROJ:
+               return XFS_IS_PQUOTA_ENFORCED(dqp->q_mount);
+       }
+       ASSERT(0);
+       return false;
+}
+
 /*
  * Check whether a dquot is under low free space conditions. We assume the quota
  * is enabled and enforced.
index 119c3d7d5f51b3268a9e7f97c8587dd6fef82e39..f7dbc702e4d676eb41ef0af87dda0e60f00c8bf5 100644 (file)
@@ -660,19 +660,14 @@ xfs_qm_scall_getquota_fill_qc(
         * gets turned off. No need to confuse the user level code,
         * so return zeroes in that case.
         */
-       if ((!XFS_IS_UQUOTA_ENFORCED(mp) && type == XFS_DQTYPE_USER) ||
-           (!XFS_IS_GQUOTA_ENFORCED(mp) && type == XFS_DQTYPE_GROUP) ||
-           (!XFS_IS_PQUOTA_ENFORCED(mp) && type == XFS_DQTYPE_PROJ)) {
+       if (!xfs_dquot_is_enforced(dqp)) {
                dst->d_spc_timer = 0;
                dst->d_ino_timer = 0;
                dst->d_rt_spc_timer = 0;
        }
 
 #ifdef DEBUG
-       if (((XFS_IS_UQUOTA_ENFORCED(mp) && type == XFS_DQTYPE_USER) ||
-            (XFS_IS_GQUOTA_ENFORCED(mp) && type == XFS_DQTYPE_GROUP) ||
-            (XFS_IS_PQUOTA_ENFORCED(mp) && type == XFS_DQTYPE_PROJ)) &&
-           dqp->q_id != 0) {
+       if (xfs_dquot_is_enforced(dqp) && dqp->q_id != 0) {
                if ((dst->d_space > dst->d_spc_softlimit) &&
                    (dst->d_spc_softlimit > 0)) {
                        ASSERT(dst->d_spc_timer != 0);
index ea61e279f831737ff1e7ae355c0de23f6627155c..d7d710d25bbd91e2f1ad673730f447b132426e53 100644 (file)
@@ -650,9 +650,7 @@ xfs_trans_dqresv(
        }
 
        if ((flags & XFS_QMOPT_FORCE_RES) == 0 && dqp->q_id &&
-           ((XFS_IS_UQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISUDQ(dqp)) ||
-            (XFS_IS_GQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISGDQ(dqp)) ||
-            (XFS_IS_PQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISPDQ(dqp)))) {
+           xfs_dquot_is_enforced(dqp)) {
                int             quota_nl;
                bool            fatal;