aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorChandra Seetharaman <sekharan@us.ibm.com>2013-07-10 19:00:36 -0400
committerBen Myers <bpm@sgi.com>2013-07-11 17:49:10 -0400
commitc31ad439e8d111bf911c9cc80619cebde411a44d (patch)
tree1f5c3ec31c3bd484acf2cce7421721862bb7305b /fs
parent92f8ff73f18672b03ec8b92197cdddf2b5de7ea0 (diff)
xfs: Fix the logic check for all quotas being turned off
During the review of seperate pquota inode patches, David noticed that the test to detect all quotas being turned off was incorrect, and hence the block was not freeing all the quota information. The check made sense in Irix, but in Linux, quota is turned off one at a time, which makes the test invalid for Linux. This problem existed since XFS was ported to Linux. David suggested to fix the problem by detecting when all quotas are turned off by checking m_qflags. Signed-off-by: Chandra Seetharaman <sekharan@us.ibm.com> Reviewed-by: Ben Myers <bpm@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/xfs/xfs_qm_syscalls.c5
-rw-r--r--fs/xfs/xfs_quota.h8
2 files changed, 2 insertions, 11 deletions
diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c
index b9363838b42b..e4f8b2d6f38b 100644
--- a/fs/xfs/xfs_qm_syscalls.c
+++ b/fs/xfs/xfs_qm_syscalls.c
@@ -199,10 +199,9 @@ xfs_qm_scall_quotaoff(
199 } 199 }
200 200
201 /* 201 /*
202 * If quotas is completely disabled, close shop. 202 * If all quotas are completely turned off, close shop.
203 */ 203 */
204 if (((flags & XFS_MOUNT_QUOTA_ALL) == XFS_MOUNT_QUOTA_SET1) || 204 if (mp->m_qflags == 0) {
205 ((flags & XFS_MOUNT_QUOTA_ALL) == XFS_MOUNT_QUOTA_SET2)) {
206 mutex_unlock(&q->qi_quotaofflock); 205 mutex_unlock(&q->qi_quotaofflock);
207 xfs_qm_destroy_quotainfo(mp); 206 xfs_qm_destroy_quotainfo(mp);
208 return (0); 207 return (0);
diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h
index 09777c41d5b7..b14f42c714b6 100644
--- a/fs/xfs/xfs_quota.h
+++ b/fs/xfs/xfs_quota.h
@@ -301,14 +301,6 @@ typedef struct xfs_qoff_logformat {
301 (XFS_IS_PQUOTA_ON(mp) && \ 301 (XFS_IS_PQUOTA_ON(mp) && \
302 (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD) == 0)) 302 (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD) == 0))
303 303
304#define XFS_MOUNT_QUOTA_SET1 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\
305 XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT|\
306 XFS_GQUOTA_ENFD|XFS_GQUOTA_CHKD)
307
308#define XFS_MOUNT_QUOTA_SET2 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\
309 XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\
310 XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD)
311
312#define XFS_MOUNT_QUOTA_ALL (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ 304#define XFS_MOUNT_QUOTA_ALL (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\
313 XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT|\ 305 XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT|\
314 XFS_GQUOTA_ENFD|XFS_GQUOTA_CHKD|\ 306 XFS_GQUOTA_ENFD|XFS_GQUOTA_CHKD|\