root_block.cc
lba_manager.cc
async_cleaner.cc
+ btree/btree_types.cc
backref_manager.cc
- backref/backref_tree_node.cc
backref/btree_backref_manager.cc
lba_manager/btree/btree_lba_manager.cc
lba_manager/btree/lba_btree_node.cc
+++ /dev/null
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#include "crimson/os/seastore/backref/backref_tree_node.h"
-
-namespace crimson::os::seastore::backref {
-
-std::ostream& operator<<(std::ostream &out, const backref_map_val_t& val) {
- return out << "backref_map_val_t("
- << val.laddr
- << "~" << val.len << ")";
-}
-
-} // namespace crimson::os::seastore::backref
using BackrefNode = FixedKVNode<paddr_t>;
-struct backref_map_val_t {
- extent_len_t len = 0; ///< length of extents
- laddr_t laddr = L_ADDR_MIN; ///< logical address of extents
- extent_types_t type = extent_types_t::ROOT;
-
- backref_map_val_t() = default;
- backref_map_val_t(
- extent_len_t len,
- laddr_t laddr,
- extent_types_t type)
- : len(len), laddr(laddr), type(type) {}
-
- bool operator==(const backref_map_val_t& rhs) const noexcept {
- return len == rhs.len && laddr == rhs.laddr;
- }
-};
-
-std::ostream& operator<<(std::ostream &out, const backref_map_val_t& val);
-
-struct __attribute__((packed)) backref_map_val_le_t {
- extent_len_le_t len = init_extent_len_le(0);
- laddr_le_t laddr = laddr_le_t(L_ADDR_MIN);
- extent_types_le_t type = 0;
-
- backref_map_val_le_t() = default;
- backref_map_val_le_t(const backref_map_val_le_t &) = default;
- explicit backref_map_val_le_t(const backref_map_val_t &val)
- : len(init_extent_len_le(val.len)),
- laddr(val.laddr),
- type(extent_types_le_t(val.type)) {}
-
- operator backref_map_val_t() const {
- return backref_map_val_t{len, laddr, (extent_types_t)type};
- }
-};
-
class BackrefInternalNode
: public FixedKVInternalNode<
INTERNAL_NODE_CAPACITY,
#pragma once
-#include "crimson/os/seastore/btree/btree_range_pin.h"
+#include "crimson/os/seastore/btree/btree_types.h"
namespace crimson::os::seastore {
+++ /dev/null
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#pragma once
-
-#include <boost/intrusive/set.hpp>
-
-#include "crimson/common/log.h"
-
-#include "crimson/os/seastore/cached_extent.h"
-#include "crimson/os/seastore/seastore_types.h"
-#include "crimson/os/seastore/transaction.h"
-
-namespace crimson::os::seastore {
-class Cache;
-
-struct op_context_t {
- Cache &cache;
- Transaction &trans;
-};
-
-constexpr uint16_t MAX_FIXEDKVBTREE_DEPTH = 8;
-
-template <typename bound_t>
-struct fixed_kv_node_meta_t {
- bound_t begin = min_max_t<bound_t>::min;
- bound_t end = min_max_t<bound_t>::min;
- depth_t depth = 0;
-
- bool is_parent_of(const fixed_kv_node_meta_t &other) const {
- return (depth == other.depth + 1) &&
- (begin <= other.begin) &&
- (end > other.begin);
- }
-
- bool is_in_range(const bound_t key) const {
- return begin <= key && end > key;
- }
-
- std::pair<fixed_kv_node_meta_t, fixed_kv_node_meta_t> split_into(bound_t pivot) const {
- return std::make_pair(
- fixed_kv_node_meta_t{begin, pivot, depth},
- fixed_kv_node_meta_t{pivot, end, depth});
- }
-
- static fixed_kv_node_meta_t merge_from(
- const fixed_kv_node_meta_t &lhs, const fixed_kv_node_meta_t &rhs) {
- ceph_assert(lhs.depth == rhs.depth);
- return fixed_kv_node_meta_t{lhs.begin, rhs.end, lhs.depth};
- }
-
- static std::pair<fixed_kv_node_meta_t, fixed_kv_node_meta_t>
- rebalance(const fixed_kv_node_meta_t &lhs, const fixed_kv_node_meta_t &rhs, bound_t pivot) {
- ceph_assert(lhs.depth == rhs.depth);
- return std::make_pair(
- fixed_kv_node_meta_t{lhs.begin, pivot, lhs.depth},
- fixed_kv_node_meta_t{pivot, rhs.end, lhs.depth});
- }
-
- bool is_root() const {
- return begin == min_max_t<bound_t>::min && end == min_max_t<bound_t>::max;
- }
-};
-
-template <typename bound_t>
-inline std::ostream &operator<<(
- std::ostream &lhs,
- const fixed_kv_node_meta_t<bound_t> &rhs)
-{
- return lhs << "btree_node_meta_t("
- << "begin=" << rhs.begin
- << ", end=" << rhs.end
- << ", depth=" << rhs.depth
- << ")";
-}
-
-/**
- * fixed_kv_node_meta_le_t
- *
- * On disk layout for fixed_kv_node_meta_t
- */
-template <typename bound_le_t>
-struct __attribute__((packed)) fixed_kv_node_meta_le_t {
- bound_le_t begin = bound_le_t(0);
- bound_le_t end = bound_le_t(0);
- depth_le_t depth = init_depth_le(0);
-
- fixed_kv_node_meta_le_t() = default;
- fixed_kv_node_meta_le_t(
- const fixed_kv_node_meta_le_t<bound_le_t> &) = default;
- explicit fixed_kv_node_meta_le_t(
- const fixed_kv_node_meta_t<typename bound_le_t::orig_type> &val)
- : begin(val.begin),
- end(val.end),
- depth(init_depth_le(val.depth)) {}
-
- operator fixed_kv_node_meta_t<typename bound_le_t::orig_type>() const {
- return fixed_kv_node_meta_t<typename bound_le_t::orig_type>{
- begin, end, depth };
- }
-};
-
-}
--- /dev/null
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include "crimson/os/seastore/btree/btree_types.h"
+
+namespace crimson::os::seastore {
+
+namespace lba_manager::btree {
+
+std::ostream& operator<<(std::ostream& out, const lba_map_val_t& v)
+{
+ return out << "lba_map_val_t("
+ << v.pladdr
+ << "~0x" << std::hex << v.len
+ << ", checksum=0x" << v.checksum
+ << ", refcount=" << std::dec << v.refcount
+ << ")";
+}
+
+} // namespace lba_manager::btree
+
+namespace backref {
+
+std::ostream& operator<<(std::ostream &out, const backref_map_val_t& val) {
+ return out << "backref_map_val_t("
+ << val.laddr
+ << "~0x" << std::hex << val.len << std::dec
+ << ")";
+}
+
+} // namespace backref
+} // namespace crimson::os::seastore
--- /dev/null
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#pragma once
+
+#include <boost/intrusive/set.hpp>
+
+#include "crimson/common/log.h"
+
+#include "crimson/os/seastore/cached_extent.h"
+#include "crimson/os/seastore/seastore_types.h"
+#include "crimson/os/seastore/transaction.h"
+
+namespace crimson::os::seastore {
+class Cache;
+
+struct op_context_t {
+ Cache &cache;
+ Transaction &trans;
+};
+
+constexpr uint16_t MAX_FIXEDKVBTREE_DEPTH = 8;
+
+template <typename bound_t>
+struct fixed_kv_node_meta_t {
+ bound_t begin = min_max_t<bound_t>::min;
+ bound_t end = min_max_t<bound_t>::min;
+ depth_t depth = 0;
+
+ bool is_parent_of(const fixed_kv_node_meta_t &other) const {
+ return (depth == other.depth + 1) &&
+ (begin <= other.begin) &&
+ (end > other.begin);
+ }
+
+ bool is_in_range(const bound_t key) const {
+ return begin <= key && end > key;
+ }
+
+ std::pair<fixed_kv_node_meta_t, fixed_kv_node_meta_t> split_into(bound_t pivot) const {
+ return std::make_pair(
+ fixed_kv_node_meta_t{begin, pivot, depth},
+ fixed_kv_node_meta_t{pivot, end, depth});
+ }
+
+ static fixed_kv_node_meta_t merge_from(
+ const fixed_kv_node_meta_t &lhs, const fixed_kv_node_meta_t &rhs) {
+ ceph_assert(lhs.depth == rhs.depth);
+ return fixed_kv_node_meta_t{lhs.begin, rhs.end, lhs.depth};
+ }
+
+ static std::pair<fixed_kv_node_meta_t, fixed_kv_node_meta_t>
+ rebalance(const fixed_kv_node_meta_t &lhs, const fixed_kv_node_meta_t &rhs, bound_t pivot) {
+ ceph_assert(lhs.depth == rhs.depth);
+ return std::make_pair(
+ fixed_kv_node_meta_t{lhs.begin, pivot, lhs.depth},
+ fixed_kv_node_meta_t{pivot, rhs.end, lhs.depth});
+ }
+
+ bool is_root() const {
+ return begin == min_max_t<bound_t>::min && end == min_max_t<bound_t>::max;
+ }
+};
+
+template <typename bound_t>
+inline std::ostream &operator<<(
+ std::ostream &lhs,
+ const fixed_kv_node_meta_t<bound_t> &rhs)
+{
+ return lhs << "btree_node_meta_t("
+ << "begin=" << rhs.begin
+ << ", end=" << rhs.end
+ << ", depth=" << rhs.depth
+ << ")";
+}
+
+/**
+ * fixed_kv_node_meta_le_t
+ *
+ * On disk layout for fixed_kv_node_meta_t
+ */
+template <typename bound_le_t>
+struct __attribute__((packed)) fixed_kv_node_meta_le_t {
+ bound_le_t begin = bound_le_t(0);
+ bound_le_t end = bound_le_t(0);
+ depth_le_t depth = init_depth_le(0);
+
+ fixed_kv_node_meta_le_t() = default;
+ fixed_kv_node_meta_le_t(
+ const fixed_kv_node_meta_le_t<bound_le_t> &) = default;
+ explicit fixed_kv_node_meta_le_t(
+ const fixed_kv_node_meta_t<typename bound_le_t::orig_type> &val)
+ : begin(val.begin),
+ end(val.end),
+ depth(init_depth_le(val.depth)) {}
+
+ operator fixed_kv_node_meta_t<typename bound_le_t::orig_type>() const {
+ return fixed_kv_node_meta_t<typename bound_le_t::orig_type>{
+ begin, end, depth };
+ }
+};
+
+namespace lba_manager::btree {
+
+/**
+ * lba_map_val_t
+ *
+ * struct representing a single lba mapping
+ */
+struct lba_map_val_t {
+ extent_len_t len = 0; ///< length of mapping
+ pladdr_t pladdr; ///< direct addr of mapping or
+ // laddr of a direct lba mapping(see btree_lba_manager.h)
+ extent_ref_count_t refcount = 0; ///< refcount
+ checksum_t checksum = 0; ///< checksum of original block written at paddr (TODO)
+
+ lba_map_val_t() = default;
+ lba_map_val_t(
+ extent_len_t len,
+ pladdr_t pladdr,
+ extent_ref_count_t refcount,
+ checksum_t checksum)
+ : len(len), pladdr(pladdr), refcount(refcount), checksum(checksum) {}
+ bool operator==(const lba_map_val_t&) const = default;
+};
+
+std::ostream& operator<<(std::ostream& out, const lba_map_val_t&);
+
+/**
+ * lba_map_val_le_t
+ *
+ * On disk layout for lba_map_val_t.
+ */
+struct __attribute__((packed)) lba_map_val_le_t {
+ extent_len_le_t len = init_extent_len_le(0);
+ pladdr_le_t pladdr;
+ extent_ref_count_le_t refcount{0};
+ checksum_le_t checksum{0};
+
+ lba_map_val_le_t() = default;
+ lba_map_val_le_t(const lba_map_val_le_t &) = default;
+ explicit lba_map_val_le_t(const lba_map_val_t &val)
+ : len(init_extent_len_le(val.len)),
+ pladdr(pladdr_le_t(val.pladdr)),
+ refcount(val.refcount),
+ checksum(val.checksum) {}
+
+ operator lba_map_val_t() const {
+ return lba_map_val_t{ len, pladdr, refcount, checksum };
+ }
+};
+
+} // namespace lba_manager::btree
+
+namespace backref {
+
+struct backref_map_val_t {
+ extent_len_t len = 0; ///< length of extents
+ laddr_t laddr = L_ADDR_MIN; ///< logical address of extents
+ extent_types_t type = extent_types_t::NONE;
+
+ backref_map_val_t() = default;
+ backref_map_val_t(
+ extent_len_t len,
+ laddr_t laddr,
+ extent_types_t type)
+ : len(len), laddr(laddr), type(type) {}
+
+ bool operator==(const backref_map_val_t& rhs) const noexcept {
+ return len == rhs.len && laddr == rhs.laddr;
+ }
+};
+
+std::ostream& operator<<(std::ostream &out, const backref_map_val_t& val);
+
+struct __attribute__((packed)) backref_map_val_le_t {
+ extent_len_le_t len = init_extent_len_le(0);
+ laddr_le_t laddr = laddr_le_t(L_ADDR_MIN);
+ extent_types_le_t type = 0;
+
+ backref_map_val_le_t() = default;
+ backref_map_val_le_t(const backref_map_val_le_t &) = default;
+ explicit backref_map_val_le_t(const backref_map_val_t &val)
+ : len(init_extent_len_le(val.len)),
+ laddr(val.laddr),
+ type(extent_types_le_t(val.type)) {}
+
+ operator backref_map_val_t() const {
+ return backref_map_val_t{len, laddr, (extent_types_t)type};
+ }
+};
+
+} // namespace backerf
+
+} // namespace crimson::os::seastore
#include "crimson/os/seastore/cache.h"
#include "crimson/os/seastore/seastore_types.h"
-#include "crimson/os/seastore/btree/btree_range_pin.h"
+#include "crimson/os/seastore/btree/btree_types.h"
#include "crimson/os/seastore/root_block.h"
#include "crimson/os/seastore/linked_tree_node.h"
-namespace crimson::os::seastore::lba_manager::btree {
-struct lba_map_val_t;
-}
-
namespace crimson::os::seastore {
template <typename T>
#include "crimson/os/seastore/cache.h"
#include "crimson/os/seastore/cached_extent.h"
-#include "crimson/os/seastore/btree/btree_range_pin.h"
+#include "crimson/os/seastore/btree/btree_types.h"
#include "crimson/os/seastore/btree/fixed_kv_btree.h"
#include "crimson/os/seastore/root_block.h"
#include "crimson/os/seastore/cache.h"
#include "crimson/os/seastore/lba_manager/btree/lba_btree_node.h"
-#include "crimson/os/seastore/btree/btree_range_pin.h"
+#include "crimson/os/seastore/btree/btree_types.h"
namespace crimson::os::seastore {
class LogicalCachedExtent;
namespace crimson::os::seastore::lba_manager::btree {
-std::ostream& operator<<(std::ostream& out, const lba_map_val_t& v)
-{
- return out << "lba_map_val_t("
- << v.pladdr
- << "~" << v.len
- << ", refcount=" << v.refcount
- << ", checksum=" << v.checksum
- << ")";
-}
-
std::ostream &LBALeafNode::print_detail(std::ostream &out) const
{
out << ", size=" << this->get_size()
#include "crimson/os/seastore/cache.h"
#include "crimson/os/seastore/cached_extent.h"
-#include "crimson/os/seastore/btree/btree_range_pin.h"
+#include "crimson/os/seastore/btree/btree_types.h"
#include "crimson/os/seastore/btree/fixed_kv_btree.h"
#include "crimson/os/seastore/btree/fixed_kv_node.h"
class BtreeLBAMapping;
-/**
- * lba_map_val_t
- *
- * struct representing a single lba mapping
- */
-struct lba_map_val_t {
- extent_len_t len = 0; ///< length of mapping
- pladdr_t pladdr; ///< physical addr of mapping or
- // laddr of a physical lba mapping(see btree_lba_manager.h)
- extent_ref_count_t refcount = 0; ///< refcount
- uint32_t checksum = 0; ///< checksum of original block written at paddr (TODO)
-
- lba_map_val_t() = default;
- lba_map_val_t(
- extent_len_t len,
- pladdr_t pladdr,
- extent_ref_count_t refcount,
- uint32_t checksum)
- : len(len), pladdr(pladdr), refcount(refcount), checksum(checksum) {}
- bool operator==(const lba_map_val_t&) const = default;
-};
-
-std::ostream& operator<<(std::ostream& out, const lba_map_val_t&);
-
constexpr size_t LBA_BLOCK_SIZE = 4096;
using lba_node_meta_t = fixed_kv_node_meta_t<laddr_t>;
*/
constexpr size_t LEAF_NODE_CAPACITY = 140;
-/**
- * lba_map_val_le_t
- *
- * On disk layout for lba_map_val_t.
- */
-struct __attribute__((packed)) lba_map_val_le_t {
- extent_len_le_t len = init_extent_len_le(0);
- pladdr_le_t pladdr;
- extent_ref_count_le_t refcount{0};
- ceph_le32 checksum{0};
-
- lba_map_val_le_t() = default;
- lba_map_val_le_t(const lba_map_val_le_t &) = default;
- explicit lba_map_val_le_t(const lba_map_val_t &val)
- : len(init_extent_len_le(val.len)),
- pladdr(pladdr_le_t(val.pladdr)),
- refcount(val.refcount),
- checksum(val.checksum) {}
-
- operator lba_map_val_t() const {
- return lba_map_val_t{ len, pladdr, refcount, checksum };
- }
-};
-
struct LBALeafNode
: FixedKVLeafNode<
LEAF_NODE_CAPACITY,
#pragma once
#include "crimson/os/seastore/cached_extent.h"
-#include "crimson/os/seastore/btree/btree_range_pin.h"
+#include "crimson/os/seastore/btree/btree_types.h"
#include "crimson/os/seastore/lba_manager/btree/lba_btree_node.h"
#include "crimson/os/seastore/logical_child_node.h"
#include "crimson/os/seastore/cached_extent.h"
#include "crimson/os/seastore/linked_tree_node.h"
-#include "crimson/os/seastore/btree/btree_range_pin.h"
+#include "crimson/os/seastore/btree/btree_types.h"
#include "crimson/os/seastore/lba_manager/btree/lba_btree_node.h"
namespace crimson::os::seastore {
}
using checksum_t = uint32_t;
+using checksum_le_t = ceph_le32;
constexpr checksum_t CRC_NULL = 0;
// Immutable metadata for seastore to set at mkfs time