diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /fs/xfs/quota/xfs_trans_dquot.c | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'fs/xfs/quota/xfs_trans_dquot.c')
-rw-r--r-- | fs/xfs/quota/xfs_trans_dquot.c | 49 |
1 files changed, 32 insertions, 17 deletions
diff --git a/fs/xfs/quota/xfs_trans_dquot.c b/fs/xfs/quota/xfs_trans_dquot.c index 97ac9640be98..c3ab75cb1d9a 100644 --- a/fs/xfs/quota/xfs_trans_dquot.c +++ b/fs/xfs/quota/xfs_trans_dquot.c | |||
@@ -589,12 +589,18 @@ xfs_trans_unreserve_and_mod_dquots( | |||
589 | } | 589 | } |
590 | } | 590 | } |
591 | 591 | ||
592 | STATIC int | 592 | STATIC void |
593 | xfs_quota_error(uint flags) | 593 | xfs_quota_warn( |
594 | struct xfs_mount *mp, | ||
595 | struct xfs_dquot *dqp, | ||
596 | int type) | ||
594 | { | 597 | { |
595 | if (flags & XFS_QMOPT_ENOSPC) | 598 | /* no warnings for project quotas - we just return ENOSPC later */ |
596 | return ENOSPC; | 599 | if (dqp->dq_flags & XFS_DQ_PROJ) |
597 | return EDQUOT; | 600 | return; |
601 | quota_send_warning((dqp->dq_flags & XFS_DQ_USER) ? USRQUOTA : GRPQUOTA, | ||
602 | be32_to_cpu(dqp->q_core.d_id), mp->m_super->s_dev, | ||
603 | type); | ||
598 | } | 604 | } |
599 | 605 | ||
600 | /* | 606 | /* |
@@ -612,7 +618,6 @@ xfs_trans_dqresv( | |||
612 | long ninos, | 618 | long ninos, |
613 | uint flags) | 619 | uint flags) |
614 | { | 620 | { |
615 | int error; | ||
616 | xfs_qcnt_t hardlimit; | 621 | xfs_qcnt_t hardlimit; |
617 | xfs_qcnt_t softlimit; | 622 | xfs_qcnt_t softlimit; |
618 | time_t timer; | 623 | time_t timer; |
@@ -649,7 +654,6 @@ xfs_trans_dqresv( | |||
649 | warnlimit = XFS_QI_RTBWARNLIMIT(dqp->q_mount); | 654 | warnlimit = XFS_QI_RTBWARNLIMIT(dqp->q_mount); |
650 | resbcountp = &dqp->q_res_rtbcount; | 655 | resbcountp = &dqp->q_res_rtbcount; |
651 | } | 656 | } |
652 | error = 0; | ||
653 | 657 | ||
654 | if ((flags & XFS_QMOPT_FORCE_RES) == 0 && | 658 | if ((flags & XFS_QMOPT_FORCE_RES) == 0 && |
655 | dqp->q_core.d_id && | 659 | dqp->q_core.d_id && |
@@ -667,18 +671,20 @@ xfs_trans_dqresv( | |||
667 | * nblks. | 671 | * nblks. |
668 | */ | 672 | */ |
669 | if (hardlimit > 0ULL && | 673 | if (hardlimit > 0ULL && |
670 | (hardlimit <= nblks + *resbcountp)) { | 674 | hardlimit <= nblks + *resbcountp) { |
671 | error = xfs_quota_error(flags); | 675 | xfs_quota_warn(mp, dqp, QUOTA_NL_BHARDWARN); |
672 | goto error_return; | 676 | goto error_return; |
673 | } | 677 | } |
674 | |||
675 | if (softlimit > 0ULL && | 678 | if (softlimit > 0ULL && |
676 | (softlimit <= nblks + *resbcountp)) { | 679 | softlimit <= nblks + *resbcountp) { |
677 | if ((timer != 0 && get_seconds() > timer) || | 680 | if ((timer != 0 && get_seconds() > timer) || |
678 | (warns != 0 && warns >= warnlimit)) { | 681 | (warns != 0 && warns >= warnlimit)) { |
679 | error = xfs_quota_error(flags); | 682 | xfs_quota_warn(mp, dqp, |
683 | QUOTA_NL_BSOFTLONGWARN); | ||
680 | goto error_return; | 684 | goto error_return; |
681 | } | 685 | } |
686 | |||
687 | xfs_quota_warn(mp, dqp, QUOTA_NL_BSOFTWARN); | ||
682 | } | 688 | } |
683 | } | 689 | } |
684 | if (ninos > 0) { | 690 | if (ninos > 0) { |
@@ -692,15 +698,19 @@ xfs_trans_dqresv( | |||
692 | softlimit = be64_to_cpu(dqp->q_core.d_ino_softlimit); | 698 | softlimit = be64_to_cpu(dqp->q_core.d_ino_softlimit); |
693 | if (!softlimit) | 699 | if (!softlimit) |
694 | softlimit = q->qi_isoftlimit; | 700 | softlimit = q->qi_isoftlimit; |
701 | |||
695 | if (hardlimit > 0ULL && count >= hardlimit) { | 702 | if (hardlimit > 0ULL && count >= hardlimit) { |
696 | error = xfs_quota_error(flags); | 703 | xfs_quota_warn(mp, dqp, QUOTA_NL_IHARDWARN); |
697 | goto error_return; | 704 | goto error_return; |
698 | } else if (softlimit > 0ULL && count >= softlimit) { | 705 | } |
699 | if ((timer != 0 && get_seconds() > timer) || | 706 | if (softlimit > 0ULL && count >= softlimit) { |
707 | if ((timer != 0 && get_seconds() > timer) || | ||
700 | (warns != 0 && warns >= warnlimit)) { | 708 | (warns != 0 && warns >= warnlimit)) { |
701 | error = xfs_quota_error(flags); | 709 | xfs_quota_warn(mp, dqp, |
710 | QUOTA_NL_ISOFTLONGWARN); | ||
702 | goto error_return; | 711 | goto error_return; |
703 | } | 712 | } |
713 | xfs_quota_warn(mp, dqp, QUOTA_NL_ISOFTWARN); | ||
704 | } | 714 | } |
705 | } | 715 | } |
706 | } | 716 | } |
@@ -736,9 +746,14 @@ xfs_trans_dqresv( | |||
736 | ASSERT(dqp->q_res_rtbcount >= be64_to_cpu(dqp->q_core.d_rtbcount)); | 746 | 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)); | 747 | ASSERT(dqp->q_res_icount >= be64_to_cpu(dqp->q_core.d_icount)); |
738 | 748 | ||
749 | xfs_dqunlock(dqp); | ||
750 | return 0; | ||
751 | |||
739 | error_return: | 752 | error_return: |
740 | xfs_dqunlock(dqp); | 753 | xfs_dqunlock(dqp); |
741 | return error; | 754 | if (flags & XFS_QMOPT_ENOSPC) |
755 | return ENOSPC; | ||
756 | return EDQUOT; | ||
742 | } | 757 | } |
743 | 758 | ||
744 | 759 | ||