* Clears the resilver deferred flag on all leaf devs under vd. Returns * B_TRUE if we have devices that need to be resilvered and are available to * accept resilver I/Os. */
| 5063 | * accept resilver I/Os. |
| 5064 | */ |
| 5065 | boolean_t |
| 5066 | vdev_clear_resilver_deferred(vdev_t *vd, dmu_tx_t *tx) |
| 5067 | { |
| 5068 | boolean_t resilver_needed = B_FALSE; |
| 5069 | spa_t *spa = vd->vdev_spa; |
| 5070 | |
| 5071 | for (int c = 0; c < vd->vdev_children; c++) { |
| 5072 | vdev_t *cvd = vd->vdev_child[c]; |
| 5073 | resilver_needed |= vdev_clear_resilver_deferred(cvd, tx); |
| 5074 | } |
| 5075 | |
| 5076 | if (vd == spa->spa_root_vdev && |
| 5077 | spa_feature_is_active(spa, SPA_FEATURE_RESILVER_DEFER)) { |
| 5078 | spa_feature_decr(spa, SPA_FEATURE_RESILVER_DEFER, tx); |
| 5079 | vdev_config_dirty(vd); |
| 5080 | spa->spa_resilver_deferred = B_FALSE; |
| 5081 | return (resilver_needed); |
| 5082 | } |
| 5083 | |
| 5084 | if (!vdev_is_concrete(vd) || vd->vdev_aux || |
| 5085 | !vd->vdev_ops->vdev_op_leaf) |
| 5086 | return (resilver_needed); |
| 5087 | |
| 5088 | vd->vdev_resilver_deferred = B_FALSE; |
| 5089 | |
| 5090 | return (!vdev_is_dead(vd) && !vd->vdev_offline && |
| 5091 | vdev_resilver_needed(vd, NULL, NULL)); |
| 5092 | } |
| 5093 | |
| 5094 | boolean_t |
| 5095 | vdev_xlate_is_empty(range_seg64_t *rs) |
no test coverage detected