aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2010-01-13 17:05:49 -0500
committerAlex Elder <aelder@sgi.com>2010-01-21 14:44:22 -0500
commit4d1f88d75b00c4d23f4c51305ab5b779a86ef74e (patch)
tree9a0aa476c2c285a1557218a14f32f41cd1013f85 /fs
parent512dd1abd9539a474f2792eeaf6783c59ad7778a (diff)
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: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <david@fromorbit.com> Signed-off-by: Alex Elder <aelder@sgi.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/xfs/quota/xfs_trans_dquot.c48
1 files changed, 17 insertions, 31 deletions
diff --git a/fs/xfs/quota/xfs_trans_dquot.c b/fs/xfs/quota/xfs_trans_dquot.c
index 97ac9640be98..b9db6f781cd6 100644
--- a/fs/xfs/quota/xfs_trans_dquot.c
+++ b/fs/xfs/quota/xfs_trans_dquot.c
@@ -589,14 +589,6 @@ xfs_trans_unreserve_and_mod_dquots(
589 } 589 }
590} 590}
591 591
592STATIC int
593xfs_quota_error(uint flags)
594{
595 if (flags & XFS_QMOPT_ENOSPC)
596 return ENOSPC;
597 return EDQUOT;
598}
599
600/* 592/*
601 * This reserves disk blocks and inodes against a dquot. 593 * This reserves disk blocks and inodes against a dquot.
602 * Flags indicate if the dquot is to be locked here and also 594 * Flags indicate if the dquot is to be locked here and also
@@ -612,7 +604,6 @@ xfs_trans_dqresv(
612 long ninos, 604 long ninos,
613 uint flags) 605 uint flags)
614{ 606{
615 int error;
616 xfs_qcnt_t hardlimit; 607 xfs_qcnt_t hardlimit;
617 xfs_qcnt_t softlimit; 608 xfs_qcnt_t softlimit;
618 time_t timer; 609 time_t timer;
@@ -649,7 +640,6 @@ xfs_trans_dqresv(
649 warnlimit = XFS_QI_RTBWARNLIMIT(dqp->q_mount); 640 warnlimit = XFS_QI_RTBWARNLIMIT(dqp->q_mount);
650 resbcountp = &dqp->q_res_rtbcount; 641 resbcountp = &dqp->q_res_rtbcount;
651 } 642 }
652 error = 0;
653 643
654 if ((flags & XFS_QMOPT_FORCE_RES) == 0 && 644 if ((flags & XFS_QMOPT_FORCE_RES) == 0 &&
655 dqp->q_core.d_id && 645 dqp->q_core.d_id &&
@@ -667,19 +657,13 @@ xfs_trans_dqresv(
667 * nblks. 657 * nblks.
668 */ 658 */
669 if (hardlimit > 0ULL && 659 if (hardlimit > 0ULL &&
670 (hardlimit <= nblks + *resbcountp)) { 660 hardlimit <= nblks + *resbcountp)
671 error = xfs_quota_error(flags);
672 goto error_return; 661 goto error_return;
673 }
674
675 if (softlimit > 0ULL && 662 if (softlimit > 0ULL &&
676 (softlimit <= nblks + *resbcountp)) { 663 softlimit <= nblks + *resbcountp &&
677 if ((timer != 0 && get_seconds() > timer) || 664 ((timer != 0 && get_seconds() > timer) ||
678 (warns != 0 && warns >= warnlimit)) { 665 (warns != 0 && warns >= warnlimit)))
679 error = xfs_quota_error(flags); 666 goto error_return;
680 goto error_return;
681 }
682 }
683 } 667 }
684 if (ninos > 0) { 668 if (ninos > 0) {
685 count = be64_to_cpu(dqp->q_core.d_icount); 669 count = be64_to_cpu(dqp->q_core.d_icount);
@@ -692,16 +676,13 @@ xfs_trans_dqresv(
692 softlimit = be64_to_cpu(dqp->q_core.d_ino_softlimit); 676 softlimit = be64_to_cpu(dqp->q_core.d_ino_softlimit);
693 if (!softlimit) 677 if (!softlimit)
694 softlimit = q->qi_isoftlimit; 678 softlimit = q->qi_isoftlimit;
695 if (hardlimit > 0ULL && count >= hardlimit) { 679
696 error = xfs_quota_error(flags); 680 if (hardlimit > 0ULL && count >= hardlimit)
681 goto error_return;
682 if (softlimit > 0ULL && count >= softlimit &&
683 ((timer != 0 && get_seconds() > timer) ||
684 (warns != 0 && warns >= warnlimit)))
697 goto error_return; 685 goto error_return;
698 } else if (softlimit > 0ULL && count >= softlimit) {
699 if ((timer != 0 && get_seconds() > timer) ||
700 (warns != 0 && warns >= warnlimit)) {
701 error = xfs_quota_error(flags);
702 goto error_return;
703 }
704 }
705 } 686 }
706 } 687 }
707 688
@@ -736,9 +717,14 @@ xfs_trans_dqresv(
736 ASSERT(dqp->q_res_rtbcount >= be64_to_cpu(dqp->q_core.d_rtbcount)); 717 ASSERT(dqp->q_res_rtbcount >= be64_to_cpu(dqp->q_core.d_rtbcount));
737 ASSERT(dqp->q_res_icount >= be64_to_cpu(dqp->q_core.d_icount)); 718 ASSERT(dqp->q_res_icount >= be64_to_cpu(dqp->q_core.d_icount));
738 719
720 xfs_dqunlock(dqp);
721 return 0;
722
739error_return: 723error_return:
740 xfs_dqunlock(dqp); 724 xfs_dqunlock(dqp);
741 return error; 725 if (flags & XFS_QMOPT_ENOSPC)
726 return ENOSPC;
727 return EDQUOT;
742} 728}
743 729
744 730