]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: Don't pollute old journal when add new device 34795/head
authorYang Honggang <yanghonggang@kuaishou.com>
Thu, 26 Mar 2020 17:11:55 +0000 (17:11 +0000)
committerNathan Cutler <ncutler@suse.com>
Tue, 28 Apr 2020 17:17:03 +0000 (19:17 +0200)
Fixes: https://tracker.ceph.com/issues/44774
Signed-off-by: Yang Honggang <yanghonggang@kuaishou.com>
(cherry picked from commit ade4d46981e660c8d57cec64180b5afa4561b945)

src/os/bluestore/BlueFS.cc
src/os/bluestore/BlueFS.h
src/os/bluestore/BlueStore.cc

index 16a5b223f5613ca9562522ad5f3b99a75b81d1eb..239b71f9c098ed5e2215645a2c497edd5f89ba0f 100644 (file)
@@ -309,10 +309,12 @@ uint64_t BlueFS::get_block_device_size(unsigned id)
   return 0;
 }
 
-void BlueFS::_add_block_extent(unsigned id, uint64_t offset, uint64_t length)
+void BlueFS::_add_block_extent(unsigned id, uint64_t offset, uint64_t length,
+                               bool skip)
 {
   dout(1) << __func__ << " bdev " << id
          << " 0x" << std::hex << offset << "~" << length << std::dec
+         << " skip " << skip
          << dendl;
 
   ceph_assert(id < bdev.size());
@@ -321,7 +323,9 @@ void BlueFS::_add_block_extent(unsigned id, uint64_t offset, uint64_t length)
   block_all[id].insert(offset, length);
 
   if (id < alloc.size() && alloc[id]) {
-    log_t.op_alloc_add(id, offset, length);
+    if (!skip)
+      log_t.op_alloc_add(id, offset, length);
+
     alloc[id]->init_add_free(offset, length);
   }
 
index 8045f39c44963fa4e343195f32cdbf5c08e4a619..e3588bfd5c0636610639b0fc9ae14f7a36378e5e 100644 (file)
@@ -431,7 +431,8 @@ private:
     return 4096;
   }
 
-  void _add_block_extent(unsigned bdev, uint64_t offset, uint64_t len);
+  void _add_block_extent(unsigned bdev, uint64_t offset, uint64_t len,
+                         bool skip=false);
 
 public:
   BlueFS(CephContext* cct);
@@ -534,9 +535,10 @@ public:
   uint64_t get_block_device_size(unsigned bdev);
 
   /// gift more block space
-  void add_block_extent(unsigned bdev, uint64_t offset, uint64_t len) {
+  void add_block_extent(unsigned bdev, uint64_t offset, uint64_t len,
+                        bool skip=false) {
     std::unique_lock l(lock);
-    _add_block_extent(bdev, offset, len);
+    _add_block_extent(bdev, offset, len, skip);
     int r = _flush_and_sync_log(l);
     ceph_assert(r == 0);
   }
index 14c20bc016988af1bb57cdd9186aefa01a82a700..2f3278aeef96f51f397e8d1065fccd2f03f05154 100644 (file)
@@ -6565,7 +6565,7 @@ int BlueStore::add_new_bluefs_device(int id, const string& dev_path)
   bluefs->add_block_extent(
     id,
     reserved,
-    bluefs->get_block_device_size(id) - reserved);
+    bluefs->get_block_device_size(id) - reserved, true);
 
   r = bluefs->prepare_new_device(id, bluefs_layout);
   ceph_assert(r == 0);