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)) {