]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: make the BitMapAllocator aware about bulk releases.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Sun, 10 Sep 2017 11:58:02 +0000 (13:58 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Fri, 29 Sep 2017 15:09:29 +0000 (17:09 +0200)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/os/bluestore/Allocator.h
src/os/bluestore/BitMapAllocator.cc
src/os/bluestore/BitMapAllocator.h

index 62850c4fa602d4d00b0dbc41736c4bb19ee28db4..c32b33c0c17ef70c7c73097251d14c8dea162cd8 100644 (file)
@@ -48,15 +48,7 @@ public:
 
   /* Bulk release. Implementations may override this method to handle the whole
    * set at once. This could save e.g. unnecessary mutex dance. */
-  virtual void release(const interval_set<uint64_t>& release_set) {
-    /* TODO(rzarzynski): make this pure virtual and eradicate the single-op
-     * release() after switching all allocators. */
-    for (interval_set<uint64_t>::const_iterator p = release_set.begin();
-        p != release_set.end();
-        ++p) {
-      release(p.get_start(), p.get_len());
-    }
-  }
+  virtual void release(const interval_set<uint64_t>& release_set) = 0;
 
   virtual void dump() = 0;
 
index f2a16d8c900435d053759fd7bfb6acbe98402c8c..d63804a56fd4322ab957954ced9bdb5e2f60c6de 100644 (file)
@@ -154,6 +154,21 @@ void BitMapAllocator::release(
   insert_free(offset, length);
 }
 
+void BitMapAllocator::release(
+  const interval_set<uint64_t>& release_set)
+{
+  for (interval_set<uint64_t>::const_iterator p = release_set.begin();
+       p != release_set.end();
+       ++p) {
+    const auto offset = p.get_start();
+    const auto length = p.get_len();
+    dout(10) << __func__ << " 0x"
+             << std::hex << offset << "~" << length << std::dec
+             << dendl;
+    insert_free(offset, length);
+  }
+}
+
 uint64_t BitMapAllocator::get_free()
 {
   assert(m_bit_alloc->total_blocks() >= m_bit_alloc->get_used_blocks());
index a39751d4cf6ad55e7bdf8ece26221d62d3d8f6c3..36483705db0c1e52a06086b21deed55d59ddb66d 100644 (file)
@@ -37,6 +37,8 @@ public:
 
   void release(
     uint64_t offset, uint64_t length) override;
+  void release(
+    const interval_set<uint64_t>& release_set) override;
 
   uint64_t get_free() override;