mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	zed: Prevent special vdev to be replaced by hot spare
Special vdevs should not be replaced by a hot spare. Log vdevs already support this, extending the functionality for special vdevs. Reviewed-by: Ryan Moeller <ryan@iXsystems.com> Reviewed-by: Tony Hutter <hutter2@llnl.gov> Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu> Reviewed-by: Alexander Motin <mav@FreeBSD.org> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ameer Hamza <ahamza@ixsystems.com> Closes #14129
This commit is contained in:
		
							parent
							
								
									cd1f023846
								
							
						
					
					
						commit
						ca3a675c74
					
				| @ -6772,10 +6772,12 @@ spa_vdev_attach(spa_t *spa, uint64_t guid, nvlist_t *nvroot, int replacing, | |||||||
| 		return (spa_vdev_exit(spa, newrootvd, txg, error)); | 		return (spa_vdev_exit(spa, newrootvd, txg, error)); | ||||||
| 
 | 
 | ||||||
| 	/*
 | 	/*
 | ||||||
| 	 * Spares can't replace logs | 	 * log, dedup and special vdevs should not be replaced by spares. | ||||||
| 	 */ | 	 */ | ||||||
| 	if (oldvd->vdev_top->vdev_islog && newvd->vdev_isspare) | 	if ((oldvd->vdev_top->vdev_alloc_bias != VDEV_BIAS_NONE || | ||||||
|  | 	    oldvd->vdev_top->vdev_islog) && newvd->vdev_isspare) { | ||||||
| 		return (spa_vdev_exit(spa, newrootvd, txg, ENOTSUP)); | 		return (spa_vdev_exit(spa, newrootvd, txg, ENOTSUP)); | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	/*
 | 	/*
 | ||||||
| 	 * A dRAID spare can only replace a child of its parent dRAID vdev. | 	 * A dRAID spare can only replace a child of its parent dRAID vdev. | ||||||
|  | |||||||
| @ -123,6 +123,11 @@ done | |||||||
| #    the removed data device | #    the removed data device | ||||||
| for conf in "${poolconfs[@]}" | for conf in "${poolconfs[@]}" | ||||||
| do | do | ||||||
|  | 	# special vdev can not be replaced by a hot spare | ||||||
|  | 	if [[ $conf = *"special mirror"* ]]; then | ||||||
|  | 		continue | ||||||
|  | 	fi | ||||||
|  | 
 | ||||||
| 	# 1. Create a pool with a spare | 	# 1. Create a pool with a spare | ||||||
| 	log_must zpool create -f $TESTPOOL $conf | 	log_must zpool create -f $TESTPOOL $conf | ||||||
| 	block_device_wait ${DEV_DSKDIR}/${removedev} | 	block_device_wait ${DEV_DSKDIR}/${removedev} | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Ameer Hamza
						Ameer Hamza