usr/src/uts/common/fs/zfs/spa.c
changeset 11817 b27edb6d5047
parent 11810 0a50367f8035
child 11819 8b1fd81afb05
--- 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