From 91a52fbc0f3cb31086af6eb65a9661c94ba07278 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Wed, 29 Jul 2020 20:15:27 -0400 Subject: [PATCH] xfs_repair: skip mount time quotacheck if our quotacheck was ok 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 Reviewed-by: Christoph Hellwig Signed-off-by: Eric Sandeen --- repair/quotacheck.c | 10 ++++++++++ repair/quotacheck.h | 1 + repair/xfs_repair.c | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/repair/quotacheck.c b/repair/quotacheck.c index 481a1289d..0df1f2be5 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 08e11d17e..d745696fa 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 a787da4c8..d687edeaa 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 | -- 2.47.2