mmp: add spa_load_name() for tryimport

Tryimport adds a unique prefix to the pool name to avoid name
collisions.  This makes it awkward to log user-friendly info
during a tryimport.  Add a spa_load_name() function which can
be used to report the unmodified pool name.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Reviewed-by: Olaf Faaland <faaland1@llnl.gov>
Reviewed-by: Akash B <akash-b@hpe.com>
This commit is contained in:
Brian Behlendorf 2026-01-23 11:38:57 -08:00 committed by Tony Hutter
parent 62a1bf7d19
commit 2f048ced4d
5 changed files with 34 additions and 12 deletions

View File

@ -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 void spa_altroot(spa_t *, char *, size_t);
extern uint32_t spa_sync_pass(spa_t *spa); extern uint32_t spa_sync_pass(spa_t *spa);
extern char *spa_name(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_guid(spa_t *spa);
extern uint64_t spa_load_guid(spa_t *spa); extern uint64_t spa_load_guid(spa_t *spa);
extern uint64_t spa_last_synced_txg(spa_t *spa); extern uint64_t spa_last_synced_txg(spa_t *spa);

View File

@ -222,6 +222,7 @@ struct spa {
* Fields protected by spa_namespace_lock. * Fields protected by spa_namespace_lock.
*/ */
char spa_name[ZFS_MAX_DATASET_NAME_LEN]; /* pool name */ char spa_name[ZFS_MAX_DATASET_NAME_LEN]; /* pool name */
char *spa_load_name; /* unmodified pool name */
char *spa_comment; /* comment */ char *spa_comment; /* comment */
avl_node_t spa_avl; /* node in spa_namespace_avl */ avl_node_t spa_avl; /* node in spa_namespace_avl */
nvlist_t *spa_config; /* last synced config */ nvlist_t *spa_config; /* last synced config */

View File

@ -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) { if (spa->spa_import_flags & ZFS_IMPORT_SKIP_MMP) {
zfs_dbgmsg("mmp: skipping check ZFS_IMPORT_SKIP_MMP is set, " 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); 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) { if (ub->ub_mmp_magic == MMP_MAGIC && ub->ub_mmp_delay == 0) {
zfs_dbgmsg("mmp: skipping check: feature is disabled, " zfs_dbgmsg("mmp: skipping check: feature is disabled, "
"spa=%s", spa_name(spa)); "spa=%s", spa_load_name(spa));
return (B_FALSE); return (B_FALSE);
} }
@ -3795,7 +3795,7 @@ spa_activity_check_required(spa_t *spa, uberblock_t *ub, nvlist_t *label,
state == POOL_STATE_EXPORTED) { state == POOL_STATE_EXPORTED) {
zfs_dbgmsg("mmp: skipping check: hostid matches and pool is " zfs_dbgmsg("mmp: skipping check: hostid matches and pool is "
"exported, spa=%s, hostid=%llx", "exported, spa=%s, hostid=%llx",
spa_name(spa), (u_longlong_t)hostid); spa_load_name(spa), (u_longlong_t)hostid);
return (B_FALSE); return (B_FALSE);
} }
@ -7144,6 +7144,8 @@ spa_tryimport(nvlist_t *tryconfig)
spa_activate(spa, SPA_MODE_READ); spa_activate(spa, SPA_MODE_READ);
kmem_free(name, MAXPATHLEN); kmem_free(name, MAXPATHLEN);
spa->spa_load_name = spa_strdup(poolname);
/* /*
* Rewind pool if a max txg was provided. * 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_load_max_txg = policy.zlp_txg;
spa->spa_extreme_rewind = B_TRUE; spa->spa_extreme_rewind = B_TRUE;
zfs_dbgmsg("spa_tryimport: importing %s, max_txg=%lld", 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 { } 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) if (nvlist_lookup_string(tryconfig, ZPOOL_CONFIG_CACHEFILE, &cachefile)
@ -7182,7 +7184,8 @@ spa_tryimport(nvlist_t *tryconfig)
*/ */
if (spa->spa_root_vdev != NULL) { if (spa->spa_root_vdev != NULL) {
config = spa_config_generate(spa, NULL, -1ULL, B_TRUE); 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_POOL_STATE, state);
fnvlist_add_uint64(config, ZPOOL_CONFIG_TIMESTAMP, fnvlist_add_uint64(config, ZPOOL_CONFIG_TIMESTAMP,
spa->spa_uberblock.ub_timestamp); spa->spa_uberblock.ub_timestamp);
@ -7216,7 +7219,7 @@ spa_tryimport(nvlist_t *tryconfig)
MAXPATHLEN); MAXPATHLEN);
} else { } else {
(void) snprintf(dsname, MAXPATHLEN, (void) snprintf(dsname, MAXPATHLEN,
"%s/%s", poolname, ++cp); "%s/%s", spa_load_name(spa), ++cp);
} }
fnvlist_add_string(config, ZPOOL_CONFIG_BOOTFS, fnvlist_add_string(config, ZPOOL_CONFIG_BOOTFS,
dsname); dsname);
@ -9560,7 +9563,7 @@ spa_async_dispatch(spa_t *spa)
void void
spa_async_request(spa_t *spa, int task) 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); mutex_enter(&spa->spa_async_lock);
spa->spa_async_tasks |= task; spa->spa_async_tasks |= task;
mutex_exit(&spa->spa_async_lock); mutex_exit(&spa->spa_async_lock);

