virtual void reset_zones(const std::set<uint64_t>& zones) {
ceph_assert(is_smr());
}
+ virtual std::vector<uint64_t> get_zones() {
+ return std::vector<uint64_t>();
+ }
virtual void aio_submit(IOContext *ioc) = 0;
}
}
}
+
+std::vector<uint64_t> HMSMRDevice::get_zones()
+{
+ std::vector<zbd_zone> zones;
+ unsigned int num_zones = size / zone_size;
+ zones.resize(num_zones);
+
+ int r = zbd_report_zones(zbd_fd, 0, 0, ZBD_RO_ALL, zones.data(), &num_zones);
+ if (r != 0) {
+ derr << __func__ << " zbd_report_zones failed on " << path << ": "
+ << cpp_strerror(errno) << dendl;
+ ceph_abort("zbd_report_zones failed");
+ }
+
+ std::vector<uint64_t> wp(num_zones);
+ for (unsigned i = 0; i < num_zones; ++i) {
+ wp[i] = zones[i].wp;
+ }
+ return wp;
+}
bool is_smr() const final { return true; }
void reset_all_zones() override;
void reset_zones(const std::set<uint64_t>& zones) override;
+ std::vector<uint64_t> get_zones() override;
};
#endif //CEPH_BLK_HMSMRDEVICE_H