From 9b2266e3d80994b21c452f67856010b566420831 Mon Sep 17 00:00:00 2001 From: Serapheim Dimitropoulos Date: Sat, 16 Jun 2018 17:39:14 -0700 Subject: [PATCH] OpenZFS 9682 - page fault in dsl_async_clone_destroy() while opening pool Authored by: Serapheim Dimitropoulos Reviewed by: Brad Lewis Reviewed by: Matt Ahrens Reviewed by: Sara Hartse Reviewed by: Brian Behlendorf Approved by: Robert Mustacchi Ported-by: George Melikov OpenZFS-issue: https://www.illumos.org/issues/9682 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/ade2c82828 Closes #8037 --- cmd/zdb/zdb.c | 5 +++-- module/zfs/spa.c | 12 +++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/cmd/zdb/zdb.c b/cmd/zdb/zdb.c index ad4ebe00a..389bd7820 100644 --- a/cmd/zdb/zdb.c +++ b/cmd/zdb/zdb.c @@ -2453,10 +2453,11 @@ dump_dir(objset_t *os) dmu_objset_name(os, osname); (void) printf("Dataset %s [%s], ID %llu, cr_txg %llu, " - "%s, %llu objects%s\n", + "%s, %llu objects%s%s\n", osname, type, (u_longlong_t)dmu_objset_id(os), (u_longlong_t)dds.dds_creation_txg, - numbuf, (u_longlong_t)usedobjs, blkbuf); + numbuf, (u_longlong_t)usedobjs, blkbuf, + (dds.dds_inconsistent) ? " (inconsistent)" : ""); if (zopt_objects != 0) { for (i = 0; i < zopt_objects; i++) diff --git a/module/zfs/spa.c b/module/zfs/spa.c index 3785981b7..f0683b0b8 100644 --- a/module/zfs/spa.c +++ b/module/zfs/spa.c @@ -4226,8 +4226,17 @@ spa_load_impl(spa_t *spa, spa_import_type_t type, char **ereport) */ spa_history_log_version(spa, "open", NULL); + spa_restart_removal(spa); + spa_spawn_aux_threads(spa); + /* * Delete any inconsistent datasets. + * + * Note: + * Since we may be issuing deletes for clones here, + * we make sure to do so after we've spawned all the + * auxiliary threads above (from which the livelist + * deletion zthr is part of). */ (void) dmu_objset_find(spa_name(spa), dsl_destroy_inconsistent, NULL, DS_FIND_CHILDREN); @@ -4237,9 +4246,6 @@ spa_load_impl(spa_t *spa, spa_import_type_t type, char **ereport) */ dsl_pool_clean_tmp_userrefs(spa->spa_dsl_pool); - spa_restart_removal(spa); - - spa_spawn_aux_threads(spa); } spa_load_note(spa, "LOADED"); -- 2.40.0