Hi!
I found that "quotaon -g /mnt" fails to switch on group quota enforcement.
Example:
# mount -t xfs -o gqnoenforce /dev/sda6 /mnt/xfs
# quotaon -g /mnt/xfs
Enabling group quota accounting on /dev/sda6
quotaon: quotactl on /dev/sda6: Invalid argument
The problem is the following:
fs/xfs/quota/xfs_qm_syscalls.c 455L
if (((flags & XFS_UQUOTA_ACCT) == 0 &&
(mp->m_sb.sb_qflags & XFS_UQUOTA_ACCT) == 0 &&
(flags & XFS_UQUOTA_ENFD))
||
((flags & XFS_PQUOTA_ACCT) == 0 && **
(mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT) == 0 && **
(flags & XFS_OQUOTA_ENFD)) **
|| **
((flags & XFS_GQUOTA_ACCT) == 0 && **
(mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT) == 0 && **
(flags & XFS_OQUOTA_ENFD))) { **
qdprintk("Can't enforce without acct, flags=%x sbflags=%x\n",
flags, mp->m_sb.sb_qflags);
return XFS_ERROR(EINVAL);
}
XFS_PQUOTA_ACCT and XFS_GQUOTA_ACCT cannot be enabled at the same time.
But this if-statement is not considered it.
Here is the patch.
Signed-off-by: Kouta Ooizumi <k-ooizumi@xxxxxxxxxxxxxx>
--- linux-2.6.20/fs/xfs/quota/xfs_qm_syscalls.c.orig 2007-02-20
15:41:58.000000000 +0900
+++ linux-2.6.20/fs/xfs/quota/xfs_qm_syscalls.c 2007-02-20 15:43:49.000000000
+0900
@@ -458,9 +458,7 @@ xfs_qm_scall_quotaon(
||
((flags & XFS_PQUOTA_ACCT) == 0 &&
(mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT) == 0 &&
- (flags & XFS_OQUOTA_ENFD))
- ||
- ((flags & XFS_GQUOTA_ACCT) == 0 &&
+ (flags & XFS_GQUOTA_ACCT) == 0 &&
(mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT) == 0 &&
(flags & XFS_OQUOTA_ENFD))) {
qdprintk("Can't enforce without acct, flags=%x sbflags=%x\n",
|