- BZ#833172, BZ#885978, BZ#918511
- Previously, for machines with relatively big RAM sizes and lots of disks, a number of udevd workers were running in parallel, maximizing CPU and I/O. This could cause udev events to time out due to hardware bottlenecks. With this update, the number of udevd workers is limited by the CPU count and significantly lower on machines with a big RAM size. Now, fewer udev workers running concurrently do not bottleneck easily and cause less or no timeouts.
- Previously, the udev utility did not provide a symbolic link to SCM (Storage Class Memory) devices in the /dev/disk/by-path/ directory, which prevented SCM devices to be referenced by their paths. With this update, the path_id built-in command supports SCM devices and provides a symbolic link. Now, SCM devices can be referenced by their paths.
- Prior to this update, the libudev.h header file did not have any extern "C" declaration, so it could not be used as-is in a C++ programs or applications. An extern "C" declaration has been added to the header file, thus fixing the bug.
- Previously, the start_udev command called the "udevadm settle [options]" command and timed out after the default of 180 seconds. Nevertheless, some devices were not completely assembled and the boot process continued causing various failures. With this update, start_udev waits until udev has settled. As a result, all devices are assembled, and the boot process now continues without errors.
- If a SCSI device was in use at the time the udev scsi_id helper utility was invoked, scsi_id did not return any properties of the device. Consequently, the properties of the SCSI device could not be processed in udev rules. With this update, scsi_id retries to open the device for a certain time span before it gives up. As a result, the properties of a SCSI device can be processed in udev rules, even though the device is in use for a short time.
- For USB devices with InterfaceClass=0x08 and InterfaceSubClass=0x05, udev set the ID type as "floppy", which was not necessarily true. As a consequence, some tools could interpret the USB device as a floppy disk. Now, the ID type is set as "generic" for such USB devices, and tools interpret the USB devices correctly.
- Previously, the libudev utility was referencing memory, which had been reallocated with its old address into the dev_enumerate_get_list_entry() function. However, calling this function could lead to a segmentation fault. With this update, libudev references the reallocated memory with offsets in udev_enumerate_get_list_entry(), thus fixing the bug.
- Previously, the amount of debug output could not be controlled and often exceeded the available memory, if stored in the /dev/ temporary file. With this update, the start_udev command with udevlog now call the udevd daemon with the "-s" option, which redirects the output of udevd to the /dev/.udev/udev.log file but does not set udevd in the debug mode. In addition, udevd now understands the log priorities set in the rules file (OPTIONS+="log_priority=<level>"), so the user can set the numerical syslog priorities or their textual representations. There is also a new example rules file for logging: /lib/udev/rules.d/01-log-block.rules. To enable "info" logging for block devices, add "rd.log.block=info" to the kernel command line.