diff --git a/lib/libmemstat/memstat_uma.c b/lib/libmemstat/memstat_uma.c index b35c4d90cf8e..6d5407c72d0b 100644 --- a/lib/libmemstat/memstat_uma.c +++ b/lib/libmemstat/memstat_uma.c @@ -211,7 +211,16 @@ memstat_sysctl_uma(struct memory_type_list *list, int flags) mtp->mt_count = mtp->mt_numallocs - mtp->mt_numfrees; mtp->mt_zonefree = uthp->uth_zone_free; - mtp->mt_kegfree = uthp->uth_keg_free; + + /* + * UMA secondary zones share a keg with the primary zone. To + * avoid double-reporting of free items, report keg free + * items only in the primary zone. + */ + if (!(uthp->uth_zone_flags & UTH_ZONE_SECONDARY)) { + mtp->mt_free += mtp->mt_kegfree; + mtp->mt_kegfree = uthp->uth_keg_free; + } mtp->mt_free += mtp->mt_zonefree; }