xfs: delegate dqget input checks to helper function
authorDarrick J. Wong <darrick.wong@oracle.com>
Fri, 4 May 2018 22:30:21 +0000 (15:30 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Thu, 10 May 2018 15:56:47 +0000 (08:56 -0700)
Move the dqget input checks to a separate function in preparation for
splitting up the dqget functionality.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/xfs_dquot.c

index 299d4ce..1ee05e5 100644 (file)
@@ -761,6 +761,34 @@ xfs_qm_dqget_cache_insert(
        return 0;
 }
 
+/* Check our input parameters. */
+static int
+xfs_qm_dqget_checks(
+       struct xfs_mount        *mp,
+       uint                    type)
+{
+       if (WARN_ON_ONCE(!XFS_IS_QUOTA_RUNNING(mp)))
+               return -ESRCH;
+
+       switch (type) {
+       case XFS_DQ_USER:
+               if (!XFS_IS_UQUOTA_ON(mp))
+                       return -ESRCH;
+               return 0;
+       case XFS_DQ_GROUP:
+               if (!XFS_IS_GQUOTA_ON(mp))
+                       return -ESRCH;
+               return 0;
+       case XFS_DQ_PROJ:
+               if (!XFS_IS_PQUOTA_ON(mp))
+                       return -ESRCH;
+               return 0;
+       default:
+               WARN_ON_ONCE(0);
+               return -EINVAL;
+       }
+}
+
 /*
  * Given the file system, inode OR id, and type (UDQUOT/GDQUOT), return a
  * a locked dquot, doing an allocation (if requested) as needed.
@@ -783,16 +811,10 @@ xfs_qm_dqget(
        struct xfs_dquot        *dqp;
        int                     error;
 
-       ASSERT(XFS_IS_QUOTA_RUNNING(mp));
-       if ((! XFS_IS_UQUOTA_ON(mp) && type == XFS_DQ_USER) ||
-           (! XFS_IS_PQUOTA_ON(mp) && type == XFS_DQ_PROJ) ||
-           (! XFS_IS_GQUOTA_ON(mp) && type == XFS_DQ_GROUP)) {
-               return -ESRCH;
-       }
+       error = xfs_qm_dqget_checks(mp, type);
+       if (error)
+               return error;
 
-       ASSERT(type == XFS_DQ_USER ||
-              type == XFS_DQ_PROJ ||
-              type == XFS_DQ_GROUP);
        if (ip) {
                ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));
                ASSERT(xfs_inode_dquot(ip, type) == NULL);