Loading fs_mgr/liblp/builder.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,19 @@ Partition::Partition(const std::string& name, const std::string& guid, uint32_t void Partition::AddExtent(std::unique_ptr<Extent>&& extent) { size_ += extent->num_sectors() * LP_SECTOR_SIZE; if (LinearExtent* new_extent = extent->AsLinearExtent()) { if (!extents_.empty() && extents_.back()->AsLinearExtent() && extents_.back()->AsLinearExtent()->end_sector() == new_extent->physical_sector()) { // If the previous extent can be merged into this new one, do so // to avoid creating unnecessary extents. LinearExtent* prev_extent = extents_.back()->AsLinearExtent(); extent = std::make_unique<LinearExtent>( prev_extent->num_sectors() + new_extent->num_sectors(), prev_extent->physical_sector()); extents_.pop_back(); } } extents_.push_back(std::move(extent)); } Loading fs_mgr/liblp/builder_test.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,11 @@ TEST(liblp, ResizePartition) { EXPECT_EQ(system->size(), 131072); EXPECT_EQ(system->extents().size(), 1); EXPECT_EQ(system->extents()[0]->num_sectors(), 131072 / LP_SECTOR_SIZE); // Test resizing again, that the extents are merged together. builder->ResizePartition(system, 1024 * 256); EXPECT_EQ(system->size(), 1024 * 256); EXPECT_EQ(system->extents().size(), 1); EXPECT_EQ(system->extents()[0]->num_sectors(), (1024 * 256) / LP_SECTOR_SIZE); // Test shrinking within the same extent. builder->ResizePartition(system, 32768); Loading fs_mgr/liblp/include/liblp/builder.h +1 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ class LinearExtent final : public Extent { LinearExtent* AsLinearExtent() override { return this; } uint64_t physical_sector() const { return physical_sector_; } uint64_t end_sector() const { return physical_sector_ + num_sectors_; } private: uint64_t physical_sector_; Loading Loading
fs_mgr/liblp/builder.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,19 @@ Partition::Partition(const std::string& name, const std::string& guid, uint32_t void Partition::AddExtent(std::unique_ptr<Extent>&& extent) { size_ += extent->num_sectors() * LP_SECTOR_SIZE; if (LinearExtent* new_extent = extent->AsLinearExtent()) { if (!extents_.empty() && extents_.back()->AsLinearExtent() && extents_.back()->AsLinearExtent()->end_sector() == new_extent->physical_sector()) { // If the previous extent can be merged into this new one, do so // to avoid creating unnecessary extents. LinearExtent* prev_extent = extents_.back()->AsLinearExtent(); extent = std::make_unique<LinearExtent>( prev_extent->num_sectors() + new_extent->num_sectors(), prev_extent->physical_sector()); extents_.pop_back(); } } extents_.push_back(std::move(extent)); } Loading
fs_mgr/liblp/builder_test.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,11 @@ TEST(liblp, ResizePartition) { EXPECT_EQ(system->size(), 131072); EXPECT_EQ(system->extents().size(), 1); EXPECT_EQ(system->extents()[0]->num_sectors(), 131072 / LP_SECTOR_SIZE); // Test resizing again, that the extents are merged together. builder->ResizePartition(system, 1024 * 256); EXPECT_EQ(system->size(), 1024 * 256); EXPECT_EQ(system->extents().size(), 1); EXPECT_EQ(system->extents()[0]->num_sectors(), (1024 * 256) / LP_SECTOR_SIZE); // Test shrinking within the same extent. builder->ResizePartition(system, 32768); Loading
fs_mgr/liblp/include/liblp/builder.h +1 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ class LinearExtent final : public Extent { LinearExtent* AsLinearExtent() override { return this; } uint64_t physical_sector() const { return physical_sector_; } uint64_t end_sector() const { return physical_sector_ + num_sectors_; } private: uint64_t physical_sector_; Loading