diff options
author | Kouta Ooizumi <k-ooizumi@tnes.nec.co.jp> | 2007-05-07 23:49:33 -0400 |
---|---|---|
committer | Tim Shimmin <tes@sgi.com> | 2007-05-07 23:49:33 -0400 |
commit | e6d29426bc8a5d07d0eebd0842fe0cf6ecc862cd (patch) | |
tree | f1b8e35adbd87230913d8a40ddb1b228f18ce323 /fs/xfs/quota | |
parent | d3cf209476b72c83907a412b6708c5e498410aa7 (diff) |
[XFS] Fix uquota and oquota enforcement problems.
When uquota and oquota (gquota/pquota) are enabled for accounting both are
enforced if ether has enforcement active.
Conditions:
- Both XFS_UQUOTA_ACCT and XFS_GQUOTA_ACCT are enabled.
- Either XFS_UQUOTA_ENFD or XFS_OQUOTA_ENFD is enabled.
- The usage without enforce is reached at the soft limit.
Problems:
1. "repquota" shows all grace time even if no enforcement.
2. we cannot make a file over a hard limits even if no enforcement.
SGI-PV: 962291
SGI-Modid: xfs-linux-melb:xfs-kern:28272a
Signed-off-by: Kouta Ooizumi <k-ooizumi@tnes.nec.co.jp>
Signed-off-by: Donald Douwsma <donaldd@sgi.com>
Signed-off-by: Tim Shimmin <tes@sgi.com>
Diffstat (limited to 'fs/xfs/quota')
-rw-r--r-- | fs/xfs/quota/xfs_qm_syscalls.c | 9 | ||||
-rw-r--r-- | fs/xfs/quota/xfs_trans_dquot.c | 4 |
2 files changed, 10 insertions, 3 deletions
diff --git a/fs/xfs/quota/xfs_qm_syscalls.c b/fs/xfs/quota/xfs_qm_syscalls.c index 22d853e77cda..2df67fd913e5 100644 --- a/fs/xfs/quota/xfs_qm_syscalls.c +++ b/fs/xfs/quota/xfs_qm_syscalls.c | |||
@@ -909,14 +909,19 @@ xfs_qm_export_dquot( | |||
909 | * gets turned off. No need to confuse the user level code, | 909 | * gets turned off. No need to confuse the user level code, |
910 | * so return zeroes in that case. | 910 | * so return zeroes in that case. |
911 | */ | 911 | */ |
912 | if (! XFS_IS_QUOTA_ENFORCED(mp)) { | 912 | if ((!XFS_IS_UQUOTA_ENFORCED(mp) && src->d_flags == XFS_DQ_USER) || |
913 | (!XFS_IS_OQUOTA_ENFORCED(mp) && | ||
914 | (src->d_flags & (XFS_DQ_PROJ | XFS_DQ_GROUP)))) { | ||
913 | dst->d_btimer = 0; | 915 | dst->d_btimer = 0; |
914 | dst->d_itimer = 0; | 916 | dst->d_itimer = 0; |
915 | dst->d_rtbtimer = 0; | 917 | dst->d_rtbtimer = 0; |
916 | } | 918 | } |
917 | 919 | ||
918 | #ifdef DEBUG | 920 | #ifdef DEBUG |
919 | if (XFS_IS_QUOTA_ENFORCED(mp) && dst->d_id != 0) { | 921 | if (((XFS_IS_UQUOTA_ENFORCED(mp) && dst->d_flags == XFS_USER_QUOTA) || |
922 | (XFS_IS_OQUOTA_ENFORCED(mp) && | ||
923 | (dst->d_flags & (XFS_PROJ_QUOTA | XFS_GROUP_QUOTA)))) && | ||
924 | dst->d_id != 0) { | ||
920 | if (((int) dst->d_bcount >= (int) dst->d_blk_softlimit) && | 925 | if (((int) dst->d_bcount >= (int) dst->d_blk_softlimit) && |
921 | (dst->d_blk_softlimit > 0)) { | 926 | (dst->d_blk_softlimit > 0)) { |
922 | ASSERT(dst->d_btimer != 0); | 927 | ASSERT(dst->d_btimer != 0); |
diff --git a/fs/xfs/quota/xfs_trans_dquot.c b/fs/xfs/quota/xfs_trans_dquot.c index d7491e7b1f3b..7de6874bf1b8 100644 --- a/fs/xfs/quota/xfs_trans_dquot.c +++ b/fs/xfs/quota/xfs_trans_dquot.c | |||
@@ -656,7 +656,9 @@ xfs_trans_dqresv( | |||
656 | 656 | ||
657 | if ((flags & XFS_QMOPT_FORCE_RES) == 0 && | 657 | if ((flags & XFS_QMOPT_FORCE_RES) == 0 && |
658 | dqp->q_core.d_id && | 658 | dqp->q_core.d_id && |
659 | XFS_IS_QUOTA_ENFORCED(dqp->q_mount)) { | 659 | ((XFS_IS_UQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISUDQ(dqp)) || |
660 | (XFS_IS_OQUOTA_ENFORCED(dqp->q_mount) && | ||
661 | (XFS_QM_ISPDQ(dqp) || XFS_QM_ISGDQ(dqp))))) { | ||
660 | #ifdef QUOTADEBUG | 662 | #ifdef QUOTADEBUG |
661 | cmn_err(CE_DEBUG, "BLK Res: nblks=%ld + resbcount=%Ld" | 663 | cmn_err(CE_DEBUG, "BLK Res: nblks=%ld + resbcount=%Ld" |
662 | " > hardlimit=%Ld?", nblks, *resbcountp, hardlimit); | 664 | " > hardlimit=%Ld?", nblks, *resbcountp, hardlimit); |