@@ -1375,15 +1375,14 @@ SeaStore::Shard::omap_get_header(
13751375 return get_attr (ch, oid, OMAP_HEADER_XATTR_KEY, op_flags);
13761376}
13771377
1378- const omap_root_le_t & SeaStore::Shard::select_log_omap_root (Onode& onode)
1378+ omap_root_t SeaStore::Shard::select_log_omap_root (Onode& onode) const
13791379{
1380- const auto &log_root_le = onode.get_layout ().log_root ;
1381- laddr_t hint = onode.get_metadata_hint (device->get_block_size ());
1382- if (log_root_le.get (hint).is_null ()) {
1383- return onode.get_layout ().omap_root ;
1380+ auto log_root = get_omap_root (omap_type_t ::LOG, onode);
1381+ if (log_root.is_null ()) {
1382+ return get_omap_root (omap_type_t ::OMAP, onode);
13841383 } else {
1385- ceph_assert (onode. get_layout (). omap_root . get (hint ).is_null ());
1386- return log_root_le ;
1384+ ceph_assert (get_omap_root ( omap_type_t ::OMAP, onode ).is_null ());
1385+ return log_root ;
13871386 }
13881387}
13891388
@@ -1406,8 +1405,7 @@ SeaStore::Shard::omap_get_values(
14061405 op_flags,
14071406 [this , keys](auto &t, auto &onode)
14081407 {
1409- auto r = select_log_omap_root (onode);
1410- omap_root_t root = r.get (onode.get_metadata_hint (device->get_block_size ()));
1408+ auto root = select_log_omap_root (onode);
14111409 return omaptree_get_values (
14121410 t, std::move (root), keys);
14131411 }).finally ([this ] {
@@ -1435,8 +1433,7 @@ SeaStore::Shard::omap_get_values(
14351433 op_flags,
14361434 [this , start](auto &t, auto &onode)
14371435 {
1438- auto root = select_log_omap_root (onode).get (
1439- onode.get_metadata_hint (device->get_block_size ()));
1436+ auto root = select_log_omap_root (onode);
14401437 return omaptree_get_values (
14411438 t, std::move (root), start);
14421439 }).finally ([this ] {
@@ -1772,8 +1769,7 @@ SeaStore::Shard::_do_transaction_step(
17721769 {
17731770 std::map<std::string, ceph::bufferlist> aset;
17741771 i.decode_attrset (aset);
1775- auto root = select_log_omap_root (*onode).get (
1776- onode->get_metadata_hint (device->get_block_size ()));
1772+ auto root = select_log_omap_root (*onode);
17771773 DEBUGT (" op OMAP_SETKEYS, oid={}, omap size={}, type={} ..." ,
17781774 *ctx.transaction , oid, aset.size (), root.get_type ());
17791775 return omaptree_set_keys (
@@ -1794,8 +1790,7 @@ SeaStore::Shard::_do_transaction_step(
17941790 {
17951791 omap_keys_t keys;
17961792 i.decode_keyset (keys);
1797- auto root = select_log_omap_root (*onode).get (
1798- onode->get_metadata_hint (device->get_block_size ()));
1793+ auto root = select_log_omap_root (*onode);
17991794 DEBUGT (" op OMAP_RMKEYS, oid={}, omap size={}, type={} ..." ,
18001795 *ctx.transaction , oid, keys.size (), root.get_type ());
18011796 return omaptree_rm_keys (
@@ -1809,8 +1804,7 @@ SeaStore::Shard::_do_transaction_step(
18091804 std::string first, last;
18101805 first = i.decode_string ();
18111806 last = i.decode_string ();
1812- auto root = select_log_omap_root (*onode).get (
1813- onode->get_metadata_hint (device->get_block_size ()));
1807+ auto root = select_log_omap_root (*onode);
18141808 DEBUGT (" op OMAP_RMKEYRANGE, oid={}, first={}, last={}, type={}..." ,
18151809 *ctx.transaction , oid, first, last, root.get_type ());
18161810 return omaptree_rm_keyrange (
@@ -1838,15 +1832,11 @@ SeaStore::Shard::_do_transaction_step(
18381832 *ctx.transaction , oid);
18391833 // TODO
18401834 if (op->hint & CEPH_OSD_ALLOC_HINT_FLAG_LOG) {
1841- OnodeRef &onode = onodes[op->oid ];
1842- const auto &log_root = onode->get_layout ().log_root .get (
1843- onode->get_metadata_hint (device->get_block_size ()));
1844- const auto &omap_root = onode->get_layout ().omap_root .get (
1845- onode->get_metadata_hint (device->get_block_size ()));
1846- ceph_assert (log_root.is_null () && omap_root.is_null ());
1835+ ceph_assert (get_omap_root (omap_type_t ::LOG, *onode).is_null ());
1836+ ceph_assert (get_omap_root (omap_type_t ::OMAP, *onode).is_null ());
18471837 return BtreeOMapManager (*transaction_manager).initialize_omap (
18481838 *ctx.transaction , onode->get_metadata_hint (device->get_block_size ()),
1849- log_root. get_type ()
1839+ omap_type_t ::LOG
18501840 ).si_then ([&onode, &ctx](auto new_root) {
18511841 if (new_root.must_update ()) {
18521842 onode->update_log_root (*ctx.transaction , new_root);
0 commit comments