mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	zpool_vdev_remove() should handle EALREADY error return
When the vdev properties features was merged an extra check
was added in `spa_vdev_remove_top_check()` which checked
whether the vdev that we want to remove is already being
removed and if so return an EALREADY error.
```
static int
spa_vdev_remove_top_check(vdev_t *vd)
{
	... <snip> ...
	/*
	 * This device is already being removed
	 */
	if (vd->vdev_removing)
		return (SET_ERROR(EALREADY));
```
Before that change we'd still fail with an error but it
was a more generic one - here is the check that failed
later in the same function:
```
	/*
	 * There can not be a removal in progress.
	 */
	if (spa->spa_removing_phys.sr_state == DSS_SCANNING)
		return (SET_ERROR(EBUSY));
```
Changing the error code returned from that function changed
the behavior of the removal's library interface exposed to
the userland - `spa_vdev_remove()` now returns `EZFS_UNKNOWN`
instead of `EZFS_EBUSY` that was returning before.
This patch adds logic to make `spa_vdev_remove()` mindful
of the new EALREADY code and propagating `EZFS_EBUSY`
reverting to the previously established semantics of that
function.
Reviewed-by: Mark Maybee <mark.maybee@delphix.com>
Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Signed-off-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Closes #15013
Closes #15129
			
			
This commit is contained in:
		
							parent
							
								
									bd1eab16eb
								
							
						
					
					
						commit
						0ae7bfc0a4
					
				| @ -3926,6 +3926,12 @@ zpool_vdev_remove(zpool_handle_t *zhp, const char *path) | ||||
| 
 | ||||
| 	switch (errno) { | ||||
| 
 | ||||
| 	case EALREADY: | ||||
| 		zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, | ||||
| 		    "removal for this vdev is already in progress.")); | ||||
| 		(void) zfs_error(hdl, EZFS_BUSY, errbuf); | ||||
| 		break; | ||||
| 
 | ||||
| 	case EINVAL: | ||||
| 		zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, | ||||
| 		    "invalid config; all top-level vdevs must " | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Serapheim Dimitropoulos
						Serapheim Dimitropoulos