]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
os/bluestore: ExtentMap: count extents per Shard
authorSage Weil <sage@redhat.com>
Fri, 27 Jan 2017 16:47:11 +0000 (11:47 -0500)
committerSage Weil <sage@redhat.com>
Thu, 2 Feb 2017 15:12:08 +0000 (10:12 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index 1d66e7af7ebaa081209a1ee0ee98bbb701d2a2b8..264fb183090ae3d90487e55c036a1919b1c21228 100644 (file)
@@ -1803,9 +1803,8 @@ void BlueStore::ExtentMap::update(KeyValueDB::Transaction t,
        } else {
          endoff = n->offset;
        }
-       unsigned nn;
         bufferlist& bl = encoded_shards[pos].bl;
-       if (encode_some(p->offset, endoff - p->offset, bl, &nn)) {
+       if (encode_some(p->offset, endoff - p->offset, bl, &p->extents)) {
          if (!force) {
            return;
          }
@@ -2106,7 +2105,7 @@ bool BlueStore::ExtentMap::encode_some(
   return false;
 }
 
-void BlueStore::ExtentMap::decode_some(bufferlist& bl)
+unsigned BlueStore::ExtentMap::decode_some(bufferlist& bl)
 {
   /*
   derr << __func__ << ":";
@@ -2177,6 +2176,7 @@ void BlueStore::ExtentMap::decode_some(bufferlist& bl)
   }
 
   assert(n == num);
+  return num;
 }
 
 void BlueStore::ExtentMap::bound_encode_spanning_blobs(size_t& p)
@@ -2278,7 +2278,7 @@ void BlueStore::ExtentMap::fault_range(
           }
         }
       );
-      decode_some(v);
+      p->extents = decode_some(v);
       p->loaded = true;
       dout(20) << __func__ << " open shard 0x" << std::hex << p->offset
               << std::dec << " (" << v.length() << " bytes)" << dendl;
index 231c0231e46797e05ccb9c1153023fb713b1e55e..2c0af85a999f7c9f81da9a385402db66944a3140 100644 (file)
@@ -664,6 +664,7 @@ public:
     struct Shard {
       bluestore_onode_t::shard_info *shard_info;
       uint32_t offset = 0;   ///< starting logical offset
+      unsigned extents = 0;  ///< count extents in this shard
       bool loaded = false;   ///< true if shard is loaded
       bool dirty = false;    ///< true if shard is dirty and needs reencoding
     };
@@ -707,7 +708,7 @@ public:
 
     bool encode_some(uint32_t offset, uint32_t length, bufferlist& bl,
                     unsigned *pn);
-    void decode_some(bufferlist& bl);
+    unsigned decode_some(bufferlist& bl);
 
     void bound_encode_spanning_blobs(size_t& p);
     void encode_spanning_blobs(bufferlist::contiguous_appender& p);