git: 14d0cd7225e2 - main - Ensure that the mount command shows "with quotas" when quotas are enabled.

Kirk McKusick mckusick at FreeBSD.org
Wed Apr 14 22:20:58 UTC 2021


The branch main has been updated by mckusick:

URL: https://cgit.FreeBSD.org/src/commit/?id=14d0cd7225e250015eb6d9c79a7eb4e944211b23

commit 14d0cd7225e250015eb6d9c79a7eb4e944211b23
Author:     Kirk McKusick <mckusick at FreeBSD.org>
AuthorDate: 2021-04-14 22:22:12 +0000
Commit:     Kirk McKusick <mckusick at FreeBSD.org>
CommitDate: 2021-04-14 22:25:08 +0000

    Ensure that the mount command shows "with quotas" when quotas are enabled.
    
    When quotas are enabled with the quotaon(8) command, it sets the
    MNT_QUOTA flag in the mount structure mnt_flag field. The mount
    structure holds a cached copy of the filesystem statfs structure
    in mnt_stat that includes a copy of the mnt_flag field in
    mnt_stat.f_flags. The mnt_stat structure may not be updated for
    hours. Since the mount command requests mount details using the
    MNT_NOWAIT option, it gets the mount's mnt_stat statfs structure
    whose f_flags field does not yet show the MNT_QUOTA flag being set
    in mnt_flag.
    
    The fix is to have quotaon(8) set the MNT_QUOTA flag in both mnt_flag
    and in mnt_stat.f_flags so that it will be immediately visible to
    callers of statfs(2).
    
    Reported by:  Christos Chatzaras
    Tested by:    Christos Chatzaras
    PR:           254682
    MFC after:    3 days
    Sponsored by: Netflix
---
 sys/ufs/ufs/ufs_quota.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sys/ufs/ufs/ufs_quota.c b/sys/ufs/ufs/ufs_quota.c
index 47c8133adc11..4dff74f75945 100644
--- a/sys/ufs/ufs/ufs_quota.c
+++ b/sys/ufs/ufs/ufs_quota.c
@@ -562,6 +562,7 @@ quotaon(struct thread *td, struct mount *mp, int type, void *fname)
 	VOP_UNLOCK(vp);
 	MNT_ILOCK(mp);
 	mp->mnt_flag |= MNT_QUOTA;
+	mp->mnt_stat.f_flags |= MNT_QUOTA;
 	MNT_IUNLOCK(mp);
 
 	vpp = &ump->um_quotas[type];
@@ -764,6 +765,7 @@ quotaoff_inchange(struct thread *td, struct mount *mp, int type)
 	if (i == MAXQUOTAS) {
 		MNT_ILOCK(mp);
 		mp->mnt_flag &= ~MNT_QUOTA;
+		mp->mnt_stat.f_flags &= ~MNT_QUOTA;
 		MNT_IUNLOCK(mp);
 	}
 	UFS_UNLOCK(ump);


More information about the dev-commits-src-all mailing list