Skip to content

Commit d6f5f3b

Browse files
committed
crimson/os/seastore/lba_manager: simplify LBAManager::update_mapping(s)() signature
Signed-off-by: Yingxin Cheng <[email protected]>
1 parent a3389fd commit d6f5f3b

File tree

5 files changed

+72
-54
lines changed

5 files changed

+72
-54
lines changed

src/crimson/os/seastore/lba_manager.cc

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,6 @@
66

77
namespace crimson::os::seastore {
88

9-
LBAManager::update_mappings_ret
10-
LBAManager::update_mappings(
11-
Transaction& t,
12-
const std::list<LogicalChildNodeRef>& extents)
13-
{
14-
return trans_intr::do_for_each(extents,
15-
[this, &t](auto &extent) {
16-
return update_mapping(
17-
t,
18-
extent->get_laddr(),
19-
extent->get_length(),
20-
extent->get_prior_paddr_and_reset(),
21-
extent->get_length(),
22-
extent->get_paddr(),
23-
extent->get_last_committed_crc(),
24-
nullptr // all the extents should have already been
25-
// added to the fixed_kv_btree
26-
).discard_result();
27-
});
28-
}
29-
309
LBAManagerRef lba_manager::create_lba_manager(Cache &cache) {
3110
return LBAManagerRef(new btree::BtreeLBAManager(cache));
3211
}

src/crimson/os/seastore/lba_manager.h

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ class LBAManager {
192192
/**
193193
* update_mapping
194194
*
195-
* update lba mapping for a delayed allocated extent
195+
* update lba mapping for rewrite
196196
*/
197197
using update_mapping_iertr = base_iertr;
198198
using update_mapping_ret = base_iertr::future<extent_ref_count_t>;
@@ -201,10 +201,7 @@ class LBAManager {
201201
laddr_t laddr,
202202
extent_len_t prev_len,
203203
paddr_t prev_addr,
204-
extent_len_t len,
205-
paddr_t paddr,
206-
uint32_t checksum,
207-
LogicalChildNode *nextent) = 0;
204+
LogicalChildNode& nextent) = 0;
208205

209206
/**
210207
* update_mappings
@@ -213,9 +210,9 @@ class LBAManager {
213210
*/
214211
using update_mappings_iertr = update_mapping_iertr;
215212
using update_mappings_ret = update_mappings_iertr::future<>;
216-
update_mappings_ret update_mappings(
213+
virtual update_mappings_ret update_mappings(
217214
Transaction& t,
218-
const std::list<LogicalChildNodeRef>& extents);
215+
const std::list<LogicalChildNodeRef>& extents) = 0;
219216

220217
/**
221218
* get_physical_extent_if_live

src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc

Lines changed: 59 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -595,19 +595,21 @@ BtreeLBAManager::update_mapping(
595595
laddr_t laddr,
596596
extent_len_t prev_len,
597597
paddr_t prev_addr,
598-
extent_len_t len,
599-
paddr_t addr,
600-
uint32_t checksum,
601-
LogicalChildNode *nextent)
598+
LogicalChildNode& nextent)
602599
{
603600
LOG_PREFIX(BtreeLBAManager::update_mapping);
604-
TRACET("laddr={}, paddr {} => {}", t, laddr, prev_addr, addr);
601+
auto addr = nextent.get_paddr();
602+
auto len = nextent.get_length();
603+
auto checksum = nextent.get_last_committed_crc();
604+
TRACET("laddr={}, paddr {}~0x{:x} => {}~0x{:x}, crc=0x{:x}",
605+
t, laddr, prev_addr, prev_len, addr, len, checksum);
606+
assert(laddr == nextent.get_laddr());
607+
assert(!addr.is_null());
605608
return _update_mapping(
606609
t,
607610
laddr,
608-
[prev_addr, addr, prev_len, len, checksum](
609-
const lba_map_val_t &in) {
610-
assert(!addr.is_null());
611+
[prev_addr, addr, prev_len, len, checksum]
612+
(const lba_map_val_t &in) {
611613
lba_map_val_t ret = in;
612614
ceph_assert(in.pladdr.is_paddr());
613615
ceph_assert(in.pladdr.get_paddr() == prev_addr);
@@ -617,11 +619,11 @@ BtreeLBAManager::update_mapping(
617619
ret.checksum = checksum;
618620
return ret;
619621
},
620-
nextent
621-
).si_then([&t, laddr, prev_addr, addr, FNAME](auto res) {
622+
&nextent
623+
).si_then([&t, laddr, prev_addr, prev_len, addr, len, checksum, FNAME](auto res) {
622624
auto &result = res.map_value;
623-
DEBUGT("laddr={}, paddr {} => {} done -- {}",
624-
t, laddr, prev_addr, addr, result);
625+
DEBUGT("laddr={}, paddr {}~0x{:x} => {}~0x{:x}, crc=0x{:x} done -- {}",
626+
t, laddr, prev_addr, prev_len, addr, len, checksum, result);
625627
return update_mapping_iertr::make_ready_future<
626628
extent_ref_count_t>(result.refcount);
627629
},
@@ -633,6 +635,51 @@ BtreeLBAManager::update_mapping(
633635
);
634636
}
635637

638+
BtreeLBAManager::update_mappings_ret
639+
BtreeLBAManager::update_mappings(
640+
Transaction& t,
641+
const std::list<LogicalChildNodeRef>& extents)
642+
{
643+
return trans_intr::do_for_each(extents, [this, &t](auto &extent) {
644+
LOG_PREFIX(BtreeLBAManager::update_mappings);
645+
auto laddr = extent->get_laddr();
646+
auto prev_addr = extent->get_prior_paddr_and_reset();
647+
auto len = extent->get_length();
648+
auto addr = extent->get_paddr();
649+
auto checksum = extent->get_last_committed_crc();
650+
TRACET("laddr={}, paddr {}~0x{:x} => {}, crc=0x{:x}",
651+
t, laddr, prev_addr, len, addr, checksum);
652+
assert(!addr.is_null());
653+
return _update_mapping(
654+
t,
655+
laddr,
656+
[prev_addr, addr, len, checksum](
657+
const lba_map_val_t &in) {
658+
lba_map_val_t ret = in;
659+
ceph_assert(in.pladdr.is_paddr());
660+
ceph_assert(in.pladdr.get_paddr() == prev_addr);
661+
ceph_assert(in.len == len);
662+
ret.pladdr = addr;
663+
ret.checksum = checksum;
664+
return ret;
665+
},
666+
nullptr // all the extents should have already been
667+
// added to the fixed_kv_btree
668+
).si_then([&t, laddr, prev_addr, len, addr, checksum, FNAME](auto res) {
669+
auto &result = res.map_value;
670+
DEBUGT("laddr={}, paddr {}~0x{:x} => {}, crc=0x{:x} done -- {}",
671+
t, laddr, prev_addr, len, addr, checksum, result);
672+
return update_mapping_iertr::make_ready_future();
673+
},
674+
update_mapping_iertr::pass_further{},
675+
/* ENOENT in particular should be impossible */
676+
crimson::ct_error::assert_all{
677+
"Invalid error in BtreeLBAManager::update_mappings"
678+
}
679+
);
680+
});
681+
}
682+
636683
BtreeLBAManager::get_physical_extent_if_live_ret
637684
BtreeLBAManager::get_physical_extent_if_live(
638685
Transaction &t,

src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -580,10 +580,11 @@ class BtreeLBAManager : public LBAManager {
580580
laddr_t laddr,
581581
extent_len_t prev_len,
582582
paddr_t prev_addr,
583-
extent_len_t len,
584-
paddr_t paddr,
585-
uint32_t checksum,
586-
LogicalChildNode*) final;
583+
LogicalChildNode&) final;
584+
585+
update_mappings_ret update_mappings(
586+
Transaction& t,
587+
const std::list<LogicalChildNodeRef>& extents);
587588

