mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-03-10 20:36:21 +03:00
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:
parent
62a1bf7d19
commit
2f048ced4d
@ -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);
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user