From 7a216e31b74ef0b825adf36eed5f636da8b07533 Mon Sep 17 00:00:00 2001 From: Wang Shilong Date: Fri, 9 Mar 2018 15:38:51 +0800 Subject: [PATCH] LU-10795 quota: fix wrong skipping of reintegration There are two problems addressed by this patch: 1)In qsd_prepare(), if @qqi_acct_failed is true, that only means one type of quota failed, Quota should continue to handle. 2)In qsd_config(), only trigger reintegration if this type of quota is newly enabled, this could fix annoying messages when admin running $ lctl conf_param lustre.quota.mdt=ug LustreError: 0-0: lustre-MDT0000: can't enable quota enforcement since space accounting isn't functional. Please run tunefs.lustre --quota on an unmounted filesystem if not done already Change-Id: I9bad618e7e8fa836902cac9f446714cd6c03f98a Signed-off-by: Wang Shilong Reviewed-on: https://review.whamcloud.com/31607 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Fan Yong Reviewed-by: Hongchao Zhang Reviewed-by: Oleg Drokin --- lustre/quota/qsd_config.c | 9 ++++++++- lustre/quota/qsd_lib.c | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lustre/quota/qsd_config.c b/lustre/quota/qsd_config.c index 3eb49c9..5077861 100644 --- a/lustre/quota/qsd_config.c +++ b/lustre/quota/qsd_config.c @@ -122,7 +122,7 @@ out: int qsd_config(char *valstr, char *fsname, int pool) { struct qsd_fsinfo *qfs; - int rc, enabled = 0; + int rc, enabled = 0, old_enabled = 0; bool reint = false; ENTRY; @@ -148,6 +148,7 @@ int qsd_config(char *valstr, char *fsname, int pool) if ((qfs->qfs_enabled[pool - LQUOTA_FIRST_RES] & enabled) != enabled) reint = true; + old_enabled = qfs->qfs_enabled[pool - LQUOTA_FIRST_RES]; qfs->qfs_enabled[pool - LQUOTA_FIRST_RES] = enabled; /* trigger reintegration for all qsd */ @@ -170,6 +171,12 @@ int qsd_config(char *valstr, char *fsname, int pool) for (type = USRQUOTA; type < LL_MAXQUOTAS; type++) { qqi = qsd->qsd_type_array[type]; + /* only trigger reintegration if this + * type of quota is not enabled before */ + if ((old_enabled & 1 << type) || + !(enabled & 1 << type)) + continue; + if (qqi->qqi_acct_failed) { LCONSOLE_ERROR("%s: can't enable quota " "enforcement since space " diff --git a/lustre/quota/qsd_lib.c b/lustre/quota/qsd_lib.c index c906cea..5eb5a72 100644 --- a/lustre/quota/qsd_lib.c +++ b/lustre/quota/qsd_lib.c @@ -802,7 +802,7 @@ int qsd_prepare(const struct lu_env *env, struct qsd_instance *qsd) ". Please run tunefs.lustre --quota on " "an unmounted filesystem if not done " "already\n", qsd->qsd_svname); - break; + continue; } rc = qsd_start_reint_thread(qqi); -- 1.8.3.1