]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
blk/zoned: add get_zones() to fetch write pointers
authorSage Weil <sage@newdream.net>
Tue, 7 Sep 2021 18:02:16 +0000 (13:02 -0500)
committerSage Weil <sage@newdream.net>
Fri, 29 Oct 2021 13:55:57 +0000 (09:55 -0400)
Signed-off-by: Sage Weil <sage@newdream.net>
src/blk/BlockDevice.h
src/blk/zoned/HMSMRDevice.cc
src/blk/zoned/HMSMRDevice.h

index d08e6e3e48668b1c2d49de310e6eb8abf1e85831..14efcbea79f59e8fdf8059198c23eee1cd3bcd7d 100644 (file)
@@ -209,6 +209,9 @@ public:
   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;
 
index 518ac41f4e0a8472f265e76d358b383199f816e4..31e197ea8210ffbbb74f7eff025c0cb02fe895f5 100644 (file)
@@ -110,3 +110,23 @@ void HMSMRDevice::reset_zones(const std::set<uint64_t>& zones)
     }
   }
 }
+
+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;
+}
index af490fc4e6247d1d1133419a4b3390f371b7d6f3..cfa1310bef64ac4debb2493bef92dbd8cbaab6e8 100644 (file)
@@ -45,6 +45,7 @@ public:
   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