]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore/StupidAllocator: rounded down len to an align boundary 16593/head
authorZhu Shangzhong <zhu.shangzhong@zte.com.cn>
Wed, 26 Jul 2017 07:31:55 +0000 (15:31 +0800)
committerZhu Shangzhong <zhu.shangzhong@zte.com.cn>
Wed, 26 Jul 2017 07:54:57 +0000 (15:54 +0800)
Fixes: http://tracker.ceph.com/issues/20660
Signed-off-by: Zhu Shangzhong <zhu.shangzhong@zte.com.cn>
src/os/bluestore/StupidAllocator.cc
src/test/objectstore/Allocator_test.cc

index a16f47ad29b9896d8974222d71ab3b1adc12cd3c..a64df0458f61fb9251477bd1e4631318748c2243 100644 (file)
@@ -158,7 +158,7 @@ int64_t StupidAllocator::allocate_int(
   if (skew)
     skew = alloc_unit - skew;
   *offset = p.get_start() + skew;
-  *length = MIN(MAX(alloc_unit, want_size), p.get_len() - skew);
+  *length = MIN(MAX(alloc_unit, want_size), P2ALIGN((p.get_len() - skew), alloc_unit));
   if (cct->_conf->bluestore_debug_small_allocations) {
     uint64_t max =
       alloc_unit * (rand() % cct->_conf->bluestore_debug_small_allocations);
index 076297a2e731feb37330e3d06a41073ec70db424..a52fd53c3c6ba5d80a9d7809fa0af94bb6fa965e 100644 (file)
@@ -273,6 +273,23 @@ TEST_P(AllocTest, test_alloc_hint_bmap)
   EXPECT_EQ(1, (int)extents.size());
 }
 
+TEST_P(AllocTest, test_alloc_non_aligned_len)
+{
+  int64_t block_size = 1 << 12;
+  int64_t blocks = (1 << 20) * 100;
+  int64_t want_size = 1 << 22;
+  int64_t alloc_unit = 1 << 20;
+  
+  init_alloc(blocks*block_size, block_size);
+  alloc->init_add_free(0, 2097152);
+  alloc->init_add_free(2097152, 1064960);
+  alloc->init_add_free(3670016, 2097152);
+
+  EXPECT_EQ(0, alloc->reserve(want_size));
+  AllocExtentVector extents;
+  EXPECT_EQ(want_size, alloc->allocate(want_size, alloc_unit, 0, &extents));
+}
+
 
 INSTANTIATE_TEST_CASE_P(
   Allocator,