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

Function vdev_dtl_load

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

Source from the content-addressed store, hash-verified

2970}
2971
2972int
2973vdev_dtl_load(vdev_t *vd)
2974{
2975 spa_t *spa = vd->vdev_spa;
2976 objset_t *mos = spa->spa_meta_objset;
2977 range_tree_t *rt;
2978 int error = 0;
2979
2980 if (vd->vdev_ops->vdev_op_leaf && vd->vdev_dtl_object != 0) {
2981 ASSERT(vdev_is_concrete(vd));
2982
2983 error = space_map_open(&vd->vdev_dtl_sm, mos,
2984 vd->vdev_dtl_object, 0, -1ULL, 0);
2985 if (error)
2986 return (error);
2987 ASSERT(vd->vdev_dtl_sm != NULL);
2988
2989 rt = range_tree_create(NULL, RANGE_SEG64, NULL, 0, 0);
2990 error = space_map_load(vd->vdev_dtl_sm, rt, SM_ALLOC);
2991 if (error == 0) {
2992 mutex_enter(&vd->vdev_dtl_lock);
2993 range_tree_walk(rt, range_tree_add,
2994 vd->vdev_dtl[DTL_MISSING]);
2995 mutex_exit(&vd->vdev_dtl_lock);
2996 }
2997
2998 range_tree_vacate(rt, NULL, NULL);
2999 range_tree_destroy(rt);
3000
3001 return (error);
3002 }
3003
3004 for (int c = 0; c < vd->vdev_children; c++) {
3005 error = vdev_dtl_load(vd->vdev_child[c]);
3006 if (error != 0)
3007 break;
3008 }
3009
3010 return (error);
3011}
3012
3013static void
3014vdev_zap_allocation_data(vdev_t *vd, dmu_tx_t *tx)

Callers 2

vdev_createFunction · 0.85
vdev_loadFunction · 0.85

Calls 9

vdev_is_concreteFunction · 0.85
space_map_openFunction · 0.85
range_tree_createFunction · 0.85
space_map_loadFunction · 0.85
mutex_enterFunction · 0.85
range_tree_walkFunction · 0.85
mutex_exitFunction · 0.85
range_tree_vacateFunction · 0.85
range_tree_destroyFunction · 0.85

Tested by

no test coverage detected