]> git.proxmox.com Git - mirror_zfs.git/blobdiff - module/zfs/vdev.c
Fix "Detach spare vdev in case if resilvering does not happen"
[mirror_zfs.git] / module / zfs / vdev.c
index 7cf858c05051f18ceb1ad465e1604cc2fdbf79ef..241be8fd856c23e9bb67f3687e715d6863269ea6 100644 (file)
@@ -4183,9 +4183,19 @@ vdev_online(spa_t *spa, uint64_t guid, uint64_t flags, vdev_state_t *newstate)
 
        if (wasoffline ||
            (oldstate < VDEV_STATE_DEGRADED &&
-           vd->vdev_state >= VDEV_STATE_DEGRADED))
+           vd->vdev_state >= VDEV_STATE_DEGRADED)) {
                spa_event_notify(spa, vd, NULL, ESC_ZFS_VDEV_ONLINE);
 
+               /*
+                * Asynchronously detach spare vdev if resilver or
+                * rebuild is not required
+                */
+               if (vd->vdev_unspare &&
+                   !dsl_scan_resilvering(spa->spa_dsl_pool) &&
+                   !dsl_scan_resilver_scheduled(spa->spa_dsl_pool) &&
+                   !vdev_rebuild_active(tvd))
+                       spa_async_request(spa, SPA_ASYNC_DETACH_SPARE);
+       }
        return (spa_vdev_state_exit(spa, vd, 0));
 }