--- a/usr/src/uts/common/fs/zfs/spa.c Wed Feb 24 10:26:15 2010 -0800
+++ b/usr/src/uts/common/fs/zfs/spa.c Wed Feb 24 12:20:30 2010 -0800
@@ -4634,6 +4634,7 @@
boolean_t ispath)
{
vdev_t *vd;
+ boolean_t sync = B_FALSE;
spa_vdev_state_enter(spa, SCL_ALL);
@@ -4644,15 +4645,23 @@
return (spa_vdev_state_exit(spa, NULL, ENOTSUP));
if (ispath) {
- spa_strfree(vd->vdev_path);
- vd->vdev_path = spa_strdup(value);
+ if (strcmp(value, vd->vdev_path) != 0) {
+ spa_strfree(vd->vdev_path);
+ vd->vdev_path = spa_strdup(value);
+ sync = B_TRUE;
+ }
} else {
- if (vd->vdev_fru != NULL)
+ if (vd->vdev_fru == NULL) {
+ vd->vdev_fru = spa_strdup(value);
+ sync = B_TRUE;
+ } else if (strcmp(value, vd->vdev_fru) != 0) {
spa_strfree(vd->vdev_fru);
- vd->vdev_fru = spa_strdup(value);
+ vd->vdev_fru = spa_strdup(value);
+ sync = B_TRUE;
+ }
}
- return (spa_vdev_state_exit(spa, vd, 0));
+ return (spa_vdev_state_exit(spa, sync ? vd : NULL, 0));
}
int