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/xfs_qm_syscalls.c | |
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/xfs_qm_syscalls.c')
-rw-r--r-- | fs/xfs/quota/xfs_qm_syscalls.c | 9 |
1 files changed, 7 insertions, 2 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); |