hulk inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/IAFWQH ---------------------------------------- zram_reset_device() clears zram->stats but not zram->zspool_stats[]. After reset, zspool_mm_stat shows stale values. On re-init + new IO, counters accumulate on top of stale values, causing permanently incorrect per-pool statistics. In particular, huge_pages_since is a monotonically increasing counter that is never decremented by zram_free_page(), so its stale value can never self-correct. Fix by adding memset for each zspool_stats entry in zram_reset_device(). Fixes: 8f7294e42b50 ("[Huawei] multi_pool_zram: add mm_stat interface for each zspool") Signed-off-by: Jinjiang Tu <tujinjiang@huawei.com> --- drivers/block/multi_pool_zram/multi_pool_zram_drv.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/block/multi_pool_zram/multi_pool_zram_drv.c b/drivers/block/multi_pool_zram/multi_pool_zram_drv.c index c498b57b82b7..5af9ee71f8c1 100644 --- a/drivers/block/multi_pool_zram/multi_pool_zram_drv.c +++ b/drivers/block/multi_pool_zram/multi_pool_zram_drv.c @@ -945,6 +945,8 @@ static void zram_slot_free_notify(struct block_device *bdev, static void zram_reset_device(struct zram *zram) { + int i; + down_write(&zram->init_lock); set_capacity_and_notify(zram->disk, 0); @@ -958,6 +960,8 @@ static void zram_reset_device(struct zram *zram) zram->comp = NULL; } memset(&zram->stats, 0, sizeof(zram->stats)); + for (i = 0; i < NR_ZPOOL; i++) + memset(&zram->zspool_stats[i], 0, sizeof(struct zram_zspool_stats)); strscpy(zram->compressor, default_compressor, sizeof(zram->compressor)); reset_memcg(zram); up_write(&zram->init_lock); -- 2.43.0