]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: extend bluestore_blob_t interface to be able to use external ref_map...
authorIgor Fedotov <ifedotov@mirantis.com>
Tue, 28 Jun 2016 12:49:29 +0000 (15:49 +0300)
committerIgor Fedotov <ifedotov@mirantis.com>
Mon, 18 Jul 2016 16:06:35 +0000 (19:06 +0300)
Signed-off-by: Igor Fedotov <ifedotov@mirantis.com>
src/os/bluestore/bluestore_types.cc
src/os/bluestore/bluestore_types.h

index 48ff4ec06bbeb82450b52e58b58d466663c6dc22..33de6d98dffa5dafb5f77d582156e20421861ed9 100644 (file)
@@ -556,13 +556,29 @@ void bluestore_blob_t::get_ref(
   ref_map.get(offset, length);
 }
 
-void bluestore_blob_t::put_ref(
+bool bluestore_blob_t::put_ref(
   uint64_t offset,
   uint64_t length,
   uint64_t min_release_size,
   vector<bluestore_pextent_t> *r)
 {
   assert(has_refmap());
+  return put_ref_external(
+    ref_map,
+    offset,
+    length,
+    min_release_size,
+    r);
+}
+
+
+bool bluestore_blob_t::put_ref_external(
+  bluestore_extent_ref_map_t& ref_map,
+  uint64_t offset,
+  uint64_t length,
+  uint64_t min_release_size,
+  vector<bluestore_pextent_t> *r)
+{
   vector<bluestore_pextent_t> logical;
   ref_map.put(offset, length, &logical);
 
@@ -580,12 +596,12 @@ void bluestore_blob_t::put_ref(
     extents.resize(1);
     extents[0].offset = bluestore_pextent_t::INVALID_OFFSET;
     extents[0].length = pos;
-    return;
+    return true;
   }
 
   // we cannot do partial deallocation on compressed blobs
   if (has_flag(FLAG_COMPRESSED)) {
-    return;
+    return false;
   }
 
   // we cannot release something smaller than our csum chunk size
@@ -675,6 +691,7 @@ void bluestore_blob_t::put_ref(
     vb.flush();
     extents.swap(vb.v);
   }
+  return false;
 }
 
 void bluestore_blob_t::calc_csum(uint64_t b_off, const bufferlist& bl)
index f2e2ed70eb171f86f1c285ebb556e4b5f05adb7f..0948e937650f43b8f1f7b314afe7051e9131ea68 100644 (file)
@@ -389,8 +389,12 @@ struct bluestore_blob_t {
   /// get logical references
   void get_ref(uint64_t offset, uint64_t length);
   /// put logical references, and get back any released extents
-  void put_ref(uint64_t offset, uint64_t length, uint64_t min_alloc_size,
-              vector<bluestore_pextent_t> *r);
+  bool put_ref(uint64_t offset, uint64_t length,  uint64_t min_alloc_size,
+              vector<bluestore_pextent_t> *r);
+  /// put logical references using external ref_map, and get back any released extents
+  bool put_ref_external( bluestore_extent_ref_map_t& ref_map,
+               uint64_t offset, uint64_t length,  uint64_t min_alloc_size,
+               vector<bluestore_pextent_t> *r);
 
   void map(uint64_t x_off, uint64_t x_len,
           std::function<void(uint64_t,uint64_t)> f) const {