On Fri, 21 Jul 2017 12:30:26 -0700, Prakash Surya wrote:
Yuri,
Looking at our internal bug tracker at Delphix, I see a bug reporting
these leaks:
> ffffff0340abac18::bufctl -v
ADDR BUFADDR TIMESTAMP THREAD
CACHE LASTLOG CONTENTS
ffffff0340abac18 ffffff0340a6d8d0 b207a68c7d ffffff035fda93c0
ffffff030e626588 ffffff0313c9c380 ffffff0317602cc8
kmem_cache_alloc_debug+0x2e0
kmem_cache_alloc+0xdd
kmem_alloc+0x4b
nv_alloc_sys+0x1f
nv_mem_zalloc+0x21
nvlist_xalloc+0x67
nvlist_alloc+0x2a
fnvlist_alloc+0x18
get_clones_stat+0x30
dsl_dataset_stats+0xcc
dmu_objset_stats+0x2e
zfs_ioc_objset_stats_impl+0x64
zfs_ioc_snapshot_list_next+0x15c
zfsdev_ioctl+0x527
cdev_ioctl+0x39
> ffffff03422d3290::bufctl -v
ADDR BUFADDR TIMESTAMP THREAD
CACHE LASTLOG CONTENTS
ffffff03422d3290 ffffff03422acf90 627f3f04a3d ffffff032aadd7c0
ffffff030e628848 ffffff0310f74fc0 ffffff0319735b08
kmem_cache_alloc_debug+0x2e0
kmem_cache_alloc+0xdd
kmem_alloc+0x4b
nv_alloc_sys+0x1f
nv_mem_zalloc+0x21
nvp_buf_alloc+0x24
nvlist_add_common+0x11c
nvlist_copy_pairs+0x64
nvlist_copy_embedded+0x50
nvlist_add_common+0x36d
nvlist_add_nvlist+0x26
fnvlist_add_nvlist+0x19
spa_config_generate+0x1ff
spa_load_best+0xa1
spa_import+0x1e2
Additionally, it looks like we fixed it back in October, but I don't see
this change on illumos:
± g show
commit 51a86fc8ebe33698ddbbf5f54f5ea0d566f05de6 (HEAD -> illumos-master)
Author: Pavel Zakharov <[email protected]
<mailto:[email protected]>>
Date: Thu Oct 6 11:13:12 2016 -0400
DLPX-47890 nvlist memory leak in get_clones_stat() and spa_load_best()
diff --git a/usr/src/uts/common/fs/zfs/dsl_dataset.c
b/usr/src/uts/common/fs/zfs/dsl_dataset.c
index 81798db2fc..5706965ffe 100644
--- a/usr/src/uts/common/fs/zfs/dsl_dataset.c
+++ b/usr/src/uts/common/fs/zfs/dsl_dataset.c
@@ -1742,10 +1742,10 @@ get_clones_stat(dsl_dataset_t *ds, nvlist_t *nv)
fnvlist_add_nvlist(propval, ZPROP_VALUE, val);
fnvlist_add_nvlist(nv, zfs_prop_to_name(ZFS_PROP_CLONES),
propval);
- } else {
- nvlist_free(val);
- nvlist_free(propval);
}
+
+ nvlist_free(val);
+ nvlist_free(propval);
}
/*
diff --git a/usr/src/uts/common/fs/zfs/spa.c
b/usr/src/uts/common/fs/zfs/spa.c
index 8e72500722..4fa6a6c79a 100644
--- a/usr/src/uts/common/fs/zfs/spa.c
+++ b/usr/src/uts/common/fs/zfs/spa.c
@@ -3024,6 +3024,8 @@ spa_load_best(spa_t *spa, spa_load_state_t state,
int mosconfig,
if (config && (rewind_error || state != SPA_LOAD_RECOVER))
spa_config_set(spa, config);
+ else
+ nvlist_free(config);
if (state == SPA_LOAD_RECOVER) {
ASSERT3P(loadinfo, ==, NULL);
I can open a PR to openzfs to upstream this patch, but can you also
verify this fixes your issue? The stacks looks the same to me, but I
just want to verify with you before I make an incorrect assumption.
Sure, building, will let you know if it helps.
------------------------------------------
openzfs-developer
Archives:
https://openzfs.topicbox.com/groups/developer/discussions/T858afbc054d53c06-M2345ab2e5d39668dd32813e9
Powered by Topicbox: https://topicbox.com