Skip to content

Commit

Permalink
Update vdev devid and physpath if changed between imports
Browse files Browse the repository at this point in the history
If devid or physpath for a vdev changes between imports, ensure it is
updated to the new value.

Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Alexander Motin <[email protected]>
Signed-off-by: Ameer Hamza <[email protected]>
Closes #15816
  • Loading branch information
ixhamza authored Jan 26, 2024
1 parent fb27698 commit aeb3377
Showing 1 changed file with 27 additions and 13 deletions.
40 changes: 27 additions & 13 deletions module/zfs/vdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -2493,22 +2493,36 @@ vdev_validate(vdev_t *vd)
}

static void
vdev_copy_path_impl(vdev_t *svd, vdev_t *dvd)
{
char *old, *new;
if (svd->vdev_path != NULL && dvd->vdev_path != NULL) {
if (strcmp(svd->vdev_path, dvd->vdev_path) != 0) {
zfs_dbgmsg("vdev_copy_path: vdev %llu: path changed "
"from '%s' to '%s'", (u_longlong_t)dvd->vdev_guid,
dvd->vdev_path, svd->vdev_path);
spa_strfree(dvd->vdev_path);
dvd->vdev_path = spa_strdup(svd->vdev_path);
vdev_update_path(const char *prefix, char *svd, char **dvd, uint64_t guid)
{
if (svd != NULL && *dvd != NULL) {
if (strcmp(svd, *dvd) != 0) {
zfs_dbgmsg("vdev_copy_path: vdev %llu: %s changed "
"from '%s' to '%s'", (u_longlong_t)guid, prefix,
*dvd, svd);
spa_strfree(*dvd);
*dvd = spa_strdup(svd);
}
} else if (svd->vdev_path != NULL) {
dvd->vdev_path = spa_strdup(svd->vdev_path);
} else if (svd != NULL) {
*dvd = spa_strdup(svd);
zfs_dbgmsg("vdev_copy_path: vdev %llu: path set to '%s'",
(u_longlong_t)dvd->vdev_guid, dvd->vdev_path);
(u_longlong_t)guid, *dvd);
}
}

static void
vdev_copy_path_impl(vdev_t *svd, vdev_t *dvd)
{
char *old, *new;

vdev_update_path("vdev_path", svd->vdev_path, &dvd->vdev_path,
dvd->vdev_guid);

vdev_update_path("vdev_devid", svd->vdev_devid, &dvd->vdev_devid,
dvd->vdev_guid);

vdev_update_path("vdev_physpath", svd->vdev_physpath,
&dvd->vdev_physpath, dvd->vdev_guid);

/*
* Our enclosure sysfs path may have changed between imports
Expand Down

0 comments on commit aeb3377

Please sign in to comment.