]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: use Extent::assign_blob
authorSage Weil <sage@redhat.com>
Tue, 4 Oct 2016 14:59:15 +0000 (10:59 -0400)
committerSage Weil <sage@redhat.com>
Tue, 4 Oct 2016 14:59:15 +0000 (10:59 -0400)
More explicit, less error-prone.

Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index 6d73af922d56c4f868c2d5ed26f50d6cf82ac35d..7c48cdc5d8f005f82dd50b1aec2d8e529da5076e 100644 (file)
@@ -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);
index 744a43a6606e8ca7de00cdf0117ac8857f946e37..7266dc423fbd8876cd7c3074abebbec7874ad2a5 100644 (file)
@@ -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;