mirror of https://github.com/openzfs/zfs.git
Prepare ks_data before calling kstat_install()
It violated sequence described in kstat.h, and at least on FreeBSD kstat_install() uses provided names to create the sysctls. If the names are not available at the time, it ends up bad. Reviewed-by: Igor Kozhukhov <igor@dilos.org> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Ryan Moeller <ryan@iXsystems.com> Signed-off-by: Alexander Motin <mav@FreeBSD.org> Sponsored-By: iXsystems, Inc. Closes #9933
This commit is contained in:
parent
52c487a0e4
commit
741db5a346
|
@ -573,15 +573,14 @@ abd_init(void)
|
|||
abd_ksp = kstat_create("zfs", 0, "abdstats", "misc", KSTAT_TYPE_NAMED,
|
||||
sizeof (abd_stats) / sizeof (kstat_named_t), KSTAT_FLAG_VIRTUAL);
|
||||
if (abd_ksp != NULL) {
|
||||
abd_ksp->ks_data = &abd_stats;
|
||||
kstat_install(abd_ksp);
|
||||
|
||||
for (i = 0; i < MAX_ORDER; i++) {
|
||||
snprintf(abd_stats.abdstat_scatter_orders[i].name,
|
||||
KSTAT_STRLEN, "scatter_order_%d", i);
|
||||
abd_stats.abdstat_scatter_orders[i].data_type =
|
||||
KSTAT_DATA_UINT64;
|
||||
}
|
||||
abd_ksp->ks_data = &abd_stats;
|
||||
kstat_install(abd_ksp);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -850,10 +850,6 @@ retry:
|
|||
KSTAT_TYPE_NAMED, sizeof (dbuf_stats) / sizeof (kstat_named_t),
|
||||
KSTAT_FLAG_VIRTUAL);
|
||||
if (dbuf_ksp != NULL) {
|
||||
dbuf_ksp->ks_data = &dbuf_stats;
|
||||
dbuf_ksp->ks_update = dbuf_kstat_update;
|
||||
kstat_install(dbuf_ksp);
|
||||
|
||||
for (i = 0; i < DN_MAX_LEVELS; i++) {
|
||||
snprintf(dbuf_stats.cache_levels[i].name,
|
||||
KSTAT_STRLEN, "cache_level_%d", i);
|
||||
|
@ -864,6 +860,9 @@ retry:
|
|||
dbuf_stats.cache_levels_bytes[i].data_type =
|
||||
KSTAT_DATA_UINT64;
|
||||
}
|
||||
dbuf_ksp->ks_data = &dbuf_stats;
|
||||
dbuf_ksp->ks_update = dbuf_kstat_update;
|
||||
kstat_install(dbuf_ksp);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue