]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
blk: Add functionality for resetting zones to HM-SMR device.
authorAbutalib Aghayev <agayev@psu.edu>
Thu, 17 Jun 2021 17:14:59 +0000 (13:14 -0400)
committerAbutalib Aghayev <agayev@psu.edu>
Tue, 22 Jun 2021 13:35:24 +0000 (09:35 -0400)
Signed-off-by: Abutalib Aghayev <agayev@psu.edu>
src/blk/BlockDevice.h
src/blk/zoned/HMSMRDevice.cc
src/blk/zoned/HMSMRDevice.h

index 44ed3de4d8c610ab8219d300b063d86bf4acc054..b67312af2f85a404506b1186fd0773da6335f255 100644 (file)
@@ -199,6 +199,9 @@ public:
     ceph_assert(is_smr());
     return conventional_region_size;
   }
+  virtual void reset_zones(const std::set<uint64_t> *zones) {
+    ceph_assert(is_smr());
+  }
 
   virtual void aio_submit(IOContext *ioc) = 0;
 
index dac61c879e735adecd219bae5afacb084225e732..61a0d7d0affe64ad9f95479257bc28e1de48f67f 100644 (file)
@@ -412,6 +412,14 @@ void HMSMRDevice::_detect_vdo()
   return;
 }
 
+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 HMSMRDevice::get_thin_utilization(uint64_t *total, uint64_t *avail) const
 {
   if (vdo_fd < 0) {
index 30941f2f9c6bd8b50af3ac227d4fff250c6d87c6..0656a1dfed6fbe7d7eecf4587d451754d4319049 100644 (file)
@@ -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<uint64_t> debug_inflight;
@@ -135,6 +136,8 @@ public:
 
   bool is_smr() const final { return true; }
 
+  void reset_zones(const std::set<uint64_t> *zones) override;
+
   bool get_thin_utilization(uint64_t *total, uint64_t *avail) const final;
 
   int read(uint64_t off, uint64_t len, bufferlist *pbl,