commit 3395a0aa79286ce9c3df283fd9fb6db14dbbc333 Author: Aaron Tomlin Date: Wed Mar 11 15:14:16 2026 -0400 nfsrahead: quieten misleading error for non-NFS block devices When get_device_info() evaluates a physical block device via the fast-path rejection logic, it deliberately returns -ENODEV. Previously, main() handled this by logging a D_GENERAL error ("unable to find device"). Because udev invokes nfsrahead for all block devices across the system, this results in misleading journal spam for devices that were intentionally skipped, rather than genuinely missing. Update the error handling logic in main() to explicitly catch the -ENODEV return code. When encountered, log a more accurate "skipping non-NFS device" message at the D_ALL debugging level. This prevents unnecessary journal noise whilst maintaining the existing behaviour of returning the errno exit status. Reported-by: Yi Zhang Tested-by: Yi Zhang Signed-off-by: Aaron Tomlin Signed-off-by: Steve Dickson commit 20fa4785ce5235c41fd27044d7fdef377dd0e088 Author: Aaron Tomlin Date: Wed Mar 11 12:41:28 2026 -0400 nfsrahead: zero-initialise device_info struct A recent commit introduced a fast-path rejection mechanism to prevent udev worker thread exhaustion. However, this optimisation exposed a bug in the initialisation of the device_info struct in main(). When the fast-path is triggered (e.g., for a physical block device like 8:16), get_device_info() instantly returns -ENODEV. Because this early exit occurs before get_mountinfo() is invoked, init_device_info() is never called. Consequently, the device_info struct remains populated with uninitialised stack memory. When main() catches the error and jumps to the cleanup path, free_device_info() attempts to call free() on garbage pointers, resulting in a glibc abort(3). Fix this by explicitly zero-initialising the device_info struct at declaration, preventing the cleanup path from freeing uninitialised memory during an early exit. Fixes: 0f5fe65d ("nfsrahead: fix udev worker exhaustion by skipping non-NFS devices") Reported-by: Yi Zhang Tested-by: Yi Zhang Signed-off-by: Aaron Tomlin Signed-off-by: Steve Dickson