MCPcopy Create free account
hub / github.com/F-Stack/f-stack / vdev_clear_resilver_deferred

Function vdev_clear_resilver_deferred

freebsd/contrib/openzfs/module/zfs/vdev.c:5065–5092  ·  view source on GitHub ↗

* 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. */

Source from the content-addressed store, hash-verified

5063 * accept resilver I/Os.
5064 */
5065boolean_t
5066vdev_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
5094boolean_t
5095vdev_xlate_is_empty(range_seg64_t *rs)

Callers 1

dsl_scan_doneFunction · 0.85

Calls 6

spa_feature_is_activeFunction · 0.85
spa_feature_decrFunction · 0.85
vdev_config_dirtyFunction · 0.85
vdev_is_concreteFunction · 0.85
vdev_is_deadFunction · 0.85
vdev_resilver_neededFunction · 0.85

Tested by

no test coverage detected