On 2020/7/16 20:56, Aravind Ramesh wrote: > NVMe Zoned Namespace devices can have zone-capacity less than zone-size. > Zone-capacity indicates the maximum number of sectors that are usable in > a zone beginning from the first sector of the zone. This makes the sectors > sectors after the zone-capacity till zone-size to be unusable. > This patch set tracks zone-size and zone-capacity in zoned devices and > calculate the usable blocks per segment and usable segments per section. > > If zone-capacity is less than zone-size mark only those segments which > start before zone-capacity as free segments. All segments at and beyond > zone-capacity are treated as permanently used segments. In cases where > zone-capacity does not align with segment size the last segment will start > before zone-capacity and end beyond the zone-capacity of the zone. For > such spanning segments only sectors within the zone-capacity are used. > > During writes and GC manage the usable segments in a section and usable > blocks per segment. Segments which are beyond zone-capacity are never > allocated, and do not need to be garbage collected, only the segments > which are before zone-capacity needs to garbage collected. > For spanning segments based on the number of usable blocks in that > segment, write to blocks only up to zone-capacity. > > Zone-capacity is device specific and cannot be configured by the user. > Since NVMe ZNS device zones are sequentially write only, a block device > with conventional zones or any normal block device is needed along with > the ZNS device for the metadata operations of F2fs. > > A typical nvme-cli output of a zoned device shows zone start and capacity > and write pointer as below: > > SLBA: 0x0 WP: 0x0 Cap: 0x18800 State: EMPTY Type: SEQWRITE_REQ > SLBA: 0x20000 WP: 0x20000 Cap: 0x18800 State: EMPTY Type: SEQWRITE_REQ > SLBA: 0x40000 WP: 0x40000 Cap: 0x18800 State: EMPTY Type: SEQWRITE_REQ > > Here zone size is 64MB, capacity is 49MB, WP is at zone start as the zones > are in EMPTY state. For each zone, only zone start + 49MB is usable area, > any lba/sector after 49MB cannot be read or written to, the drive will fail > any attempts to read/write. So, the second zone starts at 64MB and is > usable till 113MB (64 + 49) and the range between 113 and 128MB is > again unusable. The next zone starts at 128MB, and so on. > > Signed-off-by: Aravind Ramesh <aravind.ramesh@xxxxxxx> > Signed-off-by: Damien Le Moal <damien.lemoal@xxxxxxx> > Signed-off-by: Niklas Cassel <niklas.cassel@xxxxxxx> Reviewed-by: Chao Yu <yuchao0@xxxxxxxxxx> Thanks,