588589
get_physical_extent_if_live_ret get_physical_extent_if_live(
589590
Transaction &t,
@@ -594,7 +595,6 @@ class BtreeLBAManager : public LBAManager {
594595
private:
595596
Cache &cache;
596597

597-
598598
struct {
599599
uint64_t num_alloc_extents = 0;
600600
uint64_t num_alloc_extents_iter_nexts = 0;

src/crimson/os/seastore/transaction_manager.cc

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -526,10 +526,7 @@ TransactionManager::rewrite_logical_extent(
526526
extent->get_laddr(),
527527
extent->get_length(),
528528
extent->get_paddr(),
529-
nextent->get_length(),
530-
nextent->get_paddr(),
531-
nextent->get_last_committed_crc(),
532-
nextent.get()
529+
*nextent
533530
).discard_result();
534531
} else {
535532
assert(get_extent_category(extent->get_type()) == data_category_t::DATA);
@@ -570,15 +567,13 @@ TransactionManager::rewrite_logical_extent(
570567
* avoid this complication. */
571568
auto fut = base_iertr::now();
572569
if (first_extent) {
570+
assert(off == 0);
573571
fut = lba_manager->update_mapping(
574572
t,
575-
(extent->get_laddr() + off).checked_to_laddr(),
573+
extent->get_laddr(),
576574
extent->get_length(),
577575
extent->get_paddr(),
578-
nextent->get_length(),
579-
nextent->get_paddr(),
580-
nextent->get_last_committed_crc(),
581-
nextent.get()
576+
*nextent
582577
).si_then([&refcount](auto c) {
583578
refcount = c;
584579
});

0 commit comments

Comments
 (0)