mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-26 04:07:45 +03:00
3090 vdev_reopen() during reguid causes vdev to be treated as corrupt 3102 vdev_uberblock_load() and vdev_validate() may read the wrong label Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: Christopher Siden <chris.siden@delphix.com> Reviewed by: Garrett D'Amore <garrett@damore.org> Approved by: Eric Schrock <Eric.Schrock@delphix.com> References: illumos/illumos-gate@dfbb943217 illumos changeset: 13777:b1e53580146d https://www.illumos.org/issues/3090 https://www.illumos.org/issues/3102 Ported-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #939
This commit is contained in:
committed by
Brian Behlendorf
parent
5ac0c30a94
commit
3bc7e0fb0f
+15
-2
@@ -1334,16 +1334,29 @@ spa_name(spa_t *spa)
|
||||
uint64_t
|
||||
spa_guid(spa_t *spa)
|
||||
{
|
||||
dsl_pool_t *dp = spa_get_dsl(spa);
|
||||
uint64_t guid;
|
||||
|
||||
/*
|
||||
* If we fail to parse the config during spa_load(), we can go through
|
||||
* the error path (which posts an ereport) and end up here with no root
|
||||
* vdev. We stash the original pool guid in 'spa_config_guid' to handle
|
||||
* this case.
|
||||
*/
|
||||
if (spa->spa_root_vdev != NULL)
|
||||
if (spa->spa_root_vdev == NULL)
|
||||
return (spa->spa_config_guid);
|
||||
|
||||
guid = spa->spa_last_synced_guid != 0 ?
|
||||
spa->spa_last_synced_guid : spa->spa_root_vdev->vdev_guid;
|
||||
|
||||
/*
|
||||
* Return the most recently synced out guid unless we're
|
||||
* in syncing context.
|
||||
*/
|
||||
if (dp && dsl_pool_sync_context(dp))
|
||||
return (spa->spa_root_vdev->vdev_guid);
|
||||
else
|
||||
return (spa->spa_config_guid);
|
||||
return (guid);
|
||||
}
|
||||
|
||||
uint64_t
|
||||
|
||||
Reference in New Issue
Block a user