From 529f94c64ad4fd6323b52aa4f03f98736ec3afc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Sun, 17 Dec 2023 12:21:12 +0800 Subject: [PATCH] DiskIO (Linux): better handling virtual devices --- src/detection/diskio/diskio_linux.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/detection/diskio/diskio_linux.c b/src/detection/diskio/diskio_linux.c index 8a83c4fc5..f904f672d 100644 --- a/src/detection/diskio/diskio_linux.c +++ b/src/detection/diskio/diskio_linux.c @@ -19,10 +19,15 @@ const char* ffDiskIOGetIoCounters(FFlist* result, FFDiskIOOptions* options) if (devName[0] == '.') continue; - if (ffStrStartsWith(devName, "dm-")) // LVM logical partitions - continue; char pathSysBlock[PATH_MAX]; + snprintf(pathSysBlock, PATH_MAX, "/sys/block/%s", devName); + + char pathSysDeviceReal[PATH_MAX] = ""; + readlink(pathSysBlock, pathSysDeviceReal, sizeof(pathSysDeviceReal) - 1); + + if (strstr(pathSysDeviceReal, "/virtual/")) // virtual device + continue; snprintf(pathSysBlock, PATH_MAX, "/sys/block/%s/device", devName); if (!ffPathExists(pathSysBlock, FF_PATHTYPE_DIRECTORY)) @@ -54,17 +59,9 @@ const char* ffDiskIOGetIoCounters(FFlist* result, FFDiskIOOptions* options) { ffStrbufInit(&device->interconnect); - snprintf(pathSysBlock, PATH_MAX, "/sys/block/%s", devName); - char pathSysDevices[PATH_MAX]; - ssize_t resultLength = readlink(pathSysBlock, pathSysDevices, sizeof(pathSysDevices) - 1); - if (resultLength > 0) - { - pathSysDevices[resultLength] = '\0'; - if (strstr(pathSysDevices, "/usb") != NULL) - ffStrbufSetS(&device->interconnect, "usb"); - } - - if (device->interconnect.length == 0) + if (strstr(pathSysDeviceReal, "/usb") != NULL) + ffStrbufSetS(&device->interconnect, "usb"); + else { snprintf(pathSysBlock, PATH_MAX, "/sys/block/%s/device/transport", devName); ffAppendFileBuffer(pathSysBlock, &device->interconnect);