From: Sage Weil Date: Tue, 7 Sep 2021 18:02:16 +0000 (-0500) Subject: blk/zoned: add get_zones() to fetch write pointers X-Git-Tag: v17.1.0~535^2~40 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=590f826f908f1548fed4b20eb9c093794d5cde14;p=ceph-ci.git blk/zoned: add get_zones() to fetch write pointers Signed-off-by: Sage Weil --- diff --git a/src/blk/BlockDevice.h b/src/blk/BlockDevice.h index d08e6e3e486..14efcbea79f 100644 --- a/src/blk/BlockDevice.h +++ b/src/blk/BlockDevice.h @@ -209,6 +209,9 @@ public: virtual void reset_zones(const std::set& zones) { ceph_assert(is_smr()); } + virtual std::vector get_zones() { + return std::vector(); + } virtual void aio_submit(IOContext *ioc) = 0; diff --git a/src/blk/zoned/HMSMRDevice.cc b/src/blk/zoned/HMSMRDevice.cc index 518ac41f4e0..31e197ea821 100644 --- a/src/blk/zoned/HMSMRDevice.cc +++ b/src/blk/zoned/HMSMRDevice.cc @@ -110,3 +110,23 @@ void HMSMRDevice::reset_zones(const std::set& zones) } } } + +std::vector HMSMRDevice::get_zones() +{ + std::vector 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 wp(num_zones); + for (unsigned i = 0; i < num_zones; ++i) { + wp[i] = zones[i].wp; + } + return wp; +} diff --git a/src/blk/zoned/HMSMRDevice.h b/src/blk/zoned/HMSMRDevice.h index af490fc4e62..cfa1310bef6 100644 --- a/src/blk/zoned/HMSMRDevice.h +++ b/src/blk/zoned/HMSMRDevice.h @@ -45,6 +45,7 @@ public: bool is_smr() const final { return true; } void reset_all_zones() override; void reset_zones(const std::set& zones) override; + std::vector get_zones() override; }; #endif //CEPH_BLK_HMSMRDEVICE_H