]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
bluestore/BitAllocator: fix stats of concurrent scans
authorxie xingguo <xie.xingguo@zte.com.cn>
Sat, 4 Jun 2016 02:58:31 +0000 (10:58 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Sat, 4 Jun 2016 03:42:33 +0000 (11:42 +0800)
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/os/bluestore/BitAllocator.cc

index 4895dba5bf948c1f97d9a7b978665044aac037ae..d15f698d17e2921545edfd311fcd8528941c127d 100644 (file)
@@ -1393,14 +1393,15 @@ int64_t BitAllocator::alloc_blocks_res(int64_t num_blocks, int64_t *start_block)
   lock_shared();
   serial_lock();
 
-  while (scans && !allocated) {
-    allocated = alloc_blocks_int(false, true, num_blocks, start_block);
-    scans --;
-  }
   if (is_stats_on()) {
     m_stats->add_concurrent_scans(scans);
   }
 
+  while (scans && !allocated) {
+    allocated = alloc_blocks_int(false, true, num_blocks, start_block);
+    scans--;
+  }
+
   if (!allocated) {
     /*
      * Could not find anything in two scans.
@@ -1447,13 +1448,14 @@ int64_t BitAllocator::alloc_blocks(int64_t num_blocks, int64_t *start_block)
     m_stats->add_allocated(num_blocks);
   }
 
+  if (is_stats_on()) {
+    m_stats->add_concurrent_scans(scans);
+  }
+
   while (scans && !allocated) {
     allocated = alloc_blocks_int(false, true,  num_blocks, start_block);
     scans--;
   }
-  if (is_stats_on()) {
-    m_stats->add_concurrent_scans(scans);
-  }
 
   if (!allocated) {
     /*
@@ -1547,13 +1549,13 @@ int64_t BitAllocator::alloc_blocks_dis(int64_t num_blocks, int64_t *block_list)
     goto exit;
   }
 
+  if (is_stats_on()) {
+    m_stats->add_concurrent_scans(scans);
+  }
 
   while (scans && allocated < num_blocks) {
     allocated += alloc_blocks_dis_int(false, num_blocks, blk_off, &block_list[allocated]);
-    scans --;
-  }
-  if (is_stats_on()) {
-    m_stats->add_concurrent_scans(scans);
+    scans--;
   }
 
   if (allocated < num_blocks) {