]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/zns: fix ioctl parameters to get correct zone information
authorAravind Ramesh <Aravind.Ramesh@wdc.com>
Tue, 7 Jun 2022 17:16:13 +0000 (22:46 +0530)
committerAravind Ramesh <Aravind.Ramesh@wdc.com>
Thu, 21 Jul 2022 10:11:14 +0000 (15:41 +0530)
Fix BLKREPORTZONE ioctl parameters to report correct zone capacity.

Signed-off-by: Aravind Ramesh <aravind.ramesh@wdc.com>
src/crimson/os/seastore/segment_manager/zns.cc

index a39e6bbc59c7f7a264915427f98fb08db71d2eda..c0dc6d8a8c7b82091ac4d83d6793eff5e21b4a5d 100644 (file)
@@ -118,25 +118,20 @@ static seastar::future<> reset_device(
 }
 
 static seastar::future<size_t> get_zone_capacity(
-  seastar::file &device, 
-  uint32_t zone_size, 
+  seastar::file &device,
+  uint32_t zone_size,
   uint32_t nr_zones)
 {
   return seastar::do_with(
-    blk_zone_range{},
     ZoneReport(nr_zones),
-    [&] (auto &first_zone_range, auto &zr){
-      first_zone_range.sector = 0;
-      first_zone_range.nr_sectors = zone_size;
-      return device.ioctl(
-       BLKOPENZONE, 
-       &first_zone_range
-      ).then([&](int ret){
-       return device.ioctl(BLKREPORTZONE, zr.hdr);
-      }).then([&] (int ret){
-       return device.ioctl(BLKRESETZONE, &first_zone_range);
-      }).then([&](int ret){
-       return seastar::make_ready_future<size_t>(zr.hdr->zones[0].wp);
+    [&] (auto &zr) {
+        zr.hdr->sector = 0;
+        zr.hdr->nr_zones = nr_zones;
+       return device.ioctl(
+          BLKREPORTZONE,
+          zr.hdr
+        ).then([&](int ret) {
+       return seastar::make_ready_future<size_t>(zr.hdr->zones[0].capacity);
       });
     }
   );
@@ -322,10 +317,12 @@ ZNSSegmentManager::mkfs_ret ZNSSegmentManager::mkfs(
          }
          return device.ioctl(BLKGETZONESZ, (void *)&zone_size);
        }).then([&] (int ret){
+          ceph_assert(zone_size);
          return reset_device(device, zone_size, nr_zones);
        }).then([&] {
          return get_zone_capacity(device, zone_size, nr_zones); 
        }).then([&, FNAME, config] (auto zone_capacity){
+          ceph_assert(zone_capacity);
          sb = make_metadata(
            config.meta, 
            stat,