Whamcloud - gitweb
LU-15055 lod: run qmt_pool_* only from the MDT0000 config
[fs/lustre-release.git] / lustre / quota / qmt_pool.c
index bf9241c..dcfb7c7 100644 (file)
@@ -85,8 +85,8 @@ static int qpi_state_seq_show(struct seq_file *m, void *data)
        seq_printf(m, "pool:\n"
                   "    id: %u\n"
                   "    type: %s\n"
-                  "    ref: %d\n"
-                  "    least qunit: %lu\n",
+                  "    refcount: %d\n"
+                  "    least_qunit: %lu\n",
                   0,
                   RES_NAME(pool->qpi_rtype),
                   atomic_read(&pool->qpi_ref),
@@ -94,8 +94,8 @@ static int qpi_state_seq_show(struct seq_file *m, void *data)
 
        for (type = 0; type < LL_MAXQUOTAS; type++)
                seq_printf(m, "    %s:\n"
-                          "        #slv: %d\n"
-                          "        #lqe: %d\n",
+                          "        quota_servers: %d\n"
+                          "        quota_entries: %d\n",
                           qtype_name(type),
                           qpi_slv_nr(pool, type),
                    atomic_read(&pool->qpi_site[type]->lqs_hash->hs_count));
@@ -466,6 +466,8 @@ void qmt_pool_fini(const struct lu_env *env, struct qmt_device *qmt)
 
        /* parse list of pool and destroy each element */
        list_for_each_entry_safe(pool, tmp, &qmt->qmt_pool_list, qpi_linkage) {
+               /* stop all recalc threads - it may hold qpi reference */
+               qmt_stop_pool_recalc(pool);
                /* release extra reference taken in qmt_pool_alloc */
                qpi_putref(env, pool);
        }
@@ -1179,6 +1181,7 @@ static int qmt_pool_recalc(void *args)
                while (obd->obd_process_conf)
                        schedule_timeout_uninterruptible(cfs_time_seconds(1));
 
+       OBD_FAIL_TIMEOUT(OBD_FAIL_QUOTA_RECALC, cfs_fail_val);
        sem = qmt_sarr_rwsem(pool);
        LASSERT(sem);
        down_read(sem);
@@ -1364,6 +1367,9 @@ static int qmt_pool_add_rem(struct obd_device *obd, char *poolname,
        int                      rc, idx;
        ENTRY;
 
+       if (qmt->qmt_stopping)
+               RETURN(0);
+
        if (strnlen(poolname, LOV_MAXPOOLNAME + 1) > LOV_MAXPOOLNAME)
                RETURN(-ENAMETOOLONG);
 
@@ -1391,9 +1397,10 @@ static int qmt_pool_add_rem(struct obd_device *obd, char *poolname,
        rc = add ? qmt_sarr_pool_add(qpi, idx, 32) :
                   qmt_sarr_pool_rem(qpi, idx);
        if (rc) {
-               CERROR("%s: can't %s %s pool %s: rc = %d\n",
-                      add ? "add to" : "remove", obd->obd_name,
-                      slavename, poolname, rc);
+               /* message is checked in sanity-quota test_1b */
+               CERROR("%s: can't %s %s pool '%s': rc = %d\n",
+                      obd->obd_name, add ? "add to" : "remove", slavename,
+                      poolname, rc);
                GOTO(out_putref, rc);
        }
        qmt_pool_slv_nr_change(&env, qpi, idx, add);