mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Storage device expansion "silently" fails on degraded vdev
When a vdev is degraded or faulted, we refuse to expand it when doing online -e. However, we also don't actually cause the online command to fail, even though the disk didn't expand. This is confusing and misleading, and can result in violated expectations. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Matthew Ahrens <mahrens@delphix.com> Reviewed-by: Mark Maybee <mark.maybee@delphix.com> Signed-off-by: Paul Dagnelie <pcd@delphix.com> Closes 14145
This commit is contained in:
		
							parent
							
								
									6ec3abcb59
								
							
						
					
					
						commit
						e2a96aa4eb
					
				| @ -6933,6 +6933,17 @@ zpool_do_online(int argc, char **argv) | |||||||
| 		return (1); | 		return (1); | ||||||
| 
 | 
 | ||||||
| 	for (i = 1; i < argc; i++) { | 	for (i = 1; i < argc; i++) { | ||||||
|  | 		vdev_state_t oldstate; | ||||||
|  | 		boolean_t avail_spare, l2cache; | ||||||
|  | 		nvlist_t *tgt = zpool_find_vdev(zhp, argv[i], &avail_spare, | ||||||
|  | 		    &l2cache, NULL); | ||||||
|  | 		if (tgt == NULL) { | ||||||
|  | 			ret = 1; | ||||||
|  | 			continue; | ||||||
|  | 		} | ||||||
|  | 		uint_t vsc; | ||||||
|  | 		oldstate = ((vdev_stat_t *)fnvlist_lookup_uint64_array(tgt, | ||||||
|  | 		    ZPOOL_CONFIG_VDEV_STATS, &vsc))->vs_state; | ||||||
| 		if (zpool_vdev_online(zhp, argv[i], flags, &newstate) == 0) { | 		if (zpool_vdev_online(zhp, argv[i], flags, &newstate) == 0) { | ||||||
| 			if (newstate != VDEV_STATE_HEALTHY) { | 			if (newstate != VDEV_STATE_HEALTHY) { | ||||||
| 				(void) printf(gettext("warning: device '%s' " | 				(void) printf(gettext("warning: device '%s' " | ||||||
| @ -6946,6 +6957,17 @@ zpool_do_online(int argc, char **argv) | |||||||
| 					(void) printf(gettext("use 'zpool " | 					(void) printf(gettext("use 'zpool " | ||||||
| 					    "replace' to replace devices " | 					    "replace' to replace devices " | ||||||
| 					    "that are no longer present\n")); | 					    "that are no longer present\n")); | ||||||
|  | 				if ((flags & ZFS_ONLINE_EXPAND)) { | ||||||
|  | 					(void) printf(gettext("%s: failed " | ||||||
|  | 					    "to expand usable space on " | ||||||
|  | 					    "unhealthy device '%s'\n"), | ||||||
|  | 					    (oldstate >= VDEV_STATE_DEGRADED ? | ||||||
|  | 					    "error" : "warning"), argv[i]); | ||||||
|  | 					if (oldstate >= VDEV_STATE_DEGRADED) { | ||||||
|  | 						ret = 1; | ||||||
|  | 						break; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
| 			} | 			} | ||||||
| 		} else { | 		} else { | ||||||
| 			ret = 1; | 			ret = 1; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Paul Dagnelie
						Paul Dagnelie