From: Sage Weil Date: Tue, 4 Oct 2016 14:59:15 +0000 (-0400) Subject: os/bluestore: use Extent::assign_blob X-Git-Tag: v11.0.1~25^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=304a3b1bf8c2c557b5cb99d3ed58d8c6775297f4;p=ceph.git os/bluestore: use Extent::assign_blob More explicit, less error-prone. Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 6d73af922d56..7c48cdc5d8f0 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -1694,7 +1694,7 @@ void BlueStore::ExtentMap::decode_some(bufferlist& bl) uint64_t prev_len = 0; unsigned n = 0; while (!p.end()) { - Extent *le = new Extent(onode->c->cache); + Extent *le = new Extent(); uint64_t blobid; small_decode_varint(blobid, p); if ((blobid & BLOBID_FLAG_CONTIGUOUS) == 0) { @@ -1719,14 +1719,14 @@ void BlueStore::ExtentMap::decode_some(bufferlist& bl) le->blob_depth = 1; } if (blobid & BLOBID_FLAG_SPANNING) { - le->blob = get_spanning_blob(blobid >> BLOBID_SHIFT_BITS); + le->assign_blob(get_spanning_blob(blobid >> BLOBID_SHIFT_BITS)); } else { blobid >>= BLOBID_SHIFT_BITS; if (blobid) { - le->blob = blobs[blobid - 1]; + le->assign_blob(blobs[blobid - 1]); assert(le->blob); } else { - le->blob = new Blob(); + le->assign_blob(new Blob()); le->blob->decode(p); blobs[n] = le->blob; onode->c->open_shared_blob(le->blob); diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 744a43a6606e..7266dc423fbd 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -524,15 +524,12 @@ public: /// ctor for lookup only explicit Extent(uint32_t lo) : logical_offset(lo) { } /// ctor for delayed intitialization (see decode_some()) - explicit Extent(Cache *cache) { - cache->add_extent(); + explicit Extent() { } /// ctor for general usage Extent(uint32_t lo, uint32_t o, uint32_t l, uint8_t bd, BlobRef& b) - : logical_offset(lo), blob_offset(o), length(l), blob_depth(bd), blob(b) { - if (blob) { - blob->shared_blob->bc.cache->add_extent(); - } + : logical_offset(lo), blob_offset(o), length(l), blob_depth(bd) { + assign_blob(b); } ~Extent() { if (blob) { @@ -540,6 +537,12 @@ public: } } + void assign_blob(const BlobRef& b) { + assert(!blob); + blob = b; + blob->shared_blob->bc.cache->add_extent(); + } + // comparators for intrusive_set friend bool operator<(const Extent &a, const Extent &b) { return a.logical_offset < b.logical_offset;