diff mbox series

[4/4] xfs_repair: skip mount time quotacheck if our quotacheck was ok

Message ID 158947540679.2482564.16151977938940466991.stgit@magnolia (mailing list archive)
State Superseded
Headers show
Series xfs_repair: check quota counters | expand

Commit Message

Darrick J. Wong May 14, 2020, 4:56 p.m. UTC
From: Darrick J. Wong <darrick.wong@oracle.com>

If we verified that the incore quota counts match the ondisk quota
contents, we can leave the CHKD flags set so that the next mount doesn't
have to repeat the quotacheck.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 repair/quotacheck.c |   10 ++++++++++
 repair/quotacheck.h |    1 +
 repair/xfs_repair.c |    2 +-
 3 files changed, 12 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/repair/quotacheck.c b/repair/quotacheck.c
index a9e4f1ba..7a94f465 100644
--- a/repair/quotacheck.c
+++ b/repair/quotacheck.c
@@ -24,6 +24,16 @@  void quotacheck_skip(void)
  */
 static uint16_t chkd_flags;
 
+/*
+ * Return CHKD flags for the quota types that we checked.  If we encountered
+ * any errors at all, return zero.
+ */
+uint16_t
+quotacheck_results(void)
+{
+	return chkd_flags;
+}
+
 /* Global incore dquot tree */
 struct qc_dquots {
 	pthread_mutex_t		lock;
diff --git a/repair/quotacheck.h b/repair/quotacheck.h
index 08e11d17..d745696f 100644
--- a/repair/quotacheck.h
+++ b/repair/quotacheck.h
@@ -9,6 +9,7 @@ 
 void quotacheck_skip(void);
 void quotacheck_adjust(struct xfs_mount *mp, xfs_ino_t ino);
 void quotacheck_verify(struct xfs_mount *mp, unsigned int type);
+uint16_t quotacheck_results(void);
 int quotacheck_setup(struct xfs_mount *mp);
 void quotacheck_teardown(void);
 
diff --git a/repair/xfs_repair.c b/repair/xfs_repair.c
index 6a796742..a82f96f8 100644
--- a/repair/xfs_repair.c
+++ b/repair/xfs_repair.c
@@ -1106,7 +1106,7 @@  _("Warning:  project quota information would be cleared.\n"
 
 	dsb = sbp->b_addr;
 
-	if (mp->m_sb.sb_qflags & XFS_ALL_QUOTA_CHKD) {
+	if ((mp->m_sb.sb_qflags & XFS_ALL_QUOTA_CHKD) != quotacheck_results()) {
 		do_warn(_("Note - quota info will be regenerated on next "
 			"quota mount.\n"));
 		dsb->sb_qflags &= cpu_to_be16(~(XFS_UQUOTA_CHKD |