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. > + */ > +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. > +}; > + > /** > * 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. -- Damien Le Moal Western Digital Research