return ret;
},
nextent
- ).si_then([&t, laddr, prev_addr, addr, FNAME](auto p) {
- auto &result = p.first;
+ ).si_then([&t, laddr, prev_addr, addr, FNAME](auto res) {
+ auto &result = res.map_value;
DEBUGT("laddr={}, paddr {} => {} done -- {}",
t, laddr, prev_addr, addr, result);
},
);
}
-BtreeLBAManager::ref_iertr::future<std::optional<std::pair<paddr_t, extent_len_t>>>
+BtreeLBAManager::_decref_intermediate_ret
BtreeLBAManager::_decref_intermediate(
Transaction &t,
laddr_t addr,
if (!val.refcount) {
return btree.remove(c, iter
).si_then([val] {
- return std::make_optional<
- std::pair<paddr_t, extent_len_t>>(
- val.pladdr.get_paddr(), val.len);
+ auto res = ref_update_result_t{
+ val.refcount,
+ val.pladdr.get_paddr(),
+ val.len
+ };
+ return ref_iertr::make_ready_future<
+ std::optional<ref_update_result_t>>(
+ std::make_optional<ref_update_result_t>(res));
});
} else {
return btree.update(c, iter, val, nullptr
).si_then([](auto) {
- return seastar::make_ready_future<
- std::optional<std::pair<paddr_t, extent_len_t>>>(std::nullopt);
+ return ref_iertr::make_ready_future<
+ std::optional<ref_update_result_t>>(std::nullopt);
});
}
});
return out;
},
nullptr
- ).si_then([&t, addr, delta, FNAME, this, cascade_remove](auto p) {
- auto &result = p.first;
- auto &mapping = p.second;
- DEBUGT("laddr={}, delta={} done -- {}", t, addr, delta, result);
+ ).si_then([&t, addr, delta, FNAME, this, cascade_remove](auto res) {
+ auto &map_value = res.map_value;
+ auto &mapping = res.mapping;
+ DEBUGT("laddr={}, delta={} done -- {}", t, addr, delta, map_value);
auto fut = ref_iertr::make_ready_future<
- std::optional<std::pair<paddr_t, extent_len_t>>>();
- if (!result.refcount && result.pladdr.is_laddr() && cascade_remove) {
+ std::optional<ref_update_result_t>>();
+ if (!map_value.refcount && map_value.pladdr.is_laddr() && cascade_remove) {
fut = _decref_intermediate(
t,
- result.pladdr.get_laddr(),
- result.len
+ map_value.pladdr.get_laddr(),
+ map_value.len
);
}
- return fut.si_then([result, mapping=std::move(mapping)]
+ return fut.si_then([map_value, mapping=std::move(mapping)]
(auto removed) mutable {
- if (result.pladdr.is_laddr()
+ if (map_value.pladdr.is_laddr()
&& removed) {
- return std::make_pair(
- ref_update_result_t{
- result.refcount,
- removed->first,
- removed->second},
- std::move(mapping));
+ return update_refcount_ret_bare_t{
+ ref_update_result_t{
+ map_value.refcount,
+ removed->addr,
+ removed->length
+ },
+ std::move(mapping)
+ };
} else {
- return std::make_pair(
- ref_update_result_t{
- result.refcount,
- result.pladdr,
- result.len},
- std::move(mapping));
+ return update_refcount_ret_bare_t{
+ ref_update_result_t{
+ map_value.refcount,
+ map_value.pladdr,
+ map_value.len
+ },
+ std::move(mapping)
+ };
}
});
});
LogicalCachedExtent* nextent)
{
auto c = get_context(t);
- return with_btree_ret<LBABtree, _update_mapping_ret_bare>(
+ return with_btree_ret<LBABtree, update_mapping_ret_bare_t>(
cache,
c,
[f=std::move(f), c, addr, nextent](auto &btree) mutable {
c,
iter
).si_then([ret] {
- return std::make_pair(
- std::move(ret), BtreeLBAMappingRef(nullptr));
+ return update_mapping_ret_bare_t{
+ std::move(ret),
+ BtreeLBAMappingRef(nullptr)
+ };
});
} else {
return btree.update(
ret,
nextent
).si_then([c, ret](auto iter) {
- return std::make_pair(
- std::move(ret), iter.get_pin(c));
+ return update_mapping_ret_bare_t{
+ std::move(ret),
+ iter.get_pin(c)
+ };
});
}
});
).si_then([&t, this, intermediate_base](auto indirect_mapping) {
assert(indirect_mapping->is_indirect());
return update_refcount(t, intermediate_base, 1, false
- ).si_then([imapping=std::move(indirect_mapping)](auto p) mutable {
- auto mapping = std::move(p.second);
+ ).si_then([imapping=std::move(indirect_mapping)](auto res) mutable {
+ auto mapping = std::move(res.mapping);
ceph_assert(mapping->is_stable());
mapping->make_indirect(
imapping->get_key(),
laddr_t addr,
bool cascade_remove) final {
return update_refcount(t, addr, -1, cascade_remove
- ).si_then([](auto p) {
- return std::move(p.first);
+ ).si_then([](auto res) {
+ return std::move(res.ref_update_res);
});
}
Transaction &t,
laddr_t addr) final {
return update_refcount(t, addr, 1, false
- ).si_then([](auto p) {
- return std::move(p.first);
+ ).si_then([](auto res) {
+ return std::move(res.ref_update_res);
});
}
int delta) final {
ceph_assert(delta > 0);
return update_refcount(t, addr, delta, false
- ).si_then([](auto p) {
- return std::move(p.first);
+ ).si_then([](auto res) {
+ return std::move(res.ref_update_res);
});
}
*
* Updates refcount, returns resulting refcount
*/
- using update_refcount_ret_bare = std::pair<ref_update_result_t, BtreeLBAMappingRef>;
+ struct update_refcount_ret_bare_t {
+ ref_update_result_t ref_update_res;
+ BtreeLBAMappingRef mapping;
+ };
using update_refcount_iertr = ref_iertr;
using update_refcount_ret = update_refcount_iertr::future<
- update_refcount_ret_bare>;
+ update_refcount_ret_bare_t>;
update_refcount_ret update_refcount(
Transaction &t,
laddr_t addr,
*
* Updates mapping, removes if f returns nullopt
*/
+ struct update_mapping_ret_bare_t {
+ lba_map_val_t map_value;
+ BtreeLBAMappingRef mapping;
+ };
using _update_mapping_iertr = ref_iertr;
- using _update_mapping_ret_bare = std::pair<lba_map_val_t, BtreeLBAMappingRef>;
- using _update_mapping_ret = ref_iertr::future<_update_mapping_ret_bare>;
+ using _update_mapping_ret = ref_iertr::future<
+ update_mapping_ret_bare_t>;
using update_func_t = std::function<
lba_map_val_t(const lba_map_val_t &v)
>;
op_context_t<laddr_t> c,
std::list<BtreeLBAMappingRef> &pin_list);
- ref_iertr::future<std::optional<std::pair<paddr_t, extent_len_t>>>
- _decref_intermediate(
+ using _decref_intermediate_ret = ref_iertr::future<
+ std::optional<ref_update_result_t>>;
+ _decref_intermediate_ret _decref_intermediate(
Transaction &t,
laddr_t addr,
extent_len_t len);