diff options
Diffstat (limited to 'fs/xfs/xfs_qm_syscalls.c')
| -rw-r--r-- | fs/xfs/xfs_qm_syscalls.c | 156 |
1 files changed, 66 insertions, 90 deletions
diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index 74fca68e43b6..cb6168ec92c9 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c | |||
| @@ -39,7 +39,6 @@ STATIC int xfs_qm_log_quotaoff(xfs_mount_t *, xfs_qoff_logitem_t **, uint); | |||
| 39 | STATIC int xfs_qm_log_quotaoff_end(xfs_mount_t *, xfs_qoff_logitem_t *, | 39 | STATIC int xfs_qm_log_quotaoff_end(xfs_mount_t *, xfs_qoff_logitem_t *, |
| 40 | uint); | 40 | uint); |
| 41 | STATIC uint xfs_qm_export_flags(uint); | 41 | STATIC uint xfs_qm_export_flags(uint); |
| 42 | STATIC uint xfs_qm_export_qtype_flags(uint); | ||
| 43 | 42 | ||
| 44 | /* | 43 | /* |
| 45 | * Turn off quota accounting and/or enforcement for all udquots and/or | 44 | * Turn off quota accounting and/or enforcement for all udquots and/or |
| @@ -573,8 +572,8 @@ xfs_qm_scall_getqstatv( | |||
| 573 | return 0; | 572 | return 0; |
| 574 | } | 573 | } |
| 575 | 574 | ||
| 576 | #define XFS_DQ_MASK \ | 575 | #define XFS_QC_MASK \ |
| 577 | (FS_DQ_LIMIT_MASK | FS_DQ_TIMER_MASK | FS_DQ_WARNS_MASK) | 576 | (QC_LIMIT_MASK | QC_TIMER_MASK | QC_WARNS_MASK) |
| 578 | 577 | ||
| 579 | /* | 578 | /* |
| 580 | * Adjust quota limits, and start/stop timers accordingly. | 579 | * Adjust quota limits, and start/stop timers accordingly. |
| @@ -584,7 +583,7 @@ xfs_qm_scall_setqlim( | |||
| 584 | struct xfs_mount *mp, | 583 | struct xfs_mount *mp, |
| 585 | xfs_dqid_t id, | 584 | xfs_dqid_t id, |
| 586 | uint type, | 585 | uint type, |
| 587 | fs_disk_quota_t *newlim) | 586 | struct qc_dqblk *newlim) |
| 588 | { | 587 | { |
| 589 | struct xfs_quotainfo *q = mp->m_quotainfo; | 588 | struct xfs_quotainfo *q = mp->m_quotainfo; |
| 590 | struct xfs_disk_dquot *ddq; | 589 | struct xfs_disk_dquot *ddq; |
| @@ -593,9 +592,9 @@ xfs_qm_scall_setqlim( | |||
| 593 | int error; | 592 | int error; |
| 594 | xfs_qcnt_t hard, soft; | 593 | xfs_qcnt_t hard, soft; |
| 595 | 594 | ||
| 596 | if (newlim->d_fieldmask & ~XFS_DQ_MASK) | 595 | if (newlim->d_fieldmask & ~XFS_QC_MASK) |
| 597 | return -EINVAL; | 596 | return -EINVAL; |
| 598 | if ((newlim->d_fieldmask & XFS_DQ_MASK) == 0) | 597 | if ((newlim->d_fieldmask & XFS_QC_MASK) == 0) |
| 599 | return 0; | 598 | return 0; |
| 600 | 599 | ||
| 601 | /* | 600 | /* |
| @@ -633,11 +632,11 @@ xfs_qm_scall_setqlim( | |||
| 633 | /* | 632 | /* |
| 634 | * Make sure that hardlimits are >= soft limits before changing. | 633 | * Make sure that hardlimits are >= soft limits before changing. |
| 635 | */ | 634 | */ |
| 636 | hard = (newlim->d_fieldmask & FS_DQ_BHARD) ? | 635 | hard = (newlim->d_fieldmask & QC_SPC_HARD) ? |
| 637 | (xfs_qcnt_t) XFS_BB_TO_FSB(mp, newlim->d_blk_hardlimit) : | 636 | (xfs_qcnt_t) XFS_B_TO_FSB(mp, newlim->d_spc_hardlimit) : |
| 638 | be64_to_cpu(ddq->d_blk_hardlimit); | 637 | be64_to_cpu(ddq->d_blk_hardlimit); |
| 639 | soft = (newlim->d_fieldmask & FS_DQ_BSOFT) ? | 638 | soft = (newlim->d_fieldmask & QC_SPC_SOFT) ? |
| 640 | (xfs_qcnt_t) XFS_BB_TO_FSB(mp, newlim->d_blk_softlimit) : | 639 | (xfs_qcnt_t) XFS_B_TO_FSB(mp, newlim->d_spc_softlimit) : |
| 641 | be64_to_cpu(ddq->d_blk_softlimit); | 640 | be64_to_cpu(ddq->d_blk_softlimit); |
| 642 | if (hard == 0 || hard >= soft) { | 641 | if (hard == 0 || hard >= soft) { |
| 643 | ddq->d_blk_hardlimit = cpu_to_be64(hard); | 642 | ddq->d_blk_hardlimit = cpu_to_be64(hard); |
| @@ -650,11 +649,11 @@ xfs_qm_scall_setqlim( | |||
| 650 | } else { | 649 | } else { |
| 651 | xfs_debug(mp, "blkhard %Ld < blksoft %Ld", hard, soft); | 650 | xfs_debug(mp, "blkhard %Ld < blksoft %Ld", hard, soft); |
| 652 | } | 651 | } |
| 653 | hard = (newlim->d_fieldmask & FS_DQ_RTBHARD) ? | 652 | hard = (newlim->d_fieldmask & QC_RT_SPC_HARD) ? |
| 654 | (xfs_qcnt_t) XFS_BB_TO_FSB(mp, newlim->d_rtb_hardlimit) : | 653 | (xfs_qcnt_t) XFS_B_TO_FSB(mp, newlim->d_rt_spc_hardlimit) : |
| 655 | be64_to_cpu(ddq->d_rtb_hardlimit); | 654 | be64_to_cpu(ddq->d_rtb_hardlimit); |
| 656 | soft = (newlim->d_fieldmask & FS_DQ_RTBSOFT) ? | 655 | soft = (newlim->d_fieldmask & QC_RT_SPC_SOFT) ? |
| 657 | (xfs_qcnt_t) XFS_BB_TO_FSB(mp, newlim->d_rtb_softlimit) : | 656 | (xfs_qcnt_t) XFS_B_TO_FSB(mp, newlim->d_rt_spc_softlimit) : |
| 658 | be64_to_cpu(ddq->d_rtb_softlimit); | 657 | be64_to_cpu(ddq->d_rtb_softlimit); |
| 659 | if (hard == 0 || hard >= soft) { | 658 | if (hard == 0 || hard >= soft) { |
| 660 | ddq->d_rtb_hardlimit = cpu_to_be64(hard); | 659 | ddq->d_rtb_hardlimit = cpu_to_be64(hard); |
| @@ -667,10 +666,10 @@ xfs_qm_scall_setqlim( | |||
| 667 | xfs_debug(mp, "rtbhard %Ld < rtbsoft %Ld", hard, soft); | 666 | xfs_debug(mp, "rtbhard %Ld < rtbsoft %Ld", hard, soft); |
| 668 | } | 667 | } |
| 669 | 668 | ||
| 670 | hard = (newlim->d_fieldmask & FS_DQ_IHARD) ? | 669 | hard = (newlim->d_fieldmask & QC_INO_HARD) ? |
| 671 | (xfs_qcnt_t) newlim->d_ino_hardlimit : | 670 | (xfs_qcnt_t) newlim->d_ino_hardlimit : |
| 672 | be64_to_cpu(ddq->d_ino_hardlimit); | 671 | be64_to_cpu(ddq->d_ino_hardlimit); |
| 673 | soft = (newlim->d_fieldmask & FS_DQ_ISOFT) ? | 672 | soft = (newlim->d_fieldmask & QC_INO_SOFT) ? |
| 674 | (xfs_qcnt_t) newlim->d_ino_softlimit : | 673 | (xfs_qcnt_t) newlim->d_ino_softlimit : |
| 675 | be64_to_cpu(ddq->d_ino_softlimit); | 674 | be64_to_cpu(ddq->d_ino_softlimit); |
| 676 | if (hard == 0 || hard >= soft) { | 675 | if (hard == 0 || hard >= soft) { |
| @@ -687,12 +686,12 @@ xfs_qm_scall_setqlim( | |||
| 687 | /* | 686 | /* |
| 688 | * Update warnings counter(s) if requested | 687 | * Update warnings counter(s) if requested |
| 689 | */ | 688 | */ |
| 690 | if (newlim->d_fieldmask & FS_DQ_BWARNS) | 689 | if (newlim->d_fieldmask & QC_SPC_WARNS) |
| 691 | ddq->d_bwarns = cpu_to_be16(newlim->d_bwarns); | 690 | ddq->d_bwarns = cpu_to_be16(newlim->d_spc_warns); |
| 692 | if (newlim->d_fieldmask & FS_DQ_IWARNS) | 691 | if (newlim->d_fieldmask & QC_INO_WARNS) |
| 693 | ddq->d_iwarns = cpu_to_be16(newlim->d_iwarns); | 692 | ddq->d_iwarns = cpu_to_be16(newlim->d_ino_warns); |
| 694 | if (newlim->d_fieldmask & FS_DQ_RTBWARNS) | 693 | if (newlim->d_fieldmask & QC_RT_SPC_WARNS) |
| 695 | ddq->d_rtbwarns = cpu_to_be16(newlim->d_rtbwarns); | 694 | ddq->d_rtbwarns = cpu_to_be16(newlim->d_rt_spc_warns); |
| 696 | 695 | ||
| 697 | if (id == 0) { | 696 | if (id == 0) { |
| 698 | /* | 697 | /* |
| @@ -702,24 +701,24 @@ xfs_qm_scall_setqlim( | |||
| 702 | * soft and hard limit values (already done, above), and | 701 | * soft and hard limit values (already done, above), and |
| 703 | * for warnings. | 702 | * for warnings. |
| 704 | */ | 703 | */ |
| 705 | if (newlim->d_fieldmask & FS_DQ_BTIMER) { | 704 | if (newlim->d_fieldmask & QC_SPC_TIMER) { |
| 706 | q->qi_btimelimit = newlim->d_btimer; | 705 | q->qi_btimelimit = newlim->d_spc_timer; |
| 707 | ddq->d_btimer = cpu_to_be32(newlim->d_btimer); | 706 | ddq->d_btimer = cpu_to_be32(newlim->d_spc_timer); |
| 708 | } | 707 | } |
| 709 | if (newlim->d_fieldmask & FS_DQ_ITIMER) { | 708 | if (newlim->d_fieldmask & QC_INO_TIMER) { |
| 710 | q->qi_itimelimit = newlim->d_itimer; | 709 | q->qi_itimelimit = newlim->d_ino_timer; |
| 711 | ddq->d_itimer = cpu_to_be32(newlim->d_itimer); | 710 | ddq->d_itimer = cpu_to_be32(newlim->d_ino_timer); |
| 712 | } | 711 | } |
| 713 | if (newlim->d_fieldmask & FS_DQ_RTBTIMER) { | 712 | if (newlim->d_fieldmask & QC_RT_SPC_TIMER) { |
| 714 | q->qi_rtbtimelimit = newlim->d_rtbtimer; | 713 | q->qi_rtbtimelimit = newlim->d_rt_spc_timer; |
| 715 | ddq->d_rtbtimer = cpu_to_be32(newlim->d_rtbtimer); | 714 | ddq->d_rtbtimer = cpu_to_be32(newlim->d_rt_spc_timer); |
| 716 | } | 715 | } |
| 717 | if (newlim->d_fieldmask & FS_DQ_BWARNS) | 716 | if (newlim->d_fieldmask & QC_SPC_WARNS) |
| 718 | q->qi_bwarnlimit = newlim->d_bwarns; | 717 | q->qi_bwarnlimit = newlim->d_spc_warns; |
| 719 | if (newlim->d_fieldmask & FS_DQ_IWARNS) | 718 | if (newlim->d_fieldmask & QC_INO_WARNS) |
| 720 | q->qi_iwarnlimit = newlim->d_iwarns; | 719 | q->qi_iwarnlimit = newlim->d_ino_warns; |
| 721 | if (newlim->d_fieldmask & FS_DQ_RTBWARNS) | 720 | if (newlim->d_fieldmask & QC_RT_SPC_WARNS) |
| 722 | q->qi_rtbwarnlimit = newlim->d_rtbwarns; | 721 | q->qi_rtbwarnlimit = newlim->d_rt_spc_warns; |
| 723 | } else { | 722 | } else { |
| 724 | /* | 723 | /* |
| 725 | * If the user is now over quota, start the timelimit. | 724 | * If the user is now over quota, start the timelimit. |
| @@ -824,7 +823,7 @@ xfs_qm_scall_getquota( | |||
| 824 | struct xfs_mount *mp, | 823 | struct xfs_mount *mp, |
| 825 | xfs_dqid_t id, | 824 | xfs_dqid_t id, |
| 826 | uint type, | 825 | uint type, |
| 827 | struct fs_disk_quota *dst) | 826 | struct qc_dqblk *dst) |
| 828 | { | 827 | { |
| 829 | struct xfs_dquot *dqp; | 828 | struct xfs_dquot *dqp; |
| 830 | int error; | 829 | int error; |
| @@ -848,28 +847,25 @@ xfs_qm_scall_getquota( | |||
| 848 | } | 847 | } |
| 849 | 848 | ||
| 850 | memset(dst, 0, sizeof(*dst)); | 849 | memset(dst, 0, sizeof(*dst)); |
| 851 | dst->d_version = FS_DQUOT_VERSION; | 850 | dst->d_spc_hardlimit = |
| 852 | dst->d_flags = xfs_qm_export_qtype_flags(dqp->q_core.d_flags); | 851 | XFS_FSB_TO_B(mp, be64_to_cpu(dqp->q_core.d_blk_hardlimit)); |
| 853 | dst->d_id = be32_to_cpu(dqp->q_core.d_id); | 852 | dst->d_spc_softlimit = |
| 854 | dst->d_blk_hardlimit = | 853 | XFS_FSB_TO_B(mp, be64_to_cpu(dqp->q_core.d_blk_softlimit)); |
| 855 | XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_blk_hardlimit)); | ||
| 856 | dst->d_blk_softlimit = | ||
| 857 | XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_blk_softlimit)); | ||
| 858 | dst->d_ino_hardlimit = be64_to_cpu(dqp->q_core.d_ino_hardlimit); | 854 | dst->d_ino_hardlimit = be64_to_cpu(dqp->q_core.d_ino_hardlimit); |
| 859 | dst->d_ino_softlimit = be64_to_cpu(dqp->q_core.d_ino_softlimit); | 855 | dst->d_ino_softlimit = be64_to_cpu(dqp->q_core.d_ino_softlimit); |
| 860 | dst->d_bcount = XFS_FSB_TO_BB(mp, dqp->q_res_bcount); | 856 | dst->d_space = XFS_FSB_TO_B(mp, dqp->q_res_bcount); |
| 861 | dst->d_icount = dqp->q_res_icount; | 857 | dst->d_ino_count = dqp->q_res_icount; |
| 862 | dst->d_btimer = be32_to_cpu(dqp->q_core.d_btimer); | 858 | dst->d_spc_timer = be32_to_cpu(dqp->q_core.d_btimer); |
| 863 | dst->d_itimer = be32_to_cpu(dqp->q_core.d_itimer); | 859 | dst->d_ino_timer = be32_to_cpu(dqp->q_core.d_itimer); |
| 864 | dst->d_iwarns = be16_to_cpu(dqp->q_core.d_iwarns); | 860 | dst->d_ino_warns = be16_to_cpu(dqp->q_core.d_iwarns); |
| 865 | dst->d_bwarns = be16_to_cpu(dqp->q_core.d_bwarns); | 861 | dst->d_spc_warns = be16_to_cpu(dqp->q_core.d_bwarns); |
| 866 | dst->d_rtb_hardlimit = | 862 | dst->d_rt_spc_hardlimit = |
| 867 | XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_rtb_hardlimit)); | 863 | XFS_FSB_TO_B(mp, be64_to_cpu(dqp->q_core.d_rtb_hardlimit)); |
| 868 | dst->d_rtb_softlimit = | 864 | dst->d_rt_spc_softlimit = |
| 869 | XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_rtb_softlimit)); | 865 | XFS_FSB_TO_B(mp, be64_to_cpu(dqp->q_core.d_rtb_softlimit)); |
| 870 | dst->d_rtbcount = XFS_FSB_TO_BB(mp, dqp->q_res_rtbcount); | 866 | dst->d_rt_space = XFS_FSB_TO_B(mp, dqp->q_res_rtbcount); |
| 871 | dst->d_rtbtimer = be32_to_cpu(dqp->q_core.d_rtbtimer); | 867 | dst->d_rt_spc_timer = be32_to_cpu(dqp->q_core.d_rtbtimer); |
| 872 | dst->d_rtbwarns = be16_to_cpu(dqp->q_core.d_rtbwarns); | 868 | dst->d_rt_spc_warns = be16_to_cpu(dqp->q_core.d_rtbwarns); |
| 873 | 869 | ||
| 874 | /* | 870 | /* |
| 875 | * Internally, we don't reset all the timers when quota enforcement | 871 | * Internally, we don't reset all the timers when quota enforcement |
| @@ -882,23 +878,23 @@ xfs_qm_scall_getquota( | |||
| 882 | dqp->q_core.d_flags == XFS_DQ_GROUP) || | 878 | dqp->q_core.d_flags == XFS_DQ_GROUP) || |
| 883 | (!XFS_IS_PQUOTA_ENFORCED(mp) && | 879 | (!XFS_IS_PQUOTA_ENFORCED(mp) && |
| 884 | dqp->q_core.d_flags == XFS_DQ_PROJ)) { | 880 | dqp->q_core.d_flags == XFS_DQ_PROJ)) { |
| 885 | dst->d_btimer = 0; | 881 | dst->d_spc_timer = 0; |
| 886 | dst->d_itimer = 0; | 882 | dst->d_ino_timer = 0; |
| 887 | dst->d_rtbtimer = 0; | 883 | dst->d_rt_spc_timer = 0; |
| 888 | } | 884 | } |
| 889 | 885 | ||
| 890 | #ifdef DEBUG | 886 | #ifdef DEBUG |
| 891 | if (((XFS_IS_UQUOTA_ENFORCED(mp) && dst->d_flags == FS_USER_QUOTA) || | 887 | if (((XFS_IS_UQUOTA_ENFORCED(mp) && type == XFS_DQ_USER) || |
| 892 | (XFS_IS_GQUOTA_ENFORCED(mp) && dst->d_flags == FS_GROUP_QUOTA) || | 888 | (XFS_IS_GQUOTA_ENFORCED(mp) && type == XFS_DQ_GROUP) || |
| 893 | (XFS_IS_PQUOTA_ENFORCED(mp) && dst->d_flags == FS_PROJ_QUOTA)) && | 889 | (XFS_IS_PQUOTA_ENFORCED(mp) && type == XFS_DQ_PROJ)) && |
| 894 | dst->d_id != 0) { | 890 | id != 0) { |
| 895 | if ((dst->d_bcount > dst->d_blk_softlimit) && | 891 | if ((dst->d_space > dst->d_spc_softlimit) && |
| 896 | (dst->d_blk_softlimit > 0)) { | 892 | (dst->d_spc_softlimit > 0)) { |
| 897 | ASSERT(dst->d_btimer != 0); | 893 | ASSERT(dst->d_spc_timer != 0); |
| 898 | } | 894 | } |
| 899 | if ((dst->d_icount > dst->d_ino_softlimit) && | 895 | if ((dst->d_ino_count > dst->d_ino_softlimit) && |
| 900 | (dst->d_ino_softlimit > 0)) { | 896 | (dst->d_ino_softlimit > 0)) { |
| 901 | ASSERT(dst->d_itimer != 0); | 897 | ASSERT(dst->d_ino_timer != 0); |
| 902 | } | 898 | } |
| 903 | } | 899 | } |
| 904 | #endif | 900 | #endif |
| @@ -908,26 +904,6 @@ out_put: | |||
| 908 | } | 904 | } |
| 909 | 905 | ||
| 910 | STATIC uint | 906 | STATIC uint |
| 911 | xfs_qm_export_qtype_flags( | ||
| 912 | uint flags) | ||
| 913 | { | ||
| 914 | /* | ||
| 915 | * Can't be more than one, or none. | ||
| 916 | */ | ||
| 917 | ASSERT((flags & (FS_PROJ_QUOTA | FS_USER_QUOTA)) != | ||
| 918 | (FS_PROJ_QUOTA | FS_USER_QUOTA)); | ||
| 919 | ASSERT((flags & (FS_PROJ_QUOTA | FS_GROUP_QUOTA)) != | ||
| 920 | (FS_PROJ_QUOTA | FS_GROUP_QUOTA)); | ||
| 921 | ASSERT((flags & (FS_USER_QUOTA | FS_GROUP_QUOTA)) != | ||
| 922 | (FS_USER_QUOTA | FS_GROUP_QUOTA)); | ||
| 923 | ASSERT((flags & (FS_PROJ_QUOTA|FS_USER_QUOTA|FS_GROUP_QUOTA)) != 0); | ||
| 924 | |||
| 925 | return (flags & XFS_DQ_USER) ? | ||
| 926 | FS_USER_QUOTA : (flags & XFS_DQ_PROJ) ? | ||
| 927 | FS_PROJ_QUOTA : FS_GROUP_QUOTA; | ||
| 928 | } | ||
| 929 | |||
| 930 | STATIC uint | ||
| 931 | xfs_qm_export_flags( | 907 | xfs_qm_export_flags( |
| 932 | uint flags) | 908 | uint flags) |
| 933 | { | 909 | { |
