return ret;
 
        rep.nr_zones = ret;
+       rep.flags = BLK_ZONE_REP_CAPACITY;
        if (copy_to_user(argp, &rep, sizeof(struct blk_zone_report)))
                return -EFAULT;
        return 0;
 
 
                zone->start = sector;
                zone->len = dev->zone_size_sects;
+               zone->capacity = zone->len;
                zone->wp = zone->start + zone->len;
                zone->type = BLK_ZONE_TYPE_CONVENTIONAL;
                zone->cond = BLK_ZONE_COND_NOT_WP;
 
                zone->start = zone->wp = sector;
                zone->len = dev->zone_size_sects;
+               zone->capacity = zone->len;
                zone->type = BLK_ZONE_TYPE_SEQWRITE_REQ;
                zone->cond = BLK_ZONE_COND_EMPTY;
 
 
                zone.non_seq = 1;
 
        zone.len = logical_to_sectors(sdp, get_unaligned_be64(&buf[8]));
+       zone.capacity = zone.len;
        zone.start = logical_to_sectors(sdp, get_unaligned_be64(&buf[16]));
        zone.wp = logical_to_sectors(sdp, get_unaligned_be64(&buf[24]));
        if (zone.type != ZBC_ZONE_TYPE_CONV &&
 
        BLK_ZONE_COND_OFFLINE   = 0xF,
 };
 
+/**
+ * enum blk_zone_report_flags - Feature flags of reported zone descriptors.
+ *
+ * @BLK_ZONE_REP_CAPACITY: Zone descriptor has capacity field.
+ */
+enum blk_zone_report_flags {
+       BLK_ZONE_REP_CAPACITY   = (1 << 0),
+};
+
 /**
  * struct blk_zone - Zone descriptor for BLKREPORTZONE ioctl.
  *
        __u8    cond;           /* Zone condition */
        __u8    non_seq;        /* Non-sequential write resources active */
        __u8    reset;          /* Reset write pointer recommended */
-       __u8    reserved[36];
+       __u8    resv[4];
+       __u64   capacity;       /* Zone capacity in number of sectors */
+       __u8    reserved[24];
 };
 
 /**
 struct blk_zone_report {
        __u64           sector;
        __u32           nr_zones;
-       __u8            reserved[4];
+       __u32           flags;
        struct blk_zone zones[0];
 };