{
_cleanup_free_ char *attr = NULL;
struct stat sb;
+ uint64_t size;
int ret;
struct sysfs_attr_table base[] = {
{ &ns->nsid, nvme_strtou32, true, "nsid" },
- { &ns->lba_count, nvme_strtou64, true, "size" },
+ { &size, nvme_strtou64, true, "size" },
{ &ns->lba_size, nvme_strtou64, true, "queue/logical_block_size" },
{ ns->eui64, nvme_strtoeuid, false, "eui" },
{ ns->nguid, nvme_strtouuid, false, "nguid" },
return ret;
ns->lba_shift = GETSHIFT(ns->lba_size);
+ /*
+ * size is in 512 bytes units and lba_count is in lba_size which are not
+ * necessarily the same.
+ */
+ ns->lba_count = size >> (ns->lba_shift - SECTOR_SHIFT);
if (asprintf(&attr, "%s/csi", path) < 0)
return -errno;