On Fri, 21 Jul 2017 22:39:31 +0300, Yuri Pankov wrote:
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.
Yes, it helped, thanks.
BTW, may be the findleaks test could be added to the automation, if
possible, of course?
------------------------------------------
openzfs-developer
Archives:
https://openzfs.topicbox.com/groups/developer/discussions/T858afbc054d53c06-M237540af7e5cd571df240c10
Powered by Topicbox: https://topicbox.com