From b71bcc429683355eda93c4acf63f58b11332556c Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Mon, 20 Dec 2021 16:28:03 +0100 Subject: [PATCH] linux: Add nvme_get_logical_block_size() Add helper to retrieve logical block size using nvme_identify_ns(). Signed-off-by: Daniel Wagner --- src/libnvme.map | 1 + src/nvme/linux.c | 16 ++++++++++++++++ src/nvme/linux.h | 10 ++++++++++ 3 files changed, 27 insertions(+) diff --git a/src/libnvme.map b/src/libnvme.map index ac920f15..382be28d 100644 --- a/src/libnvme.map +++ b/src/libnvme.map @@ -132,6 +132,7 @@ LIBNVME_1_0 { nvme_get_log_telemetry_ctrl; nvme_get_log_telemetry_host; nvme_get_log_zns_changed_zones; + nvme_get_logical_block_size; nvme_get_new_host_telemetry; nvme_get_ns_attr; nvme_get_nsid; diff --git a/src/nvme/linux.c b/src/nvme/linux.c index fe4aad33..8fa92468 100644 --- a/src/nvme/linux.c +++ b/src/nvme/linux.c @@ -294,6 +294,22 @@ int nvme_get_ana_log_len(int fd, size_t *analen) return 0; } +int nvme_get_logical_block_size(int fd, __u32 nsid, int *blksize) +{ + struct nvme_id_ns ns; + int flbas; + int ret; + + ret = nvme_identify_ns(fd, nsid, &ns); + if (ret) + return ret; + + flbas = ns.flbas & NVME_NS_FLBAS_LBA_MASK; + *blksize = 1 << ns.lbaf[flbas].ds; + + return 0; +} + static int __nvme_set_attr(const char *path, const char *value) { int ret, fd; diff --git a/src/nvme/linux.h b/src/nvme/linux.h index 2a751a13..9842d43d 100644 --- a/src/nvme/linux.h +++ b/src/nvme/linux.h @@ -109,6 +109,16 @@ int nvme_get_log_page(int fd, __u32 nsid, __u8 log_id, bool rae, */ int nvme_get_ana_log_len(int fd, size_t *analen); +/** + * nvme_get_logical_block_size() - Retrieve block size + * @fd: File descriptor of nvme device + * @blksize: Pointer to where the block size will be set on success + * + * Return: The nvme command status if a response was received (see + * &enum nvme_status_field) or -1 with errno set otherwise. + */ +int nvme_get_logical_block_size(int fd, __u32 nsid, int *blksize); + /** * nvme_get_lba_status_log() - Retreive the LBA Status log page * @fd: File descriptor of the nvme device -- 2.50.1