From: Abutalib Aghayev Date: Thu, 17 Jun 2021 17:14:59 +0000 (-0400) Subject: blk: Add functionality for resetting zones to HM-SMR device. X-Git-Tag: v17.1.0~1525^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c211a5f012864bca3ac3def587da63ea11ec3eaa;p=ceph.git blk: Add functionality for resetting zones to HM-SMR device. Signed-off-by: Abutalib Aghayev --- diff --git a/src/blk/BlockDevice.h b/src/blk/BlockDevice.h index 44ed3de4d8c6..b67312af2f85 100644 --- a/src/blk/BlockDevice.h +++ b/src/blk/BlockDevice.h @@ -199,6 +199,9 @@ public: ceph_assert(is_smr()); return conventional_region_size; } + virtual void reset_zones(const std::set *zones) { + ceph_assert(is_smr()); + } virtual void aio_submit(IOContext *ioc) = 0; diff --git a/src/blk/zoned/HMSMRDevice.cc b/src/blk/zoned/HMSMRDevice.cc index dac61c879e73..61a0d7d0affe 100644 --- a/src/blk/zoned/HMSMRDevice.cc +++ b/src/blk/zoned/HMSMRDevice.cc @@ -412,6 +412,14 @@ void HMSMRDevice::_detect_vdo() return; } +void HMSMRDevice::reset_zones(const std::set *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 HMSMRDevice::get_thin_utilization(uint64_t *total, uint64_t *avail) const { if (vdo_fd < 0) { diff --git a/src/blk/zoned/HMSMRDevice.h b/src/blk/zoned/HMSMRDevice.h index 30941f2f9c6b..0656a1dfed6f 100644 --- a/src/blk/zoned/HMSMRDevice.h +++ b/src/blk/zoned/HMSMRDevice.h @@ -41,6 +41,7 @@ class HMSMRDevice final : public BlockDevice { string vdo_name; std::string devname; ///< kernel dev name (/sys/block/$devname), if any + int zbd_dev; ceph::mutex debug_lock = ceph::make_mutex("HMSMRDevice::debug_lock"); interval_set debug_inflight; @@ -135,6 +136,8 @@ public: bool is_smr() const final { return true; } + void reset_zones(const std::set *zones) override; + bool get_thin_utilization(uint64_t *total, uint64_t *avail) const final; int read(uint64_t off, uint64_t len, bufferlist *pbl,