Commit 4d1f88d7 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Alex Elder

xfs: clean up error handling in xfs_trans_dqresv

Move the error code selection after the goto label and fold the
xfs_quota_error helper into it.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDave Chinner <david@fromorbit.com>
Signed-off-by: default avatarAlex Elder <aelder@sgi.com>
parent 512dd1ab
...@@ -589,14 +589,6 @@ xfs_trans_unreserve_and_mod_dquots( ...@@ -589,14 +589,6 @@ xfs_trans_unreserve_and_mod_dquots(
} }
} }
STATIC int
xfs_quota_error(uint flags)
{
if (flags & XFS_QMOPT_ENOSPC)
return ENOSPC;
return EDQUOT;
}
/* /*
* This reserves disk blocks and inodes against a dquot. * This reserves disk blocks and inodes against a dquot.
* Flags indicate if the dquot is to be locked here and also * Flags indicate if the dquot is to be locked here and also
...@@ -612,7 +604,6 @@ xfs_trans_dqresv( ...@@ -612,7 +604,6 @@ xfs_trans_dqresv(
long ninos, long ninos,
uint flags) uint flags)
{ {
int error;
xfs_qcnt_t hardlimit; xfs_qcnt_t hardlimit;
xfs_qcnt_t softlimit; xfs_qcnt_t softlimit;
time_t timer; time_t timer;
...@@ -649,7 +640,6 @@ xfs_trans_dqresv( ...@@ -649,7 +640,6 @@ xfs_trans_dqresv(
warnlimit = XFS_QI_RTBWARNLIMIT(dqp->q_mount); warnlimit = XFS_QI_RTBWARNLIMIT(dqp->q_mount);
resbcountp = &dqp->q_res_rtbcount; resbcountp = &dqp->q_res_rtbcount;
} }
error = 0;
if ((flags & XFS_QMOPT_FORCE_RES) == 0 && if ((flags & XFS_QMOPT_FORCE_RES) == 0 &&
dqp->q_core.d_id && dqp->q_core.d_id &&
...@@ -667,19 +657,13 @@ xfs_trans_dqresv( ...@@ -667,19 +657,13 @@ xfs_trans_dqresv(
* nblks. * nblks.
*/ */
if (hardlimit > 0ULL && if (hardlimit > 0ULL &&
(hardlimit <= nblks + *resbcountp)) { hardlimit <= nblks + *resbcountp)
error = xfs_quota_error(flags);
goto error_return; goto error_return;
}
if (softlimit > 0ULL && if (softlimit > 0ULL &&
(softlimit <= nblks + *resbcountp)) { softlimit <= nblks + *resbcountp &&
if ((timer != 0 && get_seconds() > timer) || ((timer != 0 && get_seconds() > timer) ||
(warns != 0 && warns >= warnlimit)) { (warns != 0 && warns >= warnlimit)))
error = xfs_quota_error(flags); goto error_return;
goto error_return;
}
}
} }
if (ninos > 0) { if (ninos > 0) {
count = be64_to_cpu(dqp->q_core.d_icount); count = be64_to_cpu(dqp->q_core.d_icount);
...@@ -692,16 +676,13 @@ xfs_trans_dqresv( ...@@ -692,16 +676,13 @@ xfs_trans_dqresv(
softlimit = be64_to_cpu(dqp->q_core.d_ino_softlimit); softlimit = be64_to_cpu(dqp->q_core.d_ino_softlimit);
if (!softlimit) if (!softlimit)
softlimit = q->qi_isoftlimit; softlimit = q->qi_isoftlimit;
if (hardlimit > 0ULL && count >= hardlimit) {
error = xfs_quota_error(flags); if (hardlimit > 0ULL && count >= hardlimit)
goto error_return;
if (softlimit > 0ULL && count >= softlimit &&
((timer != 0 && get_seconds() > timer) ||
(warns != 0 && warns >= warnlimit)))
goto error_return; goto error_return;
} else if (softlimit > 0ULL && count >= softlimit) {
if ((timer != 0 && get_seconds() > timer) ||
(warns != 0 && warns >= warnlimit)) {
error = xfs_quota_error(flags);
goto error_return;
}
}
} }
} }
...@@ -736,9 +717,14 @@ xfs_trans_dqresv( ...@@ -736,9 +717,14 @@ xfs_trans_dqresv(
ASSERT(dqp->q_res_rtbcount >= be64_to_cpu(dqp->q_core.d_rtbcount)); ASSERT(dqp->q_res_rtbcount >= be64_to_cpu(dqp->q_core.d_rtbcount));
ASSERT(dqp->q_res_icount >= be64_to_cpu(dqp->q_core.d_icount)); ASSERT(dqp->q_res_icount >= be64_to_cpu(dqp->q_core.d_icount));
xfs_dqunlock(dqp);
return 0;
error_return: error_return:
xfs_dqunlock(dqp); xfs_dqunlock(dqp);
return error; if (flags & XFS_QMOPT_ENOSPC)
return ENOSPC;
return EDQUOT;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment