From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> 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@xxxxxxxxxx> --- repair/quotacheck.c | 10 ++++++++++ repair/quotacheck.h | 1 + repair/xfs_repair.c | 4 +++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/repair/quotacheck.c b/repair/quotacheck.c index c176492f..d46dbafd 100644 --- a/repair/quotacheck.c +++ b/repair/quotacheck.c @@ -16,6 +16,16 @@ */ 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 27865e32..02ae61b6 100644 --- a/repair/quotacheck.h +++ b/repair/quotacheck.h @@ -8,6 +8,7 @@ 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 8fbd3649..cc999e07 100644 --- a/repair/xfs_repair.c +++ b/repair/xfs_repair.c @@ -25,6 +25,7 @@ #include "libfrog/fsgeom.h" #include "libfrog/platform.h" #include "bload.h" +#include "quotacheck.h" /* * option tables for getsubopt calls @@ -1100,7 +1101,8 @@ _("Warning: project quota information would be cleared.\n" dsb = sbp->b_addr; - if (be16_to_cpu(dsb->sb_qflags) & XFS_ALL_QUOTA_CHKD) { + if ((be16_to_cpu(dsb->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_ALL_QUOTA_CHKD);