File d1eea6c1-nodedev-increase-netlink-sockbuf.patch of Package libvirt.8364

commit d1eea6c12aad5cb503562a52915138bf0d0a70a2
Author: <>
Date:   Tue May 9 10:09:07 2017 +0800

    nodedev: Increase the netlink socket buffer size to the one used by udev
    When a number of SRIOV VFs (up to 128 on Intel XL710) is created:
    for i in `seq 0 1`; do
      echo 63 > /sys/class/net/<interface>/device/sriov_numvfs
    libvirtd will then report "udev_monitor_receive_device returned NULL"
    error because the netlink socket buffer is not big enough (using GDB on
    libudev confirmed this with ENOBUFFS) and thus some udev events were
    dropped. This results in some devices being missing in the nodedev-list
    output. This patch overrides the system's rmem_max limit but for that,
    we need to make sure we've got root privileges.
    Signed-off-by: <>
    Signed-off-by: Erik Skultety <>

Index: libvirt-2.0.0/src/node_device/node_device_udev.c
--- libvirt-2.0.0.orig/src/node_device/node_device_udev.c
+++ libvirt-2.0.0/src/node_device/node_device_udev.c
@@ -1481,6 +1481,13 @@ static int nodeStateInitialize(bool priv
+    /* mimic udevd's behaviour and override the systems rmem_max limit in case
+     * there's a significant number of device 'add' events
+     */
+    if (geteuid() == 0)
+        udev_monitor_set_receive_buffer_size(priv->udev_monitor,
+                                             128 * 1024 * 1024);
     /* We register the monitor with the event callback so we are
      * notified by udev of device changes before we enumerate existing
      * devices because libvirt will simply recreate the device if we
openSUSE Build Service is sponsored by