mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
Rescan enclosure sysfs path on import
When you create a pool, zfs writes vd->vdev_enc_sysfs_path with the
enclosure sysfs path to the fault LEDs, like:
vdev_enc_sysfs_path = /sys/class/enclosure/0:0:1:0/SLOT8
However, this enclosure path doesn't get updated on successive imports
even if enclosure path to the disk changes. This patch fixes the issue.
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tony Hutter <hutter2@llnl.gov>
Closes #11950
Closes #12095
This commit is contained in:
@@ -2374,6 +2374,7 @@ 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 "
|
||||
@@ -2387,6 +2388,29 @@ vdev_copy_path_impl(vdev_t *svd, vdev_t *dvd)
|
||||
zfs_dbgmsg("vdev_copy_path: vdev %llu: path set to '%s'",
|
||||
(u_longlong_t)dvd->vdev_guid, dvd->vdev_path);
|
||||
}
|
||||
|
||||
/*
|
||||
* Our enclosure sysfs path may have changed between imports
|
||||
*/
|
||||
old = dvd->vdev_enc_sysfs_path;
|
||||
new = svd->vdev_enc_sysfs_path;
|
||||
if ((old != NULL && new == NULL) ||
|
||||
(old == NULL && new != NULL) ||
|
||||
((old != NULL && new != NULL) && strcmp(new, old) != 0)) {
|
||||
zfs_dbgmsg("vdev_copy_path: vdev %llu: vdev_enc_sysfs_path "
|
||||
"changed from '%s' to '%s'", (u_longlong_t)dvd->vdev_guid,
|
||||
old, new);
|
||||
|
||||
if (dvd->vdev_enc_sysfs_path)
|
||||
spa_strfree(dvd->vdev_enc_sysfs_path);
|
||||
|
||||
if (svd->vdev_enc_sysfs_path) {
|
||||
dvd->vdev_enc_sysfs_path = spa_strdup(
|
||||
svd->vdev_enc_sysfs_path);
|
||||
} else {
|
||||
dvd->vdev_enc_sysfs_path = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user