/* random size that allows efficient processing */
#define ZONES_PER_IOCTL 16384
+static void
+zone_validate_capacity(
+ struct zone_info *zi,
+ __u64 capacity,
+ bool conventional)
+{
+ if (conventional && zi->zone_capacity != zi->zone_size) {
+ fprintf(stderr, _("Zone capacity equal to Zone size required for conventional zones.\n"));
+ exit(1);
+ }
+
+ if (zi->zone_capacity > zi->zone_size) {
+ fprintf(stderr, _("Zone capacity larger than zone size!\n"));
+ exit(1);
+ }
+
+ if (zi->zone_capacity != capacity) {
+ fprintf(stderr, _("Inconsistent zone capacity!\n"));
+ exit(1);
+ }
+}
+
static void
report_zones(
const char *name,
switch (zones[i].type) {
case BLK_ZONE_TYPE_CONVENTIONAL:
+ if (!zi->zone_capacity)
+ zi->zone_capacity = zones[i].capacity;
+ zone_validate_capacity(zi, zones[i].capacity,
+ true);
+
/*
* We can only use the conventional space at the
* start of the device for metadata, so don't
zi->nr_conv_zones++;
break;
case BLK_ZONE_TYPE_SEQWRITE_REQ:
+ if (!found_seq)
+ zi->zone_capacity = zones[i].capacity;
+ zone_validate_capacity(zi, zones[i].capacity,
+ false);
+
found_seq = true;
break;
case BLK_ZONE_TYPE_SEQWRITE_PREF:
exit(1);
}
- if (!n) {
- zi->zone_capacity = zones[i].capacity;
- if (zi->zone_capacity > zi->zone_size) {
- fprintf(stderr,
-_("Zone capacity larger than zone size!\n"));
- exit(1);
- }
- } else if (zones[i].capacity != zi->zone_capacity) {
- fprintf(stderr,
-_("Inconsistent zone capacity!\n"));
- exit(1);
- }
-
n++;
}
sector = zones[rep->nr_zones - 1].start +
_("Data devices requires conventional zones.\n"));
usage();
}
- if (zt->data.zone_capacity != zt->data.zone_size) {
- fprintf(stderr,
-_("Zone capacity equal to Zone size required for conventional zones.\n"));
- usage();
- }
cli->sb_feat.zoned = true;
cfg->rtstart =