Add path handling for aux vdevs in `label_path`
If the AUX vdev is added using UUID, importing the pool falls back AUX vdev to open it with disk name instead of UUID due to the absence of path information for AUX vdevs. Since AUX label now have path information, this PR adds path handling for it in `label_path`. Reviewed-by: Umer Saleem <usaleem@ixsystems.com> Reviewed-by: Alexander Motin <mav@FreeBSD.org> Signed-off-by: Ameer Hamza <ahamza@ixsystems.com> Closes #15737
This commit is contained in:
parent
2df2a58dc1
commit
b64be1624c
|
@ -1221,13 +1221,26 @@ label_paths(libpc_handle_t *hdl, nvlist_t *label, const char **path,
|
|||
nvlist_t *nvroot;
|
||||
uint64_t pool_guid;
|
||||
uint64_t vdev_guid;
|
||||
uint64_t state;
|
||||
|
||||
*path = NULL;
|
||||
*devid = NULL;
|
||||
if (nvlist_lookup_uint64(label, ZPOOL_CONFIG_GUID, &vdev_guid) != 0)
|
||||
return (ENOENT);
|
||||
|
||||
/*
|
||||
* In case of spare or l2cache, we directly return path/devid from the
|
||||
* label.
|
||||
*/
|
||||
if (!(nvlist_lookup_uint64(label, ZPOOL_CONFIG_POOL_STATE, &state)) &&
|
||||
(state == POOL_STATE_SPARE || state == POOL_STATE_L2CACHE)) {
|
||||
(void) nvlist_lookup_string(label, ZPOOL_CONFIG_PATH, path);
|
||||
(void) nvlist_lookup_string(label, ZPOOL_CONFIG_DEVID, devid);
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (nvlist_lookup_nvlist(label, ZPOOL_CONFIG_VDEV_TREE, &nvroot) ||
|
||||
nvlist_lookup_uint64(label, ZPOOL_CONFIG_POOL_GUID, &pool_guid) ||
|
||||
nvlist_lookup_uint64(label, ZPOOL_CONFIG_GUID, &vdev_guid))
|
||||
nvlist_lookup_uint64(label, ZPOOL_CONFIG_POOL_GUID, &pool_guid))
|
||||
return (ENOENT);
|
||||
|
||||
return (label_paths_impl(hdl, nvroot, pool_guid, vdev_guid, path,
|
||||
|
|
Loading…
Reference in New Issue