From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bob Peterson Date: Mon, 1 Jun 2015 12:27:59 -0400 (EDT) Subject: [Cluster-devel] [GFS2 PATCH 2/2] gfs2: limit quota log messages In-Reply-To: <1433131627-61141-3-git-send-email-adas@redhat.com> References: <1433131627-61141-1-git-send-email-adas@redhat.com> <1433131627-61141-3-git-send-email-adas@redhat.com> Message-ID: <960160300.8346744.1433176079555.JavaMail.zimbra@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, Comment embedded below: ----- Original Message ----- > This patch makes the quota subsystem only report once that a > particular user/group has exceeded their allotted quota. > > Previously, it was possible for a program to continuously try > exceeding quota (despite receiving EDQUOT) and in turn trigger > gfs2 to issue a kernel log message about quota exceed. In theory, > this could get out of hand and flood the log and the filesystem > hosting the log files. > > Resolves: rhbz#1174295 > Signed-off-by: Abhi Das > --- > fs/gfs2/incore.h | 1 + > fs/gfs2/quota.c | 13 +++++++++---- > 2 files changed, 10 insertions(+), 4 deletions(-) > > diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h > index 58b75ab..304a223 100644 > --- a/fs/gfs2/incore.h > +++ b/fs/gfs2/incore.h > @@ -432,6 +432,7 @@ enum { > QDF_CHANGE = 1, > QDF_LOCKED = 2, > QDF_REFRESH = 3, > + QDF_QMSG_QUIET = 4, > }; > > struct gfs2_quota_data { > diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c > index 01f4d40..3dc13b53 100644 > --- a/fs/gfs2/quota.c > +++ b/fs/gfs2/quota.c > @@ -649,6 +649,8 @@ static void do_qc(struct gfs2_quota_data *qd, s64 change) > slot_hold(qd); > } > > + if (change < 0) /* Reset quiet flag if we freed some blocks */ > + clear_bit(QDF_QMSG_QUIET, &qd->qd_flags); > mutex_unlock(&sdp->sd_quota_mutex); > } > > @@ -1187,10 +1189,13 @@ int gfs2_quota_check(struct gfs2_inode *ip, kuid_t > uid, kgid_t gid, > /* If no min_target specified or we don't meet > * min_target, return -EDQUOT */ > if (!ap->min_target || ap->min_target > ap->allowed) { > - print_message(qd, "exceeded"); > - quota_send_warning(qd->qd_id, > - sdp->sd_vfs->s_dev, > - QUOTA_NL_BHARDWARN); > + if (!test_bit(QDF_QMSG_QUIET, &qd->qd_flags)) { > + print_message(qd, "exceeded"); > + quota_send_warning(qd->qd_id, > + sdp->sd_vfs->s_dev, > + QUOTA_NL_BHARDWARN); > + set_bit(QDF_QMSG_QUIET, &qd->qd_flags); > + } Looks good, except that this is a perfect place to use test_and_set_bit(). I don't know the gfs2 quota code like you do, but does the bit also need to be cleared if the user's quotas are increased? Regards, Bob Peterson Red Hat File Systems