]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/osd_type: get_clone_bytes - inline size() for overlapping size 17823/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Wed, 20 Sep 2017 03:13:42 +0000 (11:13 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Wed, 20 Sep 2017 03:31:35 +0000 (11:31 +0800)
This is faster and simpler. A similar issue can be found at:
https://github.com/ceph/ceph/pull/17807

Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/osd/osd_types.cc

index 7f10196aeb61ebdcc8efa4eae1643d962b5956ae..1c2c9b930e3c7b722b47c2cd5dc7bfb8b132510d 100644 (file)
@@ -4787,13 +4787,8 @@ uint64_t SnapSet::get_clone_bytes(snapid_t clone) const
   uint64_t size = clone_size.find(clone)->second;
   assert(clone_overlap.count(clone));
   const interval_set<uint64_t> &overlap = clone_overlap.find(clone)->second;
-  for (interval_set<uint64_t>::const_iterator i = overlap.begin();
-       i != overlap.end();
-       ++i) {
-    assert(size >= i.get_len());
-    size -= i.get_len();
-  }
-  return size;
+  assert(size >= (uint64_t)overlap.size());
+  return size - overlap.size();
 }
 
 void SnapSet::filter(const pg_pool_t &pinfo)