Transaction &t,
CachedExtentRef extent)
{
+ if (extent->has_been_invalidated()) {
+ logger().debug("BTreeLBAManager::rewrite_extent: {} is invalid, returning eagain");
+ return crimson::ct_error::eagain::make();
+ }
+
if (extent->is_logical()) {
auto lextent = extent->cast<LogicalCachedExtent>();
cache.retire_extent(t, extent);
ceph_assert(in.paddr == prev_addr);
ret.paddr = addr;
return ret;
- }).safe_then([nlextent](auto e) {}).handle_error(
+ }).safe_then(
+ [nlextent](auto) {},
+ crimson::ct_error::enoent::handle([extent]() -> rewrite_extent_ret {
+ ceph_assert(extent->has_been_invalidated());
+ return crimson::ct_error::eagain::make();
+ }),
rewrite_extent_ertr::pass_further{},
/* ENOENT in particular should be impossible */
crimson::ct_error::assert_all{
nlba_extent->get_node_meta().begin,
nlba_extent->get_paddr()).safe_then(
[](auto) {},
- rewrite_extent_ertr::pass_further {},
+ crimson::ct_error::enoent::handle([extent]() -> rewrite_extent_ret {
+ ceph_assert(extent->has_been_invalidated());
+ return crimson::ct_error::eagain::make();
+ }),
+ rewrite_extent_ertr::pass_further{},
crimson::ct_error::assert_all{
"Invalid error in BtreeLBAManager::rewrite_extent update_internal_mapping"
});