diff --git a/thin-provisioning/metadata.cc b/thin-provisioning/metadata.cc index 723a813..77e0428 100644 --- a/thin-provisioning/metadata.cc +++ b/thin-provisioning/metadata.cc @@ -112,12 +112,14 @@ metadata::metadata(block_manager<>::ptr bm, open_type ot, } } -metadata::metadata(block_manager<>::ptr bm) +metadata::metadata(block_manager<>::ptr bm, bool read_space_maps) { tm_ = open_tm(bm); sb_ = read_superblock(tm_->get_bm(), SUPERBLOCK_LOCATION); - open_space_maps(); + if (read_space_maps) + open_space_maps(); + open_btrees(); } diff --git a/thin-provisioning/metadata.h b/thin-provisioning/metadata.h index d020542..0af2e38 100644 --- a/thin-provisioning/metadata.h +++ b/thin-provisioning/metadata.h @@ -74,7 +74,7 @@ namespace thin_provisioning { // ii) Read the metadata snap as given in the superblock // iii) Read the metadata snap given on command line, checking it matches superblock. // - metadata(block_manager<>::ptr bm); // (i) + metadata(block_manager<>::ptr bm, bool read_space_maps = true); // (i) metadata(block_manager<>::ptr, boost::optional metadata_snap); // (ii) and (iii) diff --git a/thin-provisioning/thin_repair.cc b/thin-provisioning/thin_repair.cc index abae4ca..194f431 100644 --- a/thin-provisioning/thin_repair.cc +++ b/thin-provisioning/thin_repair.cc @@ -23,7 +23,7 @@ namespace { emitter::ptr e = create_restore_emitter(new_md); block_manager<>::ptr old_bm = open_bm(old_path, block_manager<>::READ_ONLY); - metadata::ptr old_md(new metadata(old_bm)); + metadata::ptr old_md(new metadata(old_bm, false)); // we don't need to read the space maps metadata_dump(old_md, e, true); } catch (std::exception &e) {