diff options
author | Andriy Gapon <avg@FreeBSD.org> | 2017-09-13 10:54:56 +0000 |
---|---|---|
committer | Andriy Gapon <avg@FreeBSD.org> | 2017-09-13 10:54:56 +0000 |
commit | dd976ed5e4fe72161fb0afb3653ea0338bfa2e85 (patch) | |
tree | aae73d4a252218e1726b7b245b9aa34246e298da | |
parent | bdc44f62ffc094e160e2b416de5b8684a766b874 (diff) | |
download | src-dd976ed5e4fe72161fb0afb3653ea0338bfa2e85.tar.gz src-dd976ed5e4fe72161fb0afb3653ea0338bfa2e85.zip |
8521 nvlist memory leak in get_clones_stat() and spa_load_best()
illumos/illumos-gate@7d3000f774e20097a1ee45cbd06d0e38065ddd5a
https://github.com/illumos/illumos-gate/commit/7d3000f774e20097a1ee45cbd06d0e38065ddd5a
https://www.illumos.org/issues/8521
Yuri reported this to the mailing list:
doing a `reboot -d` on current illumos-gate HEAD gives the following "::
findleaks -dv" output:
findleaks: maximum buffers => 301061
findleaks: actual buffers => 297587
findleaks:
findleaks: potential pointers => 29289774
findleaks: dismissals => 26242305 (89.5%)
findleaks: misses => 331153 ( 1.1%)
findleaks: dups => 2419681 ( 8.2%)
findleaks: follows => 296635 ( 1.0%)
findleaks:
findleaks: peak memory usage => 7353 kB
findleaks: elapsed CPU time => 1.5 seconds
findleaks: elapsed wall time => 2.0 seconds
findleaks:
CACHE LEAKED BUFCTL CALLER
ffffff03d222b008 120 ffffff03ef7ceb78 nv_alloc_sys+0x1f
ffffff03d222a448 123 ffffff03f4150cc8 nv_alloc_sys+0x1f
ffffff03d222b448 5 ffffff03f28bd598 nv_alloc_sys+0x1f
ffffff03d222b888 87 ffffff03f28c10f0 nv_alloc_sys+0x1f
ffffff03d222c008 21 ffffff03f4139310 nv_alloc_sys+0x1f
ffffff03d222b888 43 ffffff040ef3f3e8 nv_alloc_sys+0x1f
ffffff03d222c008 120 ffffff03f4591e58 nv_alloc_sys+0x1f
ffffff03d222b008 121 ffffff03f352c068 nv_alloc_sys+0x1f
ffffff03d222a448 112 ffffff03f414e5f8 nv_alloc_sys+0x1f
ffffff03d222b008 119 ffffff03ee92fdc0 nv_alloc_sys+0x1f
ffffff03d222b888 46 ffffff03f28c1378 nv_alloc_sys+0x1f
ffffff03d222b448 4 ffffff03f28c7708 nv_alloc_sys+0x1f
ffffff03d222c008 20 ffffff03f2a6e7e8 nv_alloc_sys+0x1f
Reviewed by: Steve Gonczi <steve.gonczi@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Yuri Pankov <yuripv@gmx.com>
Reviewed by: Matt Ahrens <mahrens@delphix.com>
Approved by: Dan McDonald <danmcd@joyent.com>
Author: Pavel Zakharov <pavel.zakharov@delphix.com>
Notes
Notes:
svn path=/vendor-sys/illumos/dist/; revision=323531
-rw-r--r-- | uts/common/fs/zfs/dsl_dataset.c | 6 | ||||
-rw-r--r-- | uts/common/fs/zfs/spa.c | 2 |
2 files changed, 5 insertions, 3 deletions
diff --git a/uts/common/fs/zfs/dsl_dataset.c b/uts/common/fs/zfs/dsl_dataset.c index 81798db2fc49..5706965ffe20 100644 --- a/uts/common/fs/zfs/dsl_dataset.c +++ b/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/uts/common/fs/zfs/spa.c b/uts/common/fs/zfs/spa.c index ef0b92c8587b..576ef1525c3a 100644 --- a/uts/common/fs/zfs/spa.c +++ b/uts/common/fs/zfs/spa.c @@ -3025,6 +3025,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); |