blk-cgroup: use group allocation/free of per-cpu counters API
authorKefeng Wang <wangkefeng.wang@huawei.com>
Mon, 25 Mar 2024 03:59:55 +0000 (11:59 +0800)
committerJens Axboe <axboe@kernel.dk>
Wed, 3 Apr 2024 15:10:17 +0000 (09:10 -0600)
Use group allocation/free of per-cpu counters api to accelerate
blkg_rwstat_init/exit() and simplify code.

Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Link: https://lore.kernel.org/r/20240325035955.50019-1-wangkefeng.wang@huawei.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-cgroup-rwstat.c

index 3304e841df7ce924a1a64c69b5ab9102294d6801..a55fb0c535582ba182aff6e05a269aa6f9bd9617 100644 (file)
@@ -9,25 +9,19 @@ int blkg_rwstat_init(struct blkg_rwstat *rwstat, gfp_t gfp)
 {
        int i, ret;
 
-       for (i = 0; i < BLKG_RWSTAT_NR; i++) {
-               ret = percpu_counter_init(&rwstat->cpu_cnt[i], 0, gfp);
-               if (ret) {
-                       while (--i >= 0)
-                               percpu_counter_destroy(&rwstat->cpu_cnt[i]);
-                       return ret;
-               }
+       ret = percpu_counter_init_many(rwstat->cpu_cnt, 0, gfp, BLKG_RWSTAT_NR);
+       if (ret)
+               return ret;
+
+       for (i = 0; i < BLKG_RWSTAT_NR; i++)
                atomic64_set(&rwstat->aux_cnt[i], 0);
-       }
        return 0;
 }
 EXPORT_SYMBOL_GPL(blkg_rwstat_init);
 
 void blkg_rwstat_exit(struct blkg_rwstat *rwstat)
 {
-       int i;
-
-       for (i = 0; i < BLKG_RWSTAT_NR; i++)
-               percpu_counter_destroy(&rwstat->cpu_cnt[i]);
+       percpu_counter_destroy_many(rwstat->cpu_cnt, BLKG_RWSTAT_NR);
 }
 EXPORT_SYMBOL_GPL(blkg_rwstat_exit);