diff options
-rw-r--r-- | fs/xfs/xfs_trans_dquot.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c index c4ba366d24e6..877fe6367d2d 100644 --- a/fs/xfs/xfs_trans_dquot.c +++ b/fs/xfs/xfs_trans_dquot.c | |||
@@ -605,7 +605,7 @@ xfs_trans_dqresv( | |||
605 | time_t timer; | 605 | time_t timer; |
606 | xfs_qwarncnt_t warns; | 606 | xfs_qwarncnt_t warns; |
607 | xfs_qwarncnt_t warnlimit; | 607 | xfs_qwarncnt_t warnlimit; |
608 | xfs_qcnt_t count; | 608 | xfs_qcnt_t total_count; |
609 | xfs_qcnt_t *resbcountp; | 609 | xfs_qcnt_t *resbcountp; |
610 | xfs_quotainfo_t *q = mp->m_quotainfo; | 610 | xfs_quotainfo_t *q = mp->m_quotainfo; |
611 | 611 | ||
@@ -648,13 +648,12 @@ xfs_trans_dqresv( | |||
648 | * hardlimit or exceed the timelimit if we allocate | 648 | * hardlimit or exceed the timelimit if we allocate |
649 | * nblks. | 649 | * nblks. |
650 | */ | 650 | */ |
651 | if (hardlimit > 0ULL && | 651 | total_count = *resbcountp + nblks; |
652 | hardlimit < nblks + *resbcountp) { | 652 | if (hardlimit && total_count > hardlimit) { |
653 | xfs_quota_warn(mp, dqp, QUOTA_NL_BHARDWARN); | 653 | xfs_quota_warn(mp, dqp, QUOTA_NL_BHARDWARN); |
654 | goto error_return; | 654 | goto error_return; |
655 | } | 655 | } |
656 | if (softlimit > 0ULL && | 656 | if (softlimit && total_count > softlimit) { |
657 | softlimit < nblks + *resbcountp) { | ||
658 | if ((timer != 0 && get_seconds() > timer) || | 657 | if ((timer != 0 && get_seconds() > timer) || |
659 | (warns != 0 && warns >= warnlimit)) { | 658 | (warns != 0 && warns >= warnlimit)) { |
660 | xfs_quota_warn(mp, dqp, | 659 | xfs_quota_warn(mp, dqp, |
@@ -666,7 +665,7 @@ xfs_trans_dqresv( | |||
666 | } | 665 | } |
667 | } | 666 | } |
668 | if (ninos > 0) { | 667 | if (ninos > 0) { |
669 | count = be64_to_cpu(dqp->q_core.d_icount); | 668 | total_count = be64_to_cpu(dqp->q_core.d_icount) + ninos; |
670 | timer = be32_to_cpu(dqp->q_core.d_itimer); | 669 | timer = be32_to_cpu(dqp->q_core.d_itimer); |
671 | warns = be16_to_cpu(dqp->q_core.d_iwarns); | 670 | warns = be16_to_cpu(dqp->q_core.d_iwarns); |
672 | warnlimit = dqp->q_mount->m_quotainfo->qi_iwarnlimit; | 671 | warnlimit = dqp->q_mount->m_quotainfo->qi_iwarnlimit; |
@@ -677,13 +676,11 @@ xfs_trans_dqresv( | |||
677 | if (!softlimit) | 676 | if (!softlimit) |
678 | softlimit = q->qi_isoftlimit; | 677 | softlimit = q->qi_isoftlimit; |
679 | 678 | ||
680 | if (hardlimit > 0ULL && | 679 | if (hardlimit && total_count > hardlimit) { |
681 | hardlimit < ninos + count) { | ||
682 | xfs_quota_warn(mp, dqp, QUOTA_NL_IHARDWARN); | 680 | xfs_quota_warn(mp, dqp, QUOTA_NL_IHARDWARN); |
683 | goto error_return; | 681 | goto error_return; |
684 | } | 682 | } |
685 | if (softlimit > 0ULL && | 683 | if (softlimit && total_count > softlimit) { |
686 | softlimit < ninos + count) { | ||
687 | if ((timer != 0 && get_seconds() > timer) || | 684 | if ((timer != 0 && get_seconds() > timer) || |
688 | (warns != 0 && warns >= warnlimit)) { | 685 | (warns != 0 && warns >= warnlimit)) { |
689 | xfs_quota_warn(mp, dqp, | 686 | xfs_quota_warn(mp, dqp, |