diff --git a/src/crimson/os/seastore/lba/lba_btree_node.h b/src/crimson/os/seastore/lba/lba_btree_node.h index f6dd325a8ba..9f6e1ed296a 100644 --- a/src/crimson/os/seastore/lba/lba_btree_node.h +++ b/src/crimson/os/seastore/lba/lba_btree_node.h @@ -357,7 +357,11 @@ struct LBALeafNode it++; continue; } else { - assert(child->_is_exist_clean() || child->_is_exist_mutation_pending()); + assert(child->_is_exist_clean() || + child->_is_exist_mutation_pending() || + // a pending child might have been invalidated and + // its corresponding mapping has not been removed + !child->_is_valid()); } } SUBTRACET(seastore_lba, "examing v2: {}~{}, v1: {}~{}", diff --git a/src/crimson/os/seastore/linked_tree_node.h b/src/crimson/os/seastore/linked_tree_node.h index f6dc6f828db..c9cf58902ba 100644 --- a/src/crimson/os/seastore/linked_tree_node.h +++ b/src/crimson/os/seastore/linked_tree_node.h @@ -215,9 +215,9 @@ public: virtual bool _is_mutable() const = 0; virtual bool _is_exist_clean() const = 0; virtual bool _is_exist_mutation_pending() const = 0; + virtual bool _is_valid() const = 0; protected: parent_tracker_ref parent_tracker; - virtual bool _is_valid() const = 0; virtual bool _is_stable() const = 0; template friend class ParentNode;