diff options
author | Serapheim Dimitropoulos <serapheim@delphix.com> | 2018-06-16 17:39:14 -0700 |
---|---|---|
committer | Prakash Surya <prakash.surya@delphix.com> | 2018-10-04 07:28:59 -0700 |
commit | ade2c82828f0dca1f46919aa1bd936ea1a5a0047 (patch) | |
tree | 79aa880c99c745c12cb05f488f6c79924165c541 | |
parent | 84927f52bd837f6e4882a19e43fd026f1828d910 (diff) | |
download | illumos-joyent-ade2c82828f0dca1f46919aa1bd936ea1a5a0047.tar.gz |
9682 page fault in dsl_async_clone_destroy() while opening pool
Reviewed by: Brad Lewis <brad.lewis@delphix.com>
Reviewed by: Matt Ahrens <matt@delphix.com>
Reviewed by: Sara Hartse <sara.hartse@delphix.com>
Approved by: Robert Mustacchi <rm@joyent.com>
-rw-r--r-- | usr/src/cmd/zdb/zdb.c | 5 | ||||
-rw-r--r-- | usr/src/uts/common/fs/zfs/spa.c | 13 |
2 files changed, 12 insertions, 6 deletions
diff --git a/usr/src/cmd/zdb/zdb.c b/usr/src/cmd/zdb/zdb.c index 7ccd124dbe..836a7887de 100644 --- a/usr/src/cmd/zdb/zdb.c +++ b/usr/src/cmd/zdb/zdb.c @@ -2247,10 +2247,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/usr/src/uts/common/fs/zfs/spa.c b/usr/src/uts/common/fs/zfs/spa.c index 599ae9fade..2b19f71d36 100644 --- a/usr/src/uts/common/fs/zfs/spa.c +++ b/usr/src/uts/common/fs/zfs/spa.c @@ -3862,8 +3862,17 @@ spa_load_impl(spa_t *spa, spa_import_type_t type, char **ereport) */ spa_history_log_version(spa, "open"); + 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); @@ -3873,10 +3882,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_config_enter(spa, SCL_CONFIG, FTAG, RW_READER); vdev_initialize_restart(spa->spa_root_vdev); spa_config_exit(spa, SCL_CONFIG, FTAG); |