Skip to content

Commit

Permalink
Add path handling for aux vdevs in label_path
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Alexander Motin <[email protected]>
Signed-off-by: Ameer Hamza <[email protected]>
Closes openzfs#15737
  • Loading branch information
ixhamza committed Sep 29, 2024
1 parent 834dc26 commit 3e5f774
Showing 1 changed file with 15 additions and 2 deletions.
17 changes: 15 additions & 2 deletions lib/libzutil/zutil_import.c
Original file line number Diff line number Diff line change
Expand Up @@ -1194,13 +1194,26 @@ label_paths(libpc_handle_t *hdl, nvlist_t *label, char **path, char **devid)
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,
Expand Down

0 comments on commit 3e5f774

Please sign in to comment.