]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: simplify SharedBlob::put_ref interface
authorIgor Fedotov <ifedotov@suse.com>
Wed, 27 Dec 2017 20:05:45 +0000 (23:05 +0300)
committerIgor Fedotov <ifedotov@suse.com>
Wed, 21 Feb 2018 12:56:32 +0000 (15:56 +0300)
Signed-off-by: Igor Fedotov <ifedotov@suse.com>
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index ecd0a1bca71cfdc02486312d7f75d2a3c01407e5..b2625476147be7ddf401fe8b6c17e87ba6db8b35 100644 (file)
@@ -1691,14 +1691,11 @@ void BlueStore::SharedBlob::get_ref(uint64_t offset, uint32_t length)
 
 void BlueStore::SharedBlob::put_ref(uint64_t offset, uint32_t length,
                                    PExtentVector *r,
-                                   set<SharedBlob*> *maybe_unshared)
+                                   bool *unshare)
 {
   assert(persistent);
-  bool maybe = false;
-  persistent->ref_map.put(offset, length, r, maybe_unshared ? &maybe : nullptr);
-  if (maybe_unshared && maybe) {
-    maybe_unshared->insert(this);
-  }
+  persistent->ref_map.put(offset, length, r,
+    unshare && !*unshare ? unshare : nullptr);
 }
 
 // SharedBlobSet
@@ -10267,10 +10264,17 @@ void BlueStore::_wctx_finish(
       if (blob.is_shared()) {
        PExtentVector final;
         c->load_shared_blob(b->shared_blob);
+       bool unshare = false;
+       bool* unshare_ptr =
+         !maybe_unshared_blobs || b->is_referenced() ? nullptr : &unshare;
        for (auto e : r) {
          b->shared_blob->put_ref(
            e.offset, e.length, &final,
-           b->is_referenced() ? nullptr : maybe_unshared_blobs);
+           unshare_ptr);
+       }
+       if (unshare) {
+         assert(maybe_unshared_blobs);
+         maybe_unshared_blobs->insert(b->shared_blob.get());
        }
        dout(20) << __func__ << "  shared_blob release " << final
                 << " from " << *b->shared_blob << dendl;
index 9bdb12c17116b8be3823f63be77756905e9a1c44..746bdc97a8d16232e04500c6f5df5d8c3d4c5040 100644 (file)
@@ -402,7 +402,7 @@ public:
 
     /// put logical references, and get back any released extents
     void put_ref(uint64_t offset, uint32_t length,
-                PExtentVector *r, set<SharedBlob*> *maybe_unshared_blobs);
+                PExtentVector *r, bool *unshare);
 
     friend bool operator==(const SharedBlob &l, const SharedBlob &r) {
       return l.get_sbid() == r.get_sbid();