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

Reply via email to