gfs2: Introduce new quota=quiet mount option
authorBob Peterson <rpeterso@redhat.com>
Wed, 28 Jun 2023 18:52:42 +0000 (13:52 -0500)
committerAndreas Gruenbacher <agruenba@redhat.com>
Tue, 5 Sep 2023 13:58:17 +0000 (15:58 +0200)
This patch adds a new mount option quota=quiet which is the same as
quota=on but it suppresses gfs2 quota error messages.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/incore.h
fs/gfs2/ops_fstype.c
fs/gfs2/quota.c
fs/gfs2/super.c

index ab857431dfa4955f7e738df204c24db434f10be3..7e94cf3562d602807ab6aa7710c3ad9fb4eb6892 100644 (file)
@@ -537,6 +537,7 @@ struct gfs2_statfs_change_host {
 #define GFS2_QUOTA_OFF         0
 #define GFS2_QUOTA_ACCOUNT     1
 #define GFS2_QUOTA_ON          2
+#define GFS2_QUOTA_QUIET       3 /* on but not complaining */
 
 #define GFS2_DATA_DEFAULT      GFS2_DATA_ORDERED
 #define GFS2_DATA_WRITEBACK    1
index bcbe95229e89b370782586d7cc6bcd1d8266c89d..33ca04733e933e25d6fb1ce88d4f137eef191a9d 100644 (file)
@@ -1396,6 +1396,7 @@ static const struct constant_table gfs2_param_quota[] = {
        {"off",        GFS2_QUOTA_OFF},
        {"account",    GFS2_QUOTA_ACCOUNT},
        {"on",         GFS2_QUOTA_ON},
+       {"quiet",      GFS2_QUOTA_QUIET},
        {}
 };
 
index 3a3189f5104a396a9e157b8e7870d46e13d5b714..0cc585064eae5de97db9b40e8571e4cb7cf74ca9 100644 (file)
@@ -1083,7 +1083,8 @@ int gfs2_quota_lock(struct gfs2_inode *ip, kuid_t uid, kgid_t gid)
        u32 x;
        int error = 0;
 
-       if (sdp->sd_args.ar_quota != GFS2_QUOTA_ON)
+       if (sdp->sd_args.ar_quota != GFS2_QUOTA_ON &&
+           sdp->sd_args.ar_quota != GFS2_QUOTA_QUIET)
                return 0;
 
        error = gfs2_quota_hold(ip, uid, gid);
@@ -1202,10 +1203,11 @@ static int print_message(struct gfs2_quota_data *qd, char *type)
 {
        struct gfs2_sbd *sdp = qd->qd_sbd;
 
-       fs_info(sdp, "quota %s for %s %u\n",
-               type,
-               (qd->qd_id.type == USRQUOTA) ? "user" : "group",
-               from_kqid(&init_user_ns, qd->qd_id));
+       if (sdp->sd_args.ar_quota != GFS2_QUOTA_QUIET)
+               fs_info(sdp, "quota %s for %s %u\n",
+                       type,
+                       (qd->qd_id.type == USRQUOTA) ? "user" : "group",
+                       from_kqid(&init_user_ns, qd->qd_id));
 
        return 0;
 }
@@ -1291,7 +1293,8 @@ void gfs2_quota_change(struct gfs2_inode *ip, s64 change,
        u32 x;
        struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 
-       if (sdp->sd_args.ar_quota != GFS2_QUOTA_ON ||
+       if ((sdp->sd_args.ar_quota != GFS2_QUOTA_ON &&
+           sdp->sd_args.ar_quota != GFS2_QUOTA_QUIET) ||
            gfs2_assert_warn(sdp, change))
                return;
        if (ip->i_diskflags & GFS2_DIF_SYSTEM)
@@ -1601,6 +1604,8 @@ static int gfs2_quota_get_state(struct super_block *sb, struct qc_state *state)
        memset(state, 0, sizeof(*state));
 
        switch (sdp->sd_args.ar_quota) {
+       case GFS2_QUOTA_QUIET:
+               fallthrough;
        case GFS2_QUOTA_ON:
                state->s_state[USRQUOTA].flags |= QCI_LIMITS_ENFORCED;
                state->s_state[GRPQUOTA].flags |= QCI_LIMITS_ENFORCED;
index be3f69c15edcd240fb06988a340e0f3fa4a9af0d..18993ecc2f705554c32c3c43fc38065f02e7681a 100644 (file)
@@ -1119,6 +1119,9 @@ static int gfs2_show_options(struct seq_file *s, struct dentry *root)
                case GFS2_QUOTA_ON:
                        state = "on";
                        break;
+               case GFS2_QUOTA_QUIET:
+                       state = "quiet";
+                       break;
                default:
                        state = "unknown";
                        break;