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

Function zdb_claim_removing

freebsd/contrib/openzfs/cmd/zdb/zdb.c:5404–5447  ·  view source on GitHub ↗

* After accounting for all allocated blocks that are directly referenced, * we might have missed a reference to a block from a partially complete * (and thus unused) indirect mapping object. We perform a secondary pass * through the metaslabs we have already mapped and claim the destination * blocks. */

Source from the content-addressed store, hash-verified

5402 * blocks.
5403 */
5404static void
5405zdb_claim_removing(spa_t *spa, zdb_cb_t *zcb)
5406{
5407 if (dump_opt['L'])
5408 return;
5409
5410 if (spa->spa_vdev_removal == NULL)
5411 return;
5412
5413 spa_config_enter(spa, SCL_CONFIG, FTAG, RW_READER);
5414
5415 spa_vdev_removal_t *svr = spa->spa_vdev_removal;
5416 vdev_t *vd = vdev_lookup_top(spa, svr->svr_vdev_id);
5417 vdev_indirect_mapping_t *vim = vd->vdev_indirect_mapping;
5418
5419 ASSERT0(range_tree_space(svr->svr_allocd_segs));
5420
5421 range_tree_t *allocs = range_tree_create(NULL, RANGE_SEG64, NULL, 0, 0);
5422 for (uint64_t msi = 0; msi < vd->vdev_ms_count; msi++) {
5423 metaslab_t *msp = vd->vdev_ms[msi];
5424
5425 ASSERT0(range_tree_space(allocs));
5426 if (msp->ms_sm != NULL)
5427 VERIFY0(space_map_load(msp->ms_sm, allocs, SM_ALLOC));
5428 range_tree_vacate(allocs, range_tree_add, svr->svr_allocd_segs);
5429 }
5430 range_tree_destroy(allocs);
5431
5432 iterate_through_spacemap_logs(spa, load_unflushed_svr_segs_cb, svr);
5433
5434 /*
5435 * Clear everything past what has been synced,
5436 * because we have not allocated mappings for
5437 * it yet.
5438 */
5439 range_tree_clear(svr->svr_allocd_segs,
5440 vdev_indirect_mapping_max_offset(vim),
5441 vd->vdev_asize - vdev_indirect_mapping_max_offset(vim));
5442
5443 zcb->zcb_removing_size += range_tree_space(svr->svr_allocd_segs);
5444 range_tree_vacate(svr->svr_allocd_segs, claim_segment_cb, vd);
5445
5446 spa_config_exit(spa, SCL_CONFIG, FTAG);
5447}
5448
5449/* ARGSUSED */
5450static int

Callers 1

dump_block_statsFunction · 0.85

Calls 11

spa_config_enterFunction · 0.85
vdev_lookup_topFunction · 0.85
range_tree_spaceFunction · 0.85
range_tree_createFunction · 0.85
space_map_loadFunction · 0.85
range_tree_vacateFunction · 0.85
range_tree_destroyFunction · 0.85
range_tree_clearFunction · 0.85
spa_config_exitFunction · 0.85

Tested by

no test coverage detected