From 0318bd4512be39a230fc641a7d541057bdec79c6 Mon Sep 17 00:00:00 2001 From: Paul Dagnelie Date: Tue, 28 Jan 2025 14:18:39 -0800 Subject: [PATCH] switch to wmsums --- module/zfs/zio.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/module/zfs/zio.c b/module/zfs/zio.c index 9154df631b8d..d804b9e73d1c 100644 --- a/module/zfs/zio.c +++ b/module/zfs/zio.c @@ -155,8 +155,12 @@ static zio_stats_t zio_stats = { { "gang_multilevel", KSTAT_DATA_UINT64 }, }; -#define ZIOSTAT_BUMP(stat) \ - atomic_inc_64(&zio_stats.stat.value.ui64); +struct { + wmsum_t ziostat_gang_writes; + wmsum_t ziostat_gang_multilevel; +} ziostat_sums; + +#define ZIOSTAT_BUMP(stat) wmsum_add(&ziostat_sums.stat, 1); static kstat_t *zio_ksp; @@ -164,6 +168,20 @@ static inline void __zio_execute(zio_t *zio); static void zio_taskq_dispatch(zio_t *, zio_taskq_type_t, boolean_t); +static int +zio_kstats_update(kstat_t *ksp, int rw) +{ + zio_stats_t *zs = ksp->ks_data; + if (rw == KSTAT_WRITE) + return (EACCES); + + zs->ziostat_gang_writes.value.ui64 = + wmsum_value(&ziostat_sums.ziostat_gang_writes); + zs->ziostat_gang_multilevel.value.ui64 = + wmsum_value(&ziostat_sums.ziostat_gang_multilevel); + return (0); +} + void zio_init(void) { @@ -173,11 +191,15 @@ zio_init(void) sizeof (zio_t), 0, NULL, NULL, NULL, NULL, NULL, 0); zio_link_cache = kmem_cache_create("zio_link_cache", sizeof (zio_link_t), 0, NULL, NULL, NULL, NULL, NULL, 0); + + wmsum_init(&ziostat_sums.ziostat_gang_writes, 0); + wmsum_init(&ziostat_sums.ziostat_gang_multilevel, 0); zio_ksp = kstat_create("zfs", 0, "zio_stats", "misc", KSTAT_TYPE_NAMED, sizeof (zio_stats) / sizeof (kstat_named_t), KSTAT_FLAG_VIRTUAL); if (zio_ksp != NULL) { zio_ksp->ks_data = &zio_stats; + zio_ksp->ks_update = zio_kstats_update; kstat_install(zio_ksp); }