Skip to content

Commit 8cc2504

Browse files
committed
crimson/os/seastore: also remove xattrs when removing onodes
Signed-off-by: Xuehan Xu <[email protected]>
1 parent abdae14 commit 8cc2504

File tree

2 files changed

+36
-11
lines changed

2 files changed

+36
-11
lines changed

src/crimson/os/seastore/seastore.cc

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1480,28 +1480,49 @@ SeaStore::Shard::_do_transaction_step(
14801480
}
14811481

14821482
SeaStore::Shard::tm_ret
1483-
SeaStore::Shard::_remove(
1483+
SeaStore::Shard::_remove_omaps(
14841484
internal_context_t &ctx,
1485-
OnodeRef &onode)
1485+
OnodeRef &onode,
1486+
omap_root_t &&omap_root)
14861487
{
1487-
LOG_PREFIX(SeaStore::_remove);
1488-
DEBUGT("onode={}", *ctx.transaction, *onode);
1489-
auto fut = BtreeOMapManager::omap_clear_iertr::now();
1490-
auto omap_root = onode->get_layout().omap_root.get(
1491-
onode->get_metadata_hint(device->get_block_size()));
14921488
if (omap_root.get_location() != L_ADDR_NULL) {
1493-
fut = seastar::do_with(
1489+
return seastar::do_with(
14941490
BtreeOMapManager(*transaction_manager),
1495-
onode->get_layout().omap_root.get(
1496-
onode->get_metadata_hint(device->get_block_size())),
1491+
std::move(omap_root),
14971492
[&ctx, onode](auto &omap_manager, auto &omap_root) {
14981493
return omap_manager.omap_clear(
14991494
omap_root,
15001495
*ctx.transaction
1496+
).handle_error_interruptible(
1497+
crimson::ct_error::input_output_error::pass_further(),
1498+
crimson::ct_error::assert_all{
1499+
"Invalid error in SeaStore::_remove"
1500+
}
15011501
);
15021502
});
15031503
}
1504-
return fut.si_then([this, &ctx, onode] {
1504+
return tm_iertr::now();
1505+
}
1506+
1507+
SeaStore::Shard::tm_ret
1508+
SeaStore::Shard::_remove(
1509+
internal_context_t &ctx,
1510+
OnodeRef &onode)
1511+
{
1512+
LOG_PREFIX(SeaStore::_remove);
1513+
DEBUGT("onode={}", *ctx.transaction, *onode);
1514+
return _remove_omaps(
1515+
ctx,
1516+
onode,
1517+
onode->get_layout().omap_root.get(
1518+
onode->get_metadata_hint(device->get_block_size()))
1519+
).si_then([this, &ctx, onode]() mutable {
1520+
return _remove_omaps(
1521+
ctx,
1522+
onode,
1523+
onode->get_layout().xattr_root.get(
1524+
onode->get_metadata_hint(device->get_block_size())));
1525+
}).si_then([this, &ctx, onode] {
15051526
return seastar::do_with(
15061527
ObjectDataHandler(max_object_size),
15071528
[=, this, &ctx](auto &objhandler) {

src/crimson/os/seastore/seastore.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,10 @@ class SeaStore final : public FuturizedStore {
343343
std::vector<OnodeRef> &d_onodes,
344344
ceph::os::Transaction::iterator &i);
345345

346+
tm_ret _remove_omaps(
347+
internal_context_t &ctx,
348+
OnodeRef &onode,
349+
omap_root_t &&omap_root);
346350
tm_ret _remove(
347351
internal_context_t &ctx,
348352
OnodeRef &onode);

0 commit comments

Comments
 (0)