View File

@ -414,7 +414,7 @@ spa_load_failed(spa_t *spa, const char *fmt, ...)
(void) vsnprintf(buf, sizeof (buf), fmt, adx); (void) vsnprintf(buf, sizeof (buf), fmt, adx);
va_end(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); 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); (void) vsnprintf(buf, sizeof (buf), fmt, adx);
va_end(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->spa_trust_config ? "trusted" : "untrusted", buf);
spa_import_progress_set_notes_nolog(spa, "%s", buf); spa_import_progress_set_notes_nolog(spa, "%s", buf);
@ -902,6 +902,9 @@ spa_remove(spa_t *spa)
if (spa->spa_root) if (spa->spa_root)
spa_strfree(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) { while ((dp = list_remove_head(&spa->spa_config_list)) != NULL) {
if (dp->scd_path != NULL) if (dp->scd_path != NULL)
spa_strfree(dp->scd_path); spa_strfree(dp->scd_path);
@ -1818,6 +1821,19 @@ spa_name(spa_t *spa)
return (spa->spa_name); 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 uint64_t
spa_guid(spa_t *spa) spa_guid(spa_t *spa)
{ {
@ -3141,6 +3157,7 @@ EXPORT_SYMBOL(spa_set_rootblkptr);
EXPORT_SYMBOL(spa_altroot); EXPORT_SYMBOL(spa_altroot);
EXPORT_SYMBOL(spa_sync_pass); EXPORT_SYMBOL(spa_sync_pass);
EXPORT_SYMBOL(spa_name); EXPORT_SYMBOL(spa_name);
EXPORT_SYMBOL(spa_load_name);
EXPORT_SYMBOL(spa_guid); EXPORT_SYMBOL(spa_guid);
EXPORT_SYMBOL(spa_last_synced_txg); EXPORT_SYMBOL(spa_last_synced_txg);
EXPORT_SYMBOL(spa_first_txg); EXPORT_SYMBOL(spa_first_txg);

View File

@ -1623,7 +1623,7 @@ vdev_uberblock_load(vdev_t *rvd, uberblock_t *ub, nvlist_t **config)
*/ */
if (cb.ubl_vd != NULL) { if (cb.ubl_vd != NULL) {
vdev_dbgmsg(cb.ubl_vd, "best uberblock found for spa %s. " 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 != if (ub->ub_raidz_reflow_info !=
cb.ubl_latest.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) " "spa=%s best uberblock (txg=%llu info=0x%llx) "
"has different raidz_reflow_info than latest " "has different raidz_reflow_info than latest "
"uberblock (txg=%llu info=0x%llx)", "uberblock (txg=%llu info=0x%llx)",
spa->spa_name, spa_load_name(spa),
(u_longlong_t)ub->ub_txg, (u_longlong_t)ub->ub_txg,
(u_longlong_t)ub->ub_raidz_reflow_info, (u_longlong_t)ub->ub_raidz_reflow_info,
(u_longlong_t)cb.ubl_latest.ub_txg, (u_longlong_t)cb.ubl_latest.ub_txg,