From 8eb60c24f063082a8f6943db00c11b614992e678 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 27 Jan 2017 11:47:11 -0500 Subject: [PATCH] os/bluestore: ExtentMap: count extents per Shard Signed-off-by: Sage Weil --- src/os/bluestore/BlueStore.cc | 8 ++++---- src/os/bluestore/BlueStore.h | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 1d66e7af7ebaa..264fb183090ae 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 231c0231e4679..2c0af85a999f7 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); -- 2.39.5