From: Sage Weil Date: Tue, 17 Jan 2017 15:25:34 +0000 (-0500) Subject: os/bluestore: drop useless count arg to allocate X-Git-Tag: v12.0.0~139^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f012481787c043c1a305b5232b4bf1ac988e3874;p=ceph.git os/bluestore: drop useless count arg to allocate The vector<> has a size. Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/Allocator.h b/src/os/bluestore/Allocator.h index 7cf64bf82f7..ed65d8dc783 100644 --- a/src/os/bluestore/Allocator.h +++ b/src/os/bluestore/Allocator.h @@ -37,11 +37,11 @@ public: */ virtual int64_t allocate(uint64_t want_size, uint64_t alloc_unit, uint64_t max_alloc_size, int64_t hint, - AllocExtentVector *extents, int *count) = 0; + AllocExtentVector *extents) = 0; int allocate(uint64_t want_size, uint64_t alloc_unit, - int64_t hint, AllocExtentVector *extents, int *count) { - return allocate(want_size, alloc_unit, want_size, hint, extents, count); + int64_t hint, AllocExtentVector *extents) { + return allocate(want_size, alloc_unit, want_size, hint, extents); } virtual int release( diff --git a/src/os/bluestore/BitMapAllocator.cc b/src/os/bluestore/BitMapAllocator.cc index 74e7c016abb..d666f8c93a8 100644 --- a/src/os/bluestore/BitMapAllocator.cc +++ b/src/os/bluestore/BitMapAllocator.cc @@ -110,7 +110,7 @@ void BitMapAllocator::unreserve(uint64_t unused) int64_t BitMapAllocator::allocate( uint64_t want_size, uint64_t alloc_unit, uint64_t max_alloc_size, - int64_t hint, mempool::bluestore_alloc::vector *extents, int *count) + int64_t hint, mempool::bluestore_alloc::vector *extents) { assert(!(alloc_unit % m_block_size)); @@ -125,23 +125,21 @@ int64_t BitMapAllocator::allocate( << dendl; return allocate_dis(want_size, alloc_unit / m_block_size, - max_alloc_size, hint / m_block_size, extents, count); + max_alloc_size, hint / m_block_size, extents); } int64_t BitMapAllocator::allocate_dis( uint64_t want_size, uint64_t alloc_unit, uint64_t max_alloc_size, - int64_t hint, mempool::bluestore_alloc::vector *extents, int *count) + int64_t hint, mempool::bluestore_alloc::vector *extents) { ExtentList block_list = ExtentList(extents, m_block_size, max_alloc_size); int64_t nblks = (want_size + m_block_size - 1) / m_block_size; int64_t num = 0; - *count = 0; num = m_bit_alloc->alloc_blocks_dis_res(nblks, alloc_unit, hint, &block_list); if (num == 0) { return -ENOSPC; } - *count = block_list.get_extent_count(); return num * m_block_size; } diff --git a/src/os/bluestore/BitMapAllocator.h b/src/os/bluestore/BitMapAllocator.h index 8e86a9c6ca1..e5b9ca6d6f0 100644 --- a/src/os/bluestore/BitMapAllocator.h +++ b/src/os/bluestore/BitMapAllocator.h @@ -23,8 +23,7 @@ class BitMapAllocator : public Allocator { int64_t allocate_dis( uint64_t want_size, uint64_t alloc_unit, uint64_t max_alloc_size, - int64_t hint, mempool::bluestore_alloc::vector *extents, - int *count); + int64_t hint, mempool::bluestore_alloc::vector *extents); public: BitMapAllocator(CephContext* cct, int64_t device_size, int64_t block_size); @@ -35,8 +34,7 @@ public: int64_t allocate( uint64_t want_size, uint64_t alloc_unit, uint64_t max_alloc_size, - int64_t hint, mempool::bluestore_alloc::vector *extents, - int *count); + int64_t hint, mempool::bluestore_alloc::vector *extents); int release( uint64_t offset, uint64_t length); diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index 601b77c1e81..065ab25c6ad 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -179,17 +179,16 @@ int BlueFS::reclaim_blocks(unsigned id, uint64_t want, assert(alloc[id]); int r = alloc[id]->reserve(want); assert(r == 0); // caller shouldn't ask for more than they can get - int count = 0; int64_t got = alloc[id]->allocate(want, cct->_conf->bluefs_alloc_size, 0, - extents, &count); + extents); assert(got > 0); if (got < (int64_t)want) alloc[id]->unreserve(want - got); - for (int i = 0; i < count; i++) { - block_all[id].erase((*extents)[i].offset, (*extents)[i].length); - block_total[id] -= (*extents)[i].length; - log_t.op_alloc_rm(id, (*extents)[i].offset, (*extents)[i].length); + for (auto& p : *extents) { + block_all[id].erase(p.offset, p.length); + block_total[id] -= p.length; + log_t.op_alloc_rm(id, p.offset, p.length); } r = _flush_and_sync_log(l); @@ -1765,10 +1764,9 @@ int BlueFS::_allocate(uint8_t id, uint64_t len, hint = ev->back().end(); } - int count = 0; AllocExtentVector extents; int64_t alloc_len = alloc[id]->allocate(left, min_alloc_size, hint, - &extents, &count); + &extents); if (alloc_len < (int64_t)left) { derr << __func__ << " allocate failed on 0x" << std::hex << left << " min_alloc_size 0x" << min_alloc_size << std::dec << dendl; @@ -1777,8 +1775,8 @@ int BlueFS::_allocate(uint8_t id, uint64_t len, return -ENOSPC; } - for (int i = 0; i < count; i++) { - bluefs_extent_t e = bluefs_extent_t(id, extents[i].offset, extents[i].length); + for (auto& p : extents) { + bluefs_extent_t e = bluefs_extent_t(id, p.offset, p.length); if (!ev->empty() && ev->back().bdev == e.bdev && ev->back().end() == (uint64_t) e.offset) { diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index b0a19b62042..5e3270a3633 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -3808,10 +3808,9 @@ int BlueStore::_balance_bluefs_freespace(PExtentVector *extents) int r = alloc->reserve(gift); assert(r == 0); - int count = 0; AllocExtentVector exts; int64_t alloc_len = alloc->allocate(gift, cct->_conf->bluefs_alloc_size, - 0, 0, &exts, &count); + 0, 0, &exts); if (alloc_len < (int64_t)gift) { derr << __func__ << " allocate failed on 0x" << std::hex << gift @@ -3820,10 +3819,8 @@ int BlueStore::_balance_bluefs_freespace(PExtentVector *extents) assert(0 == "allocate failed, wtf"); return -ENOSPC; } - assert(count > 0); - - for (int i = 0; i < count; i++) { - bluestore_pextent_t e = bluestore_pextent_t(exts[i]); + for (auto& p : exts) { + bluestore_pextent_t e = bluestore_pextent_t(p); dout(1) << __func__ << " gifting " << e << " to bluefs" << dendl; extents->push_back(e); } @@ -8107,10 +8104,9 @@ int BlueStore::_do_alloc_write( } } - int count = 0; AllocExtentVector extents; int64_t got = alloc->allocate(final_length, min_alloc_size, max_alloc_size, - hint, &extents, &count); + hint, &extents); assert(got == (int64_t)final_length); need -= got; txc->statfs_delta.allocated() += got; diff --git a/src/os/bluestore/StupidAllocator.cc b/src/os/bluestore/StupidAllocator.cc index cf7edcead8e..d32c878182a 100644 --- a/src/os/bluestore/StupidAllocator.cc +++ b/src/os/bluestore/StupidAllocator.cc @@ -206,8 +206,7 @@ int64_t StupidAllocator::allocate( uint64_t alloc_unit, uint64_t max_alloc_size, int64_t hint, - mempool::bluestore_alloc::vector *extents, - int *count) + mempool::bluestore_alloc::vector *extents) { uint64_t allocated_size = 0; uint64_t offset = 0; @@ -217,7 +216,6 @@ int64_t StupidAllocator::allocate( if (max_alloc_size == 0) { max_alloc_size = want_size; } - *count = 0; ExtentList block_list = ExtentList(extents, 1, max_alloc_size); @@ -235,7 +233,6 @@ int64_t StupidAllocator::allocate( hint = offset + length; } - *count = block_list.get_extent_count(); if (allocated_size == 0) { return -ENOSPC; } diff --git a/src/os/bluestore/StupidAllocator.h b/src/os/bluestore/StupidAllocator.h index 6a02993d671..ce8101a552d 100644 --- a/src/os/bluestore/StupidAllocator.h +++ b/src/os/bluestore/StupidAllocator.h @@ -33,8 +33,7 @@ public: int64_t allocate( uint64_t want_size, uint64_t alloc_unit, uint64_t max_alloc_size, - int64_t hint, mempool::bluestore_alloc::vector *extents, - int *count); + int64_t hint, mempool::bluestore_alloc::vector *extents); int64_t allocate_int( uint64_t want_size, uint64_t alloc_unit, int64_t hint, diff --git a/src/test/objectstore/Allocator_test.cc b/src/test/objectstore/Allocator_test.cc index df9363a3e1d..180ef95e260 100644 --- a/src/test/objectstore/Allocator_test.cc +++ b/src/test/objectstore/Allocator_test.cc @@ -52,18 +52,14 @@ TEST_P(AllocTest, test_alloc_min_alloc) { int64_t block_size = 1024; int64_t blocks = BitMapZone::get_total_blocks() * 2 * block_size; - int count = 0; - uint64_t alloc_len = 0; { init_alloc(blocks, block_size); alloc->init_add_free(block_size, block_size); EXPECT_EQ(alloc->reserve(block_size), 0); - AllocExtentVector extents = AllocExtentVector - (1, AllocExtent(0, 0)); - EXPECT_EQ(alloc->allocate(block_size, block_size, - 0, (int64_t) 0, &extents, &count, &alloc_len), 0); - EXPECT_EQ(alloc_len, (uint64_t) block_size); + AllocExtentVector extents; + EXPECT_EQ(block_size, alloc->allocate(block_size, block_size, + 0, (int64_t) 0, &extents)); } /* @@ -72,15 +68,12 @@ TEST_P(AllocTest, test_alloc_min_alloc) { alloc->init_add_free(0, block_size * 4); EXPECT_EQ(alloc->reserve(block_size * 4), 0); - AllocExtentVector extents = AllocExtentVector - (4, AllocExtent(0, 0)); - - EXPECT_EQ(alloc->allocate(4 * (uint64_t)block_size, (uint64_t) block_size, - 0, (int64_t) 0, &extents, &count, &alloc_len), 0); - EXPECT_EQ(alloc_len, 4 * (uint64_t) block_size); + AllocExtentVector extents; + EXPECT_EQ(4*block_size, + alloc->allocate(4 * (uint64_t)block_size, (uint64_t) block_size, + 0, (int64_t) 0, &extents)); + EXPECT_EQ(1u, extents.size()); EXPECT_EQ(extents[0].length, 4 * block_size); - EXPECT_EQ(0U, extents[1].length); - EXPECT_EQ(count, 1); } /* @@ -90,16 +83,14 @@ TEST_P(AllocTest, test_alloc_min_alloc) alloc->init_add_free(0, block_size * 2); alloc->init_add_free(3 * block_size, block_size * 2); EXPECT_EQ(alloc->reserve(block_size * 4), 0); - AllocExtentVector extents = AllocExtentVector - (4, AllocExtent(0, 0)); + AllocExtentVector extents; - EXPECT_EQ(alloc->allocate(4 * (uint64_t)block_size, (uint64_t) block_size, - 0, (int64_t) 0, &extents, &count, &alloc_len), 0); - EXPECT_EQ(alloc_len, 4 * (uint64_t) block_size); + EXPECT_EQ(4*block_size, + alloc->allocate(4 * (uint64_t)block_size, (uint64_t) block_size, + 0, (int64_t) 0, &extents)); + EXPECT_EQ(2u, extents.size()); EXPECT_EQ(extents[0].length, 2 * block_size); EXPECT_EQ(extents[1].length, 2 * block_size); - EXPECT_EQ(0U, extents[2].length); - EXPECT_EQ(count, 2); } alloc->shutdown(); } @@ -108,8 +99,6 @@ TEST_P(AllocTest, test_alloc_min_max_alloc) { int64_t block_size = 1024; int64_t blocks = BitMapZone::get_total_blocks() * 2 * block_size; - int count = 0; - uint64_t alloc_len = 0; init_alloc(blocks, block_size); @@ -120,16 +109,14 @@ TEST_P(AllocTest, test_alloc_min_max_alloc) { alloc->init_add_free(0, block_size * 4); EXPECT_EQ(alloc->reserve(block_size * 4), 0); - AllocExtentVector extents = AllocExtentVector - (4, AllocExtent(0, 0)); - - EXPECT_EQ(alloc->allocate(4 * (uint64_t)block_size, (uint64_t) block_size, - block_size, (int64_t) 0, &extents, &count, &alloc_len), 0); - EXPECT_EQ(alloc_len, 4 * (uint64_t) block_size); - for (int i = 0; i < 4; i++) { - EXPECT_EQ(extents[i].length, block_size); + AllocExtentVector extents; + EXPECT_EQ(4*block_size, + alloc->allocate(4 * (uint64_t)block_size, (uint64_t) block_size, + block_size, (int64_t) 0, &extents)); + for (auto e : extents) { + EXPECT_EQ(e.length, block_size); } - EXPECT_EQ(count, 4); + EXPECT_EQ(4u, extents.size()); } @@ -140,16 +127,14 @@ TEST_P(AllocTest, test_alloc_min_max_alloc) { alloc->init_add_free(0, block_size * 4); EXPECT_EQ(alloc->reserve(block_size * 4), 0); - AllocExtentVector extents = AllocExtentVector - (2, AllocExtent(0, 0)); - - EXPECT_EQ(alloc->allocate(4 * (uint64_t)block_size, (uint64_t) block_size, - 2 * block_size, (int64_t) 0, &extents, &count, &alloc_len), 0); - EXPECT_EQ(alloc_len, 4 * (uint64_t) block_size); - for (int i = 0; i < 2; i++) { - EXPECT_EQ(extents[i].length, block_size * 2); + AllocExtentVector extents; + EXPECT_EQ(4*block_size, + alloc->allocate(4 * (uint64_t)block_size, (uint64_t) block_size, + 2 * block_size, (int64_t) 0, &extents)); + EXPECT_EQ(2u, extents.size()); + for (auto& e : extents) { + EXPECT_EQ(e.length, block_size * 2); } - EXPECT_EQ(count, 2); } /* @@ -158,17 +143,15 @@ TEST_P(AllocTest, test_alloc_min_max_alloc) { alloc->init_add_free(0, block_size * 1024); EXPECT_EQ(alloc->reserve(block_size * 1024), 0); - AllocExtentVector extents = AllocExtentVector - (1024, AllocExtent(0, 0)); - - EXPECT_EQ(alloc->allocate(1024 * (uint64_t)block_size, (uint64_t) block_size * 4, - block_size * 4, (int64_t) 0, &extents, &count, &alloc_len), 0); - - EXPECT_EQ(alloc_len, 1024 * (uint64_t) block_size); - for (int i = 0; i < count; i++) { - EXPECT_EQ(extents[i].length, block_size * 4); + AllocExtentVector extents; + EXPECT_EQ(1024 * block_size, + alloc->allocate(1024 * (uint64_t)block_size, + (uint64_t) block_size * 4, + block_size * 4, (int64_t) 0, &extents)); + for (auto& e : extents) { + EXPECT_EQ(e.length, block_size * 4); } - EXPECT_EQ(count, 1024 / 4); + EXPECT_EQ(1024u/4, extents.size()); } /* @@ -177,16 +160,14 @@ TEST_P(AllocTest, test_alloc_min_max_alloc) { alloc->init_add_free(0, block_size * 16); EXPECT_EQ(alloc->reserve(block_size * 16), 0); - AllocExtentVector extents = AllocExtentVector - (8, AllocExtent(0, 0)); - - EXPECT_EQ(alloc->allocate(16 * (uint64_t)block_size, (uint64_t) block_size, - 2 * block_size, (int64_t) 0, &extents, &count, &alloc_len), 0); - - EXPECT_EQ(count, 8); - EXPECT_EQ(alloc_len, 16 * (uint64_t) block_size); - for (int i = 0; i < 8; i++) { - EXPECT_EQ(extents[i].length, 2 * block_size); + AllocExtentVector extents; + EXPECT_EQ(16 * block_size, + alloc->allocate(16 * (uint64_t)block_size, (uint64_t) block_size, + 2 * block_size, (int64_t) 0, &extents)); + + EXPECT_EQ(extents.size(), 8u); + for (auto& e : extents) { + EXPECT_EQ(e.length, 2 * block_size); } EXPECT_EQ(alloc->release_extents(&extents, count), 0); } @@ -196,8 +177,6 @@ TEST_P(AllocTest, test_alloc_failure) { int64_t block_size = 1024; int64_t blocks = BitMapZone::get_total_blocks() * block_size; - int count = 0; - uint64_t alloc_len = 0; init_alloc(blocks, block_size); { @@ -205,18 +184,18 @@ TEST_P(AllocTest, test_alloc_failure) alloc->init_add_free(block_size * 512, block_size * 256); EXPECT_EQ(alloc->reserve(block_size * 512), 0); - AllocExtentVector extents = AllocExtentVector - (4, AllocExtent(0, 0)); - - EXPECT_EQ(alloc->allocate(512 * (uint64_t)block_size, (uint64_t) block_size * 256, - block_size * 256, (int64_t) 0, &extents, &count, &alloc_len), 0); - EXPECT_EQ(512 * (uint64_t)block_size, alloc_len); + AllocExtentVector extents; + EXPECT_EQ(512 * block_size, + alloc->allocate(512 * (uint64_t)block_size, + (uint64_t) block_size * 256, + block_size * 256, (int64_t) 0, &extents)); alloc->init_add_free(0, block_size * 256); alloc->init_add_free(block_size * 512, block_size * 256); EXPECT_EQ(alloc->reserve(block_size * 512), 0); - EXPECT_EQ(alloc->allocate(512 * (uint64_t)block_size, (uint64_t) block_size * 512, - block_size * 512, (int64_t) 0, &extents, &count, &alloc_len), -ENOSPC); - EXPECT_EQ(alloc_len, (uint64_t) 0); + EXPECT_EQ(-ENOSPC, + alloc->allocate(512 * (uint64_t)block_size, + (uint64_t) block_size * 512, + block_size * 512, (int64_t) 0, &extents)); } } @@ -226,44 +205,39 @@ TEST_P(AllocTest, test_alloc_hint_bmap) return; } int64_t blocks = BitMapArea::get_level_factor(g_ceph_context, 2) * 4; - int count = 0; int64_t allocated = 0; int64_t zone_size = 1024; - uint64_t alloc_len = 0; - g_conf->set_val("bluestore_bitmapallocator_blocks_per_zone", std::to_string(zone_size)); + g_conf->set_val("bluestore_bitmapallocator_blocks_per_zone", + std::to_string(zone_size)); init_alloc(blocks, 1); alloc->init_add_free(0, blocks); - auto extents = AllocExtentVector - (zone_size * 4, AllocExtent(-1, -1)); + AllocExtentVector extents; alloc->reserve(blocks); - allocated = alloc->allocate(1, 1, 1, zone_size, &extents, &count, &alloc_len); - ASSERT_EQ(0, allocated); - ASSERT_EQ((uint64_t) 1, alloc_len); - ASSERT_EQ(1, count); + allocated = alloc->allocate(1, 1, 1, zone_size, &extents); + ASSERT_EQ(1, allocated); + ASSERT_EQ(1u, extents.size()); ASSERT_EQ(extents[0].offset, (uint64_t) zone_size); - allocated = alloc->allocate(1, 1, 1, zone_size * 2 - 1, &extents, &count, &alloc_len); - ASSERT_EQ((uint64_t) 1, alloc_len); - EXPECT_EQ(0, allocated); - ASSERT_EQ(1, count); + allocated = alloc->allocate(1, 1, 1, zone_size * 2 - 1, &extents); + EXPECT_EQ(1, allocated); + ASSERT_EQ(1u, extents.size()); EXPECT_EQ((int64_t) extents[0].offset, zone_size * 2 - 1); /* * Wrap around with hint */ - allocated = alloc->allocate(zone_size * 2, 1, 1, blocks - zone_size * 2, &extents, &count, &alloc_len); - EXPECT_EQ(0, allocated); - ASSERT_EQ((uint64_t) zone_size * 2, alloc_len); - EXPECT_EQ(zone_size * 2, count); + allocated = alloc->allocate(zone_size * 2, 1, 1, blocks - zone_size * 2, + &extents); + ASSERT_EQ(zone_size * 2, allocated); + EXPECT_EQ(zone_size * 2, (int)extents.size()); EXPECT_EQ((int64_t)extents[0].offset, blocks - zone_size * 2); - allocated = alloc->allocate(zone_size, 1, 1, blocks - zone_size, &extents, &count, &alloc_len); - EXPECT_EQ(0, allocated); - ASSERT_EQ((uint64_t) zone_size, alloc_len); - EXPECT_EQ(zone_size, count); + allocated = alloc->allocate(zone_size, 1, 1, blocks - zone_size, &extents); + ASSERT_EQ(zone_size, allocated); + EXPECT_EQ(zone_size, (int)extents.size()); EXPECT_EQ(extents[0].offset, (uint64_t) 0); }