On 2020/06/26 15:03, Javier González wrote: > On 26.06.2020 01:45, Damien Le Moal wrote: >> On 2020/06/25 21:22, Javier González wrote: >>> From: Javier González <javier.gonz@xxxxxxxxxxx> >>> >>> Add zone attributes field to the blk_zone structure. Use ZNS attributes >>> as base for zoned block devices in general. >>> >>> Signed-off-by: Javier González <javier.gonz@xxxxxxxxxxx> >>> Signed-off-by: SelvaKumar S <selvakuma.s1@xxxxxxxxxxx> >>> Signed-off-by: Kanchan Joshi <joshi.k@xxxxxxxxxxx> >>> Signed-off-by: Nitesh Shetty <nj.shetty@xxxxxxxxxxx> >>> --- >>> drivers/nvme/host/zns.c | 1 + >>> include/uapi/linux/blkzoned.h | 13 ++++++++++++- >>> 2 files changed, 13 insertions(+), 1 deletion(-) >>> >>> diff --git a/drivers/nvme/host/zns.c b/drivers/nvme/host/zns.c >>> index 258d03610cc0..7d8381fe7665 100644 >>> --- a/drivers/nvme/host/zns.c >>> +++ b/drivers/nvme/host/zns.c >>> @@ -195,6 +195,7 @@ static int nvme_zone_parse_entry(struct nvme_ns *ns, >>> zone.capacity = nvme_lba_to_sect(ns, le64_to_cpu(entry->zcap)); >>> zone.start = nvme_lba_to_sect(ns, le64_to_cpu(entry->zslba)); >>> zone.wp = nvme_lba_to_sect(ns, le64_to_cpu(entry->wp)); >>> + zone.attr = entry->za; >>> >>> return cb(&zone, idx, data); >>> } >>> diff --git a/include/uapi/linux/blkzoned.h b/include/uapi/linux/blkzoned.h >>> index 0c49a4b2ce5d..2e43a00e3425 100644 >>> --- a/include/uapi/linux/blkzoned.h >>> +++ b/include/uapi/linux/blkzoned.h >>> @@ -82,6 +82,16 @@ enum blk_zone_report_flags { >>> BLK_ZONE_REP_CAPACITY = (1 << 0), >>> }; >>> >>> +/** >>> + * Zone Attributes >> >> This is a user interface file. Please document the meaning of each attribute. >> > > Sure. > >>> + */ >>> +enum blk_zone_attr { >>> + BLK_ZONE_ATTR_ZFC = 1 << 0, >>> + BLK_ZONE_ATTR_FZR = 1 << 1, >>> + BLK_ZONE_ATTR_RZR = 1 << 2, >>> + BLK_ZONE_ATTR_ZDEV = 1 << 7, >> These are ZNS specific, right ? Integrating the 2 ZBC/ZAC attributes in this >> list would be nice, namely non_seq and reset. That will imply patching sd.c. >> > > Of course. I will look at non_seq and reset. Any other that should go > in here? See ZBC specs. These are the only 2 zone attributes defined. > >>> +}; >>> + >>> /** >>> * struct blk_zone - Zone descriptor for BLKREPORTZONE ioctl. >>> * >>> @@ -108,7 +118,8 @@ struct blk_zone { >>> __u8 cond; /* Zone condition */ >>> __u8 non_seq; /* Non-sequential write resources active */ >>> __u8 reset; /* Reset write pointer recommended */ >>> - __u8 resv[4]; >>> + __u8 attr; /* Zone attributes */ >>> + __u8 resv[3]; >>> __u64 capacity; /* Zone capacity in number of sectors */ >>> __u8 reserved[24]; >>> }; >>> >> >> You are missing a BLK_ZONE_REP_ATTR report flag to indicate to the user that the >> attr field is present, used and valid. >> >> enum blk_zone_report_flags { >> BLK_ZONE_REP_CAPACITY = (1 << 0), >> + BLK_ZONE_REP_ATTR = (1 << 1), >> }; >> >> is I think needed. > > Good point. I will add that on a V2. > > Javier > -- Damien Le Moal Western Digital Research