From 277312320147e80ef3df492fba15df80c10a5c8f Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Tue, 15 Mar 2022 14:52:05 +0100 Subject: [PATCH 1/2] collectd: remove not needed fix This was not a real fix but a workaround. It is no longer clear to me why this was necessary. Deleting the patch restores the upstream behaviour of the collected for the smart plugin. I have tested it and on my system the hard disk to be monitored is recognised. root@system ~ # cat /sys/class/block/sda/uevent MAJOR=8 MINOR=0 DEVNAME=sda DEVTYPE=disk Signed-off-by: Florian Eckert (cherry picked from commit a9ea1cf6ed08940be08c6d0170514665ac41d6c1) --- utils/collectd/patches/933-fix-smart-detection.patch | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 utils/collectd/patches/933-fix-smart-detection.patch diff --git a/utils/collectd/patches/933-fix-smart-detection.patch b/utils/collectd/patches/933-fix-smart-detection.patch deleted file mode 100644 index 70250d61b..000000000 --- a/utils/collectd/patches/933-fix-smart-detection.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/src/smart.c -+++ b/src/smart.c -@@ -610,7 +610,6 @@ static int smart_read(void) { - return -1; - } - udev_enumerate_add_match_subsystem(enumerate, "block"); -- udev_enumerate_add_match_property(enumerate, "DEVTYPE", "disk"); - udev_enumerate_scan_devices(enumerate); - devices = udev_enumerate_get_list_entry(enumerate); - if (devices == NULL) { From ebe9833ea080aaae16f9a06785be5ab613d7a5ae Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Tue, 15 Mar 2022 15:03:46 +0100 Subject: [PATCH 2/2] collectd: smart: add patch to check udev_enumerate_scan_devices return value The function udev_enumarte_scan_devices returns a value less than 0 on failure. If this is the case then we terminate the read for this smart information. This change was already send upstream. And could be delete in feature collectd versions. Signed-off-by: Florian Eckert (cherry picked from commit 896a0f0db66950b984f89b7f41bfdf60a47bc499) --- ..._enumerate_scan_devices-return-value.patch | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 utils/collectd/patches/941-Check-udev_enumerate_scan_devices-return-value.patch diff --git a/utils/collectd/patches/941-Check-udev_enumerate_scan_devices-return-value.patch b/utils/collectd/patches/941-Check-udev_enumerate_scan_devices-return-value.patch new file mode 100644 index 000000000..176c8f48f --- /dev/null +++ b/utils/collectd/patches/941-Check-udev_enumerate_scan_devices-return-value.patch @@ -0,0 +1,61 @@ +From 289f58c9c96d5478cf200f7a3e62b82e86b12d32 Mon Sep 17 00:00:00 2001 +From: Florian Eckert +Date: Tue, 15 Mar 2022 14:56:19 +0100 +Subject: [PATCH] Check udev_enumerate_scan_devices return value + +This change checks the return value of the function and cancels the call +if the returned integer is not greater than or equal to 0. + +Signed-off-by: Florian Eckert +--- + src/smart.c | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +--- a/src/smart.c ++++ b/src/smart.c +@@ -104,6 +104,7 @@ static int create_ignorelist_by_serial(i + struct udev_enumerate *enumerate; + struct udev_list_entry *devices, *dev_list_entry; + struct udev_device *dev; ++ int r; + + if (ignorelist_by_serial == NULL) + ignorelist_by_serial = ignorelist_create(invert_ignorelist); +@@ -127,7 +128,13 @@ static int create_ignorelist_by_serial(i + } + udev_enumerate_add_match_subsystem(enumerate, "block"); + udev_enumerate_add_match_property(enumerate, "DEVTYPE", "disk"); +- udev_enumerate_scan_devices(enumerate); ++ ++ r = udev_enumerate_scan_devices(enumerate); ++ if (r < 0) { ++ WARNING("smart plugin: udev scan devices failed"); ++ return -1; ++ } ++ + devices = udev_enumerate_get_list_entry(enumerate); + if (devices == NULL) { + ERROR("udev returned an empty list deviecs"); +@@ -597,6 +604,7 @@ static int smart_read(void) { + struct udev_enumerate *enumerate; + struct udev_list_entry *devices, *dev_list_entry; + struct udev_device *dev; ++ int r; + + /* Use udev to get a list of disks */ + handle_udev = udev_new(); +@@ -611,7 +619,13 @@ static int smart_read(void) { + } + udev_enumerate_add_match_subsystem(enumerate, "block"); + udev_enumerate_add_match_property(enumerate, "DEVTYPE", "disk"); +- udev_enumerate_scan_devices(enumerate); ++ ++ r = udev_enumerate_scan_devices(enumerate); ++ if (r < 0) { ++ WARNING("smart plugin: udev scan devices failed"); ++ return -1; ++ } ++ + devices = udev_enumerate_get_list_entry(enumerate); + if (devices == NULL) { + ERROR("udev returned an empty list deviecs");