From: Ankit Kumar Date: Mon, 15 May 2023 11:03:39 +0000 (+0530) Subject: engines/nvme: support for 64 LBA formats X-Git-Tag: fio-3.35~12 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=01a7d384d4c78f23b03f79e8002e705ea5cbceb4;p=fio.git engines/nvme: support for 64 LBA formats The NVM command set specification 1.0c supports 64 LBA formats. The 0-based nlbaf field specifies the number of LBA formats. The flbas field is used to calculate the current LBA format, in which bit 0-3 indicates lsb and bit 5-6 indicates msb of the format index. Signed-off-by: Ankit Kumar Signed-off-by: Vincent Fu --- diff --git a/engines/nvme.c b/engines/nvme.c index fd2161f3..96a5f064 100644 --- a/engines/nvme.c +++ b/engines/nvme.c @@ -99,6 +99,7 @@ int fio_nvme_get_info(struct fio_file *f, __u32 *nsid, __u32 *lba_sz, struct nvme_id_ns ns; int namespace_id; int fd, err; + __u32 format_idx; if (f->filetype != FIO_TYPE_CHAR) { log_err("ioengine io_uring_cmd only works with nvme ns " @@ -131,7 +132,18 @@ int fio_nvme_get_info(struct fio_file *f, __u32 *nsid, __u32 *lba_sz, } *nsid = namespace_id; - *lba_sz = 1 << ns.lbaf[(ns.flbas & 0x0f)].ds; + + /* + * 16 or 64 as maximum number of supported LBA formats. + * From flbas bit 0-3 indicates lsb and bit 5-6 indicates msb + * of the format index used to format the namespace. + */ + if (ns.nlbaf < 16) + format_idx = ns.flbas & 0xf; + else + format_idx = (ns.flbas & 0xf) + (((ns.flbas >> 5) & 0x3) << 4); + + *lba_sz = 1 << ns.lbaf[format_idx].ds; *nlba = ns.nsze; close(fd); diff --git a/engines/nvme.h b/engines/nvme.h index 408594d5..9d6288c8 100644 --- a/engines/nvme.h +++ b/engines/nvme.h @@ -134,8 +134,7 @@ struct nvme_id_ns { __le16 endgid; __u8 nguid[16]; __u8 eui64[8]; - struct nvme_lbaf lbaf[16]; - __u8 rsvd192[192]; + struct nvme_lbaf lbaf[64]; __u8 vs[3712]; };