ceph_assert(is_smr());
return conventional_region_size;
}
- virtual void reset_zones(const std::set<uint64_t> *zones) {
+ virtual void reset_zones(const std::set<uint64_t>& zones) {
ceph_assert(is_smr());
}
return;
}
-void HMSMRDevice::reset_zones(const std::set<uint64_t> *zones) {
- for (auto zone_num : *zones) {
+void HMSMRDevice::reset_zones(const std::set<uint64_t>& zones) {
+ for (auto zone_num : zones) {
if (zbd_reset_zones(zbd_dev, zone_num * zone_size, zone_size) != 0) {
derr << __func__ << " resetting zone failed for zone " << zone_num << dendl;
}
bool is_smr() const final { return true; }
- void reset_zones(const std::set<uint64_t> *zones) override;
+ void reset_zones(const std::set<uint64_t>& zones) override;
bool get_thin_utilization(uint64_t *total, uint64_t *avail) const final;
dout(20) << __func__ << " wake" << dendl;
} else {
l.unlock();
- f->mark_zones_to_clean_in_progress(zones_to_clean, db);
+ f->mark_zones_to_clean_in_progress(*zones_to_clean, db);
for (auto zone_num : *zones_to_clean) {
_zoned_clean_zone(zone_num);
}
- bdev->reset_zones(zones_to_clean);
- f->mark_zones_to_clean_free(zones_to_clean, db);
+ bdev->reset_zones(*zones_to_clean);
+ f->mark_zones_to_clean_free(*zones_to_clean, db);
a->mark_zones_to_clean_free();
l.lock();
}
}
void ZonedFreelistManager::mark_zones_to_clean_free(
- const std::set<uint64_t> *zones_to_clean, KeyValueDB *kvdb) {
+ const std::set<uint64_t>& zones_to_clean, KeyValueDB *kvdb) {
dout(10) << __func__ << dendl;
KeyValueDB::Transaction txn = kvdb->get_transaction();
- for (auto zone_num : *zones_to_clean) {
+ for (auto zone_num : zones_to_clean) {
ldout(cct, 10) << __func__ << " zone " << zone_num << " is now clean in DB" << dendl;
zone_state_t zone_state;
write_zone_state_to_db(zone_num, zone_state, txn);
}
-
txn->rmkey(meta_prefix, "cleaning_in_progress_zones");
-
kvdb->submit_transaction_sync(txn);
}
// if there is a key "cleaning_in_progress_zones" in the meta_prefix namespace,
// and if so, will read the zones and resume cleaning.
void ZonedFreelistManager::mark_zones_to_clean_in_progress(
- const std::set<uint64_t> *zones_to_clean, KeyValueDB *kvdb) {
+ const std::set<uint64_t>& zones_to_clean, KeyValueDB *kvdb) {
dout(10) << __func__ << dendl;
bufferlist bl;
std::vector<std::pair<string, string>>*) const override;
std::vector<zone_state_t> get_zone_states(KeyValueDB *kvdb) const;
- void mark_zones_to_clean_free(const std::set<uint64_t> *zones_to_clean,
+ void mark_zones_to_clean_free(const std::set<uint64_t>& zones_to_clean,
KeyValueDB *kvdb);
- void mark_zones_to_clean_in_progress(const std::set<uint64_t> *zones_to_clean,
+ void mark_zones_to_clean_in_progress(const std::set<uint64_t>& zones_to_clean,
KeyValueDB *kvdb);
};