diff --git a/include/sys/spa.h b/include/sys/spa.h index db30b5a06..1a84844c5 100644 --- a/include/sys/spa.h +++ b/include/sys/spa.h @@ -1077,6 +1077,7 @@ extern void spa_set_rootblkptr(spa_t *spa, const blkptr_t *bp); extern void spa_altroot(spa_t *, char *, size_t); extern uint32_t spa_sync_pass(spa_t *spa); extern char *spa_name(spa_t *spa); +extern char *spa_load_name(spa_t *spa); extern uint64_t spa_guid(spa_t *spa); extern uint64_t spa_load_guid(spa_t *spa); extern uint64_t spa_last_synced_txg(spa_t *spa); diff --git a/include/sys/spa_impl.h b/include/sys/spa_impl.h index 8d8e565cc..c18d955f7 100644 --- a/include/sys/spa_impl.h +++ b/include/sys/spa_impl.h @@ -222,6 +222,7 @@ struct spa { * Fields protected by spa_namespace_lock. */ char spa_name[ZFS_MAX_DATASET_NAME_LEN]; /* pool name */ + char *spa_load_name; /* unmodified pool name */ char *spa_comment; /* comment */ avl_node_t spa_avl; /* node in spa_namespace_avl */ nvlist_t *spa_config; /* last synced config */ diff --git a/module/zfs/spa.c b/module/zfs/spa.c index ca6a7d3bc..b4259dbd2 100644 --- a/module/zfs/spa.c +++ b/module/zfs/spa.c @@ -3751,7 +3751,7 @@ spa_activity_check_required(spa_t *spa, uberblock_t *ub, nvlist_t *label, */ if (spa->spa_import_flags & ZFS_IMPORT_SKIP_MMP) { zfs_dbgmsg("mmp: skipping check ZFS_IMPORT_SKIP_MMP is set, " - "spa=%s", spa_name(spa)); + "spa=%s", spa_load_name(spa)); return (B_FALSE); } @@ -3760,7 +3760,7 @@ spa_activity_check_required(spa_t *spa, uberblock_t *ub, nvlist_t *label, */ if (ub->ub_mmp_magic == MMP_MAGIC && ub->ub_mmp_delay == 0) { zfs_dbgmsg("mmp: skipping check: feature is disabled, " - "spa=%s", spa_name(spa)); + "spa=%s", spa_load_name(spa)); return (B_FALSE); } @@ -3795,7 +3795,7 @@ spa_activity_check_required(spa_t *spa, uberblock_t *ub, nvlist_t *label, state == POOL_STATE_EXPORTED) { zfs_dbgmsg("mmp: skipping check: hostid matches and pool is " "exported, spa=%s, hostid=%llx", - spa_name(spa), (u_longlong_t)hostid); + spa_load_name(spa), (u_longlong_t)hostid); return (B_FALSE); } @@ -7144,6 +7144,8 @@ spa_tryimport(nvlist_t *tryconfig) spa_activate(spa, SPA_MODE_READ); kmem_free(name, MAXPATHLEN); + spa->spa_load_name = spa_strdup(poolname); + /* * Rewind pool if a max txg was provided. */ @@ -7152,9 +7154,9 @@ spa_tryimport(nvlist_t *tryconfig) spa->spa_load_max_txg = policy.zlp_txg; spa->spa_extreme_rewind = B_TRUE; zfs_dbgmsg("spa_tryimport: importing %s, max_txg=%lld", - poolname, (longlong_t)policy.zlp_txg); + spa_load_name(spa), (longlong_t)policy.zlp_txg); } else { - zfs_dbgmsg("spa_tryimport: importing %s", poolname); + zfs_dbgmsg("spa_tryimport: importing %s", spa_load_name(spa)); } if (nvlist_lookup_string(tryconfig, ZPOOL_CONFIG_CACHEFILE, &cachefile) @@ -7182,7 +7184,8 @@ spa_tryimport(nvlist_t *tryconfig) */ if (spa->spa_root_vdev != NULL) { config = spa_config_generate(spa, NULL, -1ULL, B_TRUE); - fnvlist_add_string(config, ZPOOL_CONFIG_POOL_NAME, poolname); + fnvlist_add_string(config, ZPOOL_CONFIG_POOL_NAME, + spa_load_name(spa)); fnvlist_add_uint64(config, ZPOOL_CONFIG_POOL_STATE, state); fnvlist_add_uint64(config, ZPOOL_CONFIG_TIMESTAMP, spa->spa_uberblock.ub_timestamp); @@ -7216,7 +7219,7 @@ spa_tryimport(nvlist_t *tryconfig) MAXPATHLEN); } else { (void) snprintf(dsname, MAXPATHLEN, - "%s/%s", poolname, ++cp); + "%s/%s", spa_load_name(spa), ++cp); } fnvlist_add_string(config, ZPOOL_CONFIG_BOOTFS, dsname); @@ -9560,7 +9563,7 @@ spa_async_dispatch(spa_t *spa) void spa_async_request(spa_t *spa, int task) { - zfs_dbgmsg("spa=%s async request task=%u", spa->spa_name, task); + zfs_dbgmsg("spa=%s async request task=%u", spa_load_name(spa), task); mutex_enter(&spa->spa_async_lock); spa->spa_async_tasks |= task; mutex_exit(&spa->spa_async_lock); diff --git a/module/zfs/spa_misc.c b/module/zfs/spa_misc.c index bbcbaafaa..6d99b628c 100644 --- a/module/zfs/spa_misc.c +++ b/module/zfs/spa_misc.c @@ -414,7 +414,7 @@ spa_load_failed(spa_t *spa, const char *fmt, ...) (void) vsnprintf(buf, sizeof (buf), fmt, adx); va_end(adx); - zfs_dbgmsg("spa_load(%s, config %s): FAILED: %s", spa->spa_name, + zfs_dbgmsg("spa_load(%s, config %s): FAILED: %s", spa_load_name(spa), spa->spa_trust_config ? "trusted" : "untrusted", buf); } @@ -428,7 +428,7 @@ spa_load_note(spa_t *spa, const char *fmt, ...) (void) vsnprintf(buf, sizeof (buf), fmt, adx); va_end(adx); - zfs_dbgmsg("spa_load(%s, config %s): %s", spa->spa_name, + zfs_dbgmsg("spa_load(%s, config %s): %s", spa_load_name(spa), spa->spa_trust_config ? "trusted" : "untrusted", buf); spa_import_progress_set_notes_nolog(spa, "%s", buf); @@ -902,6 +902,9 @@ spa_remove(spa_t *spa) if (spa->spa_root) spa_strfree(spa->spa_root); + if (spa->spa_load_name) + spa_strfree(spa->spa_load_name); + while ((dp = list_remove_head(&spa->spa_config_list)) != NULL) { if (dp->scd_path != NULL) spa_strfree(dp->scd_path); @@ -1818,6 +1821,19 @@ spa_name(spa_t *spa) return (spa->spa_name); } +char * +spa_load_name(spa_t *spa) +{ + /* + * During spa_tryimport() the pool name includes a unique prefix. + * Returns the original name which can be used for log messages. + */ + if (spa->spa_load_name) + return (spa->spa_load_name); + + return (spa->spa_name); +} + uint64_t spa_guid(spa_t *spa) { @@ -3141,6 +3157,7 @@ EXPORT_SYMBOL(spa_set_rootblkptr); EXPORT_SYMBOL(spa_altroot); EXPORT_SYMBOL(spa_sync_pass); EXPORT_SYMBOL(spa_name); +EXPORT_SYMBOL(spa_load_name); EXPORT_SYMBOL(spa_guid); EXPORT_SYMBOL(spa_last_synced_txg); EXPORT_SYMBOL(spa_first_txg); diff --git a/module/zfs/vdev_label.c b/module/zfs/vdev_label.c index 7e222eac5..f64c06912 100644 --- a/module/zfs/vdev_label.c +++ b/module/zfs/vdev_label.c @@ -1623,7 +1623,7 @@ vdev_uberblock_load(vdev_t *rvd, uberblock_t *ub, nvlist_t **config) */ if (cb.ubl_vd != NULL) { vdev_dbgmsg(cb.ubl_vd, "best uberblock found for spa %s. " - "txg %llu", spa->spa_name, (u_longlong_t)ub->ub_txg); + "txg %llu", spa_load_name(spa), (u_longlong_t)ub->ub_txg); if (ub->ub_raidz_reflow_info != cb.ubl_latest.ub_raidz_reflow_info) { @@ -1631,7 +1631,7 @@ vdev_uberblock_load(vdev_t *rvd, uberblock_t *ub, nvlist_t **config) "spa=%s best uberblock (txg=%llu info=0x%llx) " "has different raidz_reflow_info than latest " "uberblock (txg=%llu info=0x%llx)", - spa->spa_name, + spa_load_name(spa), (u_longlong_t)ub->ub_txg, (u_longlong_t)ub->ub_raidz_reflow_info, (u_longlong_t)cb.ubl_latest.ub_txg,