]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.cc
update ceph source to reef 18.2.1
[ceph.git] / ceph / src / crimson / os / seastore / onode_manager / staged-fltree / fltree_onode_manager.cc
index 8d75f9fa837ce7f1c5a7c0f93e9fa727e7634c5d..bff27ab65178652c427f89a60584e4d1352ad7ce 100644 (file)
@@ -93,16 +93,19 @@ FLTreeOnodeManager::write_dirty_ret FLTreeOnodeManager::write_dirty(
 {
   return trans_intr::do_for_each(
     onodes,
-    [this, &trans](auto &onode) -> eagain_ifuture<> {
+    [&trans](auto &onode) -> eagain_ifuture<> {
+      if (!onode) {
+       return eagain_iertr::make_ready_future<>();
+      }
       auto &flonode = static_cast<FLTreeOnode&>(*onode);
+      if (!flonode.is_alive()) {
+       return eagain_iertr::make_ready_future<>();
+      }
       switch (flonode.status) {
       case FLTreeOnode::status_t::MUTATED: {
         flonode.populate_recorder(trans);
         return eagain_iertr::make_ready_future<>();
       }
-      case FLTreeOnode::status_t::DELETED: {
-        return tree.erase(trans, flonode);
-      }
       case FLTreeOnode::status_t::STABLE: {
         return eagain_iertr::make_ready_future<>();
       }
@@ -117,8 +120,12 @@ FLTreeOnodeManager::erase_onode_ret FLTreeOnodeManager::erase_onode(
   OnodeRef &onode)
 {
   auto &flonode = static_cast<FLTreeOnode&>(*onode);
+  assert(flonode.is_alive());
+  if (flonode.status == FLTreeOnode::status_t::MUTATED) {
+    flonode.populate_recorder(trans);
+  }
   flonode.mark_delete();
-  return erase_onode_iertr::now();
+  return tree.erase(trans, flonode);
 }
 
 FLTreeOnodeManager::list_onodes_ret FLTreeOnodeManager::list_onodes(