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]>
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.

On Fri, Jul 21, 2017 at 11:38 AM, Yuri Pankov <[email protected]> wrote:

> Hi,
> 
> I'm not sure I've picked the change correctly, just guessing as it was the
> latest one to touch get_clones_stat() and friends, and if these aren't
> false positives.. but 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
> ffffff03d222a448      11 ffffff03f414f018 nv_alloc_sys+0x1f
> ------------------------------------------------------------------------
> Total     952 buffers, 40896 bytes
> 
> kmem_alloc_40 leak: 120 buffers, 40 bytes each, 4800 bytes total
>             ADDR          BUFADDR        TIMESTAMP           THREAD
>                             CACHE          LASTLOG         CONTENTS
> ffffff03ef7ceb78 ffffff03ed8e8c80        ab5dc8356 ffffff03f3b97100
>                  ffffff03d222b008 ffffff03d9d4f5c0 ffffff03e57574d8
>                  kmem_cache_alloc_debug+0x2e0
>                  kmem_cache_alloc+0xdd
>                  kmem_alloc+0x4b
>                  nv_alloc_sys+0x1f
>                  nv_mem_zalloc+0x21
>                  nv_priv_alloc_embedded+0x1d
>                  nvlist_copy_embedded+0x2b
>                  nvlist_add_common+0x36d
>                  nvlist_add_nvlist+0x26
>                  fnvlist_add_nvlist+0x19
>                  get_clones_stat+0x83
>                  dsl_dataset_stats+0xcc
>                  dmu_objset_stats+0x2e
>                  zfs_ioc_objset_stats_impl+0x64
>                  zfs_ioc_snapshot_list_next+0x191
> kmem_alloc_24 leak: 123 buffers, 24 bytes each, 2952 bytes total
>             ADDR          BUFADDR        TIMESTAMP           THREAD
>                             CACHE          LASTLOG         CONTENTS
> ffffff03f4150cc8 ffffff03f43b29c0        ab5d77f2b ffffff03f3b97100
>                  ffffff03d222a448 ffffff03d9d4a100 ffffff03e5756558
>                  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+0x27
>                  dsl_dataset_stats+0xcc
>                  dmu_objset_stats+0x2e
>                  zfs_ioc_objset_stats_impl+0x64
>                  zfs_ioc_snapshot_list_next+0x191
>                  zfsdev_ioctl+0x546
>                  cdev_ioctl+0x39
> 
> kmem_alloc_48 leak: 5 buffers, 48 bytes each, 240 bytes total
>             ADDR          BUFADDR        TIMESTAMP           THREAD
>                             CACHE          LASTLOG         CONTENTS
> ffffff03f28bd598 ffffff03f28e5390        acfd4f020 ffffff03f3b97100
>                  ffffff03d222b448 ffffff03db98a980 ffffff03de82d840
>                  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_add_boolean+0x1f
>                  fnvlist_add_boolean+0x15
>                  get_clones_stat_impl+0x151
>                  get_clones_stat+0x4b
>                  dsl_dataset_stats+0xcc
>                  dmu_objset_stats+0x2e
>                  zfs_ioc_objset_stats_impl+0x64
>                  zfs_ioc_snapshot_list_next+0x191
> kmem_alloc_56 leak: 87 buffers, 56 bytes each, 4872 bytes total
>             ADDR          BUFADDR        TIMESTAMP           THREAD
>                             CACHE          LASTLOG         CONTENTS
> ffffff03f28c10f0 ffffff03f28e4a58        aba805885 ffffff03f3b97100
>                  ffffff03d222b888 ffffff03d8ae5900 ffffff03e450d260
>                  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_add_boolean+0x1f
>                  fnvlist_add_boolean+0x15
>                  get_clones_stat_impl+0x151
>                  get_clones_stat+0x4b
>                  dsl_dataset_stats+0xcc
>                  dmu_objset_stats+0x2e
>                  zfs_ioc_objset_stats_impl+0x64
>                  zfs_ioc_snapshot_list_next+0x191
> 
> kmem_alloc_64 leak: 21 buffers, 64 bytes each, 1344 bytes total
>             ADDR          BUFADDR        TIMESTAMP           THREAD
>                             CACHE          LASTLOG         CONTENTS
> ffffff03f4139310 ffffff03f43c4500        ab5dbac69 ffffff03f3b97100
>                  ffffff03d222c008 ffffff03d9d4ed80 ffffff03e5749298
>                  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_add_boolean+0x1f
>                  fnvlist_add_boolean+0x15
>                  get_clones_stat_impl+0x151
>                  get_clones_stat+0x4b
>                  dsl_dataset_stats+0xcc
>                  dmu_objset_stats+0x2e
>                  zfs_ioc_objset_stats_impl+0x64
>                  zfs_ioc_snapshot_list_next+0x191
> kmem_alloc_56 leak: 43 buffers, 56 bytes each, 2408 bytes total
>             ADDR          BUFADDR        TIMESTAMP           THREAD
>                             CACHE          LASTLOG         CONTENTS
> ffffff040ef3f3e8 ffffff040fbc81f0        c8f9dddd9 ffffff040b1a23e0
>                  ffffff03d222b888 ffffff03d7e13480                0
>                  kmem_cache_alloc_debug+0x2e0
>                  kmem_cache_alloc+0x320
>                  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
>                  get_clones_stat+0x83
>                  dsl_dataset_stats+0xcc
>                  dmu_objset_stats+0x2e
> 
> kmem_alloc_64 leak: 120 buffers, 64 bytes each, 7680 bytes total
>             ADDR          BUFADDR        TIMESTAMP           THREAD
>                             CACHE          LASTLOG         CONTENTS
> ffffff03f4591e58 ffffff03f457be00        ab5dc7f46 ffffff03f3b97100
>                  ffffff03d222c008 ffffff03d9d4f500 ffffff03e57491d0
>                  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_add_nvlist+0x26
>                  fnvlist_add_nvlist+0x19
>                  get_clones_stat+0x83
>                  dsl_dataset_stats+0xcc
>                  dmu_objset_stats+0x2e
>                  zfs_ioc_objset_stats_impl+0x64
>                  zfs_ioc_snapshot_list_next+0x191
>                  zfsdev_ioctl+0x546
> kmem_alloc_40 leak: 121 buffers, 40 bytes each, 4840 bytes total
>             ADDR          BUFADDR        TIMESTAMP           THREAD
>                             CACHE          LASTLOG         CONTENTS
> ffffff03f352c068 ffffff03f34bc840        ab5d77d47 ffffff03f3b97100
>                  ffffff03d222b008 ffffff03d9d4a040 ffffff03e5756570
>                  kmem_cache_alloc_debug+0x2e0
>                  kmem_cache_alloc+0xdd
>                  kmem_alloc+0x4b
>                  nv_alloc_sys+0x1f
>                  nv_priv_alloc+0x1e
>                  nvlist_xalloc+0x4d
>                  nvlist_alloc+0x2a
>                  fnvlist_alloc+0x18
>                  get_clones_stat+0x27
>                  dsl_dataset_stats+0xcc
>                  dmu_objset_stats+0x2e
>                  zfs_ioc_objset_stats_impl+0x64
>                  zfs_ioc_snapshot_list_next+0x191
>                  zfsdev_ioctl+0x546
>                  cdev_ioctl+0x39
> 
> kmem_alloc_24 leak: 112 buffers, 24 bytes each, 2688 bytes total
>             ADDR          BUFADDR        TIMESTAMP           THREAD
>                             CACHE          LASTLOG         CONTENTS
> ffffff03f414e5f8 ffffff03f43b2480        abec5ac72 ffffff03f3b97100
>                  ffffff03d222a448 ffffff03d5331700 ffffff03e302c208
>                  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
>                  get_clones_stat+0x37
>                  dsl_dataset_stats+0xcc
>                  dmu_objset_stats+0x2e
>                  zfs_ioc_objset_stats_impl+0x64
>                  zfs_ioc_snapshot_list_next+0x191
>                  zfsdev_ioctl+0x546
>                  cdev_ioctl+0x39
>                  spec_ioctl+0x60
> kmem_alloc_40 leak: 119 buffers, 40 bytes each, 4760 bytes total
>             ADDR          BUFADDR        TIMESTAMP           THREAD
>                             CACHE          LASTLOG         CONTENTS
> ffffff03ee92fdc0 ffffff03eeee2dc0        ab5d782a6 ffffff03f3b97100
>                  ffffff03d222b008 ffffff03d9d4a1c0 ffffff03e57490d0
>                  kmem_cache_alloc_debug+0x2e0
>                  kmem_cache_alloc+0xdd
>                  kmem_alloc+0x4b
>                  nv_alloc_sys+0x1f
>                  nv_priv_alloc+0x1e
>                  nvlist_xalloc+0x4d
>                  nvlist_alloc+0x2a
>                  get_clones_stat+0x37
>                  dsl_dataset_stats+0xcc
>                  dmu_objset_stats+0x2e
>                  zfs_ioc_objset_stats_impl+0x64
>                  zfs_ioc_snapshot_list_next+0x191
>                  zfsdev_ioctl+0x546
>                  cdev_ioctl+0x39
>                  spec_ioctl+0x60
> 
> kmem_alloc_56 leak: 46 buffers, 56 bytes each, 2576 bytes total
>             ADDR          BUFADDR        TIMESTAMP           THREAD
>                             CACHE          LASTLOG         CONTENTS
> ffffff03f28c1378 ffffff03f28e4968        aba80e3f6 ffffff03f3b97100
>                  ffffff03d222b888 ffffff03d8ae6200 ffffff03e2945e98
>                  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
>                  get_clones_stat+0x83
>                  dsl_dataset_stats+0xcc
>                  dmu_objset_stats+0x2e
> kmem_alloc_48 leak: 4 buffers, 48 bytes each, 192 bytes total
>             ADDR          BUFADDR        TIMESTAMP           THREAD
>                             CACHE          LASTLOG         CONTENTS
> ffffff03f28c7708 ffffff03f28e27d8        acfd5c6b6 ffffff03f3b97100
>                  ffffff03d222b448 ffffff03db98b280 ffffff03de838288
>                  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
>                  get_clones_stat+0x83
>                  dsl_dataset_stats+0xcc
>                  dmu_objset_stats+0x2e
> 
> kmem_alloc_64 leak: 20 buffers, 64 bytes each, 1280 bytes total
>             ADDR          BUFADDR        TIMESTAMP           THREAD
>                             CACHE          LASTLOG         CONTENTS
> ffffff03f2a6e7e8 ffffff03f3ee4280        ab5dc893d ffffff03f3b97100
>                  ffffff03d222c008 ffffff03d9d4f680 ffffff03e5748cd0
>                  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
>                  get_clones_stat+0x83
>                  dsl_dataset_stats+0xcc
>                  dmu_objset_stats+0x2e
> 
> kmem_alloc_24 leak: 11 buffers, 24 bytes each, 264 bytes total
>             ADDR          BUFADDR        TIMESTAMP           THREAD
>                             CACHE          LASTLOG         CONTENTS
> ffffff03f414f018 ffffff03f43b2930        ab5d787f9 ffffff03f3b97100
>                  ffffff03d222a448 ffffff03d9d4a280                0
>                  kmem_cache_alloc_debug+0x2e0
>                  kmem_cache_alloc+0x320
>                  kmem_alloc+0x4b
>                  nv_alloc_sys+0x1f
>                  nv_mem_zalloc+0x21
>                  nvlist_xalloc+0x67
>                  nvlist_alloc+0x2a
>                  get_clones_stat+0x37
>                  dsl_dataset_stats+0xcc
>                  dmu_objset_stats+0x2e
>                  zfs_ioc_objset_stats_impl+0x64
>                  zfs_ioc_snapshot_list_next+0x191
>                  zfsdev_ioctl+0x546
>                  cdev_ioctl+0x39
>                  spec_ioctl+0x60

------------------------------------------
openzfs-developer
Archives: 
https://openzfs.topicbox.com/groups/developer/discussions/T858afbc054d53c06-Mf592a0265b0099eb6e0c2bb3
Powered by Topicbox: https://topicbox.com

Reply via email to