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 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);

View File

@ -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 */

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) {
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);

View File

@ -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);

View File

@ -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,