]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Fix stack frame size: spa_livelist_delete_cb()
authorPavel Snajdr <snajpa@snajpa.net>
Thu, 3 Sep 2020 15:38:16 +0000 (17:38 +0200)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 15 Sep 2020 22:55:03 +0000 (15:55 -0700)
Reviewed-by: Ryan Moeller <freqlabs@FreeBSD.org>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Pavel Snajdr <snajpa@snajpa.net>
Closes #10879

module/zfs/spa.c

index 0bf0e366a922ae2428a944c51b4db381d26652a7..8c662f6b066668b5ad57abbe05234472e9b3d121 100644 (file)
@@ -2497,11 +2497,12 @@ spa_livelist_delete_cb(void *arg, zthr_t *z)
        VERIFY0(dsl_get_next_livelist_obj(mos, zap_obj, &ll_obj));
        VERIFY0(zap_count(mos, ll_obj, &count));
        if (count > 0) {
-               dsl_deadlist_t ll = { 0 };
+               dsl_deadlist_t *ll;
                dsl_deadlist_entry_t *dle;
                bplist_t to_free;
-               dsl_deadlist_open(&ll, mos, ll_obj);
-               dle = dsl_deadlist_first(&ll);
+               ll = kmem_zalloc(sizeof (dsl_deadlist_t), KM_SLEEP);
+               dsl_deadlist_open(ll, mos, ll_obj);
+               dle = dsl_deadlist_first(ll);
                ASSERT3P(dle, !=, NULL);
                bplist_create(&to_free);
                int err = dsl_process_sub_livelist(&dle->dle_bpobj, &to_free,
@@ -2509,7 +2510,7 @@ spa_livelist_delete_cb(void *arg, zthr_t *z)
                if (err == 0) {
                        sublist_delete_arg_t sync_arg = {
                            .spa = spa,
-                           .ll = &ll,
+                           .ll = ll,
                            .key = dle->dle_mintxg,
                            .to_free = &to_free
                        };
@@ -2524,7 +2525,8 @@ spa_livelist_delete_cb(void *arg, zthr_t *z)
                }
                bplist_clear(&to_free);
                bplist_destroy(&to_free);
-               dsl_deadlist_close(&ll);
+               dsl_deadlist_close(ll);
+               kmem_free(ll, sizeof (dsl_deadlist_t));
        } else {
                livelist_delete_arg_t sync_arg = {
                    .spa = spa,