From 12065bcfb0c51e262784a4b7587746565e85c62a Mon Sep 17 00:00:00 2001 From: Carter Li Date: Thu, 28 Dec 2023 10:28:21 +0800 Subject: [PATCH] PhysicalDisk (Linux): display nvme namespace id if needed --- src/detection/diskio/diskio_linux.c | 18 ++++++++++++++++++ .../physicaldisk/physicaldisk_linux.c | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/detection/diskio/diskio_linux.c b/src/detection/diskio/diskio_linux.c index 4a84f25a5..5edf65901 100644 --- a/src/detection/diskio/diskio_linux.c +++ b/src/detection/diskio/diskio_linux.c @@ -54,6 +54,24 @@ const char* ffDiskIOGetIoCounters(FFlist* result, FFDiskIOOptions* options) if (device->name.length == 0) ffStrbufSetS(&device->name, devName); + else if (ffStrStartsWith(devName, "nvme")) + { + int devid, nsid; + if (sscanf(devName, "nvme%dn%d", &devid, &nsid) == 2) + { + bool multiNs = nsid > 1; + if (!multiNs) + { + snprintf(pathSysBlock, PATH_MAX, "/sys/block/%s/device/nvme%dn2", devName, devid); + multiNs = ffPathExists(pathSysBlock, FF_PATHTYPE_DIRECTORY); + } + if (multiNs) + { + // In Asahi Linux, there are multiple namespaces for the same NVMe drive. + ffStrbufAppendF(&device->name, " - %d", nsid); + } + } + } if (options->namePrefix.length && !ffStrbufStartsWith(&device->name, &options->namePrefix)) { diff --git a/src/detection/physicaldisk/physicaldisk_linux.c b/src/detection/physicaldisk/physicaldisk_linux.c index 884339ca6..c1d6b4bdc 100644 --- a/src/detection/physicaldisk/physicaldisk_linux.c +++ b/src/detection/physicaldisk/physicaldisk_linux.c @@ -56,6 +56,24 @@ const char* ffDetectPhysicalDisk(FFlist* result, FFPhysicalDiskOptions* options) if (device->name.length == 0) ffStrbufSetS(&device->name, devName); + else if (ffStrStartsWith(devName, "nvme")) + { + int devid, nsid; + if (sscanf(devName, "nvme%dn%d", &devid, &nsid) == 2) + { + bool multiNs = nsid > 1; + if (!multiNs) + { + snprintf(pathSysBlock, PATH_MAX, "/sys/block/%s/device/nvme%dn2", devName, devid); + multiNs = ffPathExists(pathSysBlock, FF_PATHTYPE_DIRECTORY); + } + if (multiNs) + { + // In Asahi Linux, there are multiple namespaces for the same NVMe drive. + ffStrbufAppendF(&device->name, " - %d", nsid); + } + } + } if (options->namePrefix.length && !ffStrbufStartsWith(&device->name, &options->namePrefix)) {