From: Sage Weil Date: Fri, 27 Jan 2017 16:47:11 +0000 (-0500) Subject: os/bluestore: ExtentMap: count extents per Shard X-Git-Tag: v12.0.1~489^2~17 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8eb60c24f063082a8f6943db00c11b614992e678;p=ceph.git os/bluestore: ExtentMap: count extents per Shard Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 1d66e7af7eba..264fb183090a 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -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; diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 231c0231e467..2c0af85a999f 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -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);