]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
os/bluestore: add blob_map to enode
authorSage Weil <sage@redhat.com>
Tue, 3 May 2016 20:22:56 +0000 (16:22 -0400)
committerSage Weil <sage@redhat.com>
Wed, 1 Jun 2016 15:38:42 +0000 (11:38 -0400)
We'll remove the old ref_map once the users go away.

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

index 98f811214a607584cb901a3265ffd644fabb4340..51b48de27cf469cd39028df9b82cd13c3724c365 100644 (file)
@@ -74,6 +74,7 @@ public:
     EnodeSet *enode_set;  ///< reference to the containing set
 
     bluestore_extent_ref_map_t ref_map;
+    bluestore_blob_map_t blob_map;
 
     Enode(uint32_t h, const string& k, EnodeSet *s)
       : nref(0),
@@ -86,6 +87,13 @@ public:
     }
     void put();
 
+    bluestore_blob_t *get_blob_ptr(int64_t id) {
+      bluestore_blob_map_t::iterator p = blob_map.find(id);
+      if (p == blob_map.end())
+       return nullptr;
+      return &p->second;
+    }
+
     friend void intrusive_ptr_add_ref(Enode *e) { e->get(); }
     friend void intrusive_ptr_release(Enode *e) { e->put(); }
 
@@ -147,6 +155,15 @@ public:
        exists(false) {
     }
 
+    bluestore_blob_t *get_blob_ptr(int64_t id) {
+      if (id < 0) {
+       assert(enode);
+       return enode->get_blob_ptr(-id);
+      } else {
+       return onode.get_blob_ptr(id);
+      }
+    }
+
     void flush();
     void get() {
       ++nref;
index 71c721bfd262e41681b462f8237023c91813d64a..21b78a38c0bf8c168c3e2697793fa4297ef47011 100644 (file)
@@ -518,6 +518,13 @@ struct bluestore_onode_t {
     return fp;
   }
 
+  bluestore_blob_t *get_blob_ptr(int64_t id) {
+    bluestore_blob_map_t::iterator p = blob_map.find(id);
+    if (p == blob_map.end())
+      return nullptr;
+    return &p->second;
+  }
+
   bool put_overlay_ref(uint64_t key) {
     map<uint64_t,uint16_t>::iterator q = overlay_refs.find(key);
     if (q == overlay_refs.end())