#include "crimson/os/seastore/logging.h"
#include "crimson/common/config_proxy.h"
+#include "crimson/os/seastore/segment_cleaner.h"
// included for get_extent_by_type
#include "crimson/os/seastore/collection_manager/collection_flat_node.h"
#include "crimson/os/seastore/random_block_manager.h"
#include "crimson/os/seastore/root_block.h"
#include "crimson/os/seastore/seastore_types.h"
-#include "crimson/os/seastore/segment_cleaner.h"
#include "crimson/os/seastore/segment_manager.h"
#include "crimson/os/seastore/transaction.h"
namespace crimson::os::seastore {
+class SegmentCleaner;
+
struct backref_buf_entry_t {
backref_buf_entry_t(
const paddr_t paddr,
SegmentCleaner::SegmentCleaner(
config_t config,
SegmentManagerGroupRef&& sm_group,
+ BackrefManager &backref_manager,
bool detailed)
: detailed(detailed),
config(config),
sm_group(std::move(sm_group)),
+ backref_manager(backref_manager),
ool_segment_seq_allocator(
new SegmentSeqAllocator(segment_type_t::OOL)),
gc_process(*this)
return seastar::do_with(
std::move(dirty_list),
[FNAME, this, &t](auto &dirty_list) {
- return trans_intr::do_for_each(
- dirty_list,
- [FNAME, this, &t](auto &e) {
- DEBUGT("cleaning {}", t, *e);
- return ecb->rewrite_extent(t, e);
- });
+ return backref_manager.batch_insert_from_cache(
+ t,
+ dirty_list.back()->get_dirty_from()
+ ).si_then([FNAME, this, &t, &dirty_list] {
+ return trans_intr::do_for_each(
+ dirty_list,
+ [FNAME, this, &t](auto &e) {
+ DEBUGT("cleaning {}", t, *e);
+ return ecb->rewrite_extent(t, e);
+ });
+ });
});
});
}
#include "osd/osd_types.h"
#include "crimson/common/log.h"
+#include "crimson/os/seastore/backref_manager.h"
#include "crimson/os/seastore/cached_extent.h"
#include "crimson/os/seastore/seastore_types.h"
#include "crimson/os/seastore/segment_manager.h"
const config_t config;
SegmentManagerGroupRef sm_group;
+ BackrefManager &backref_manager;
SpaceTrackerIRef space_tracker;
segments_info_t segments;
SegmentCleaner(
config_t config,
SegmentManagerGroupRef&& sm_group,
+ BackrefManager &backref_manager,
bool detailed = false);
SegmentSeqAllocator& get_ool_segment_seq_allocator() {