Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

zpool_vdev_remove() should handle EALREADY error return #15129

Merged
merged 1 commit into from
Aug 1, 2023

Commits on Jul 31, 2023

  1. 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.
    
    Relevant bug:
    openzfs#15013
    
    Signed-off-by: Serapheim Dimitropoulos <[email protected]>
    Closes openzfs#15013
    sdimitro committed Jul 31, 2023
    Configuration menu
    Copy the full SHA
    eb733d3 View commit details
    Browse the repository at this point in the history