[libvirt] [PATCH v2] nodedev: Increase the netlink socket buffer size to the one used by udev

Erik Skultety eskultet at redhat.com
Fri May 19 13:16:26 UTC 2017

From: "ning.bo" <ning.bo9 at zte.com.cn>

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: ning.bo <ning.bo9 at zte.com.cn>
Signed-off-by: Erik Skultety <eskultet at redhat.com>
Additionally, we might want to check for the errno, providing a specific
message if such issue occurs again in a further non-specified point in time and
return the generic, yet cryptic one for all other cases.

 src/node_device/node_device_udev.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
index 4ecb0b18f..0b3717397 100644
--- a/src/node_device/node_device_udev.c
+++ b/src/node_device/node_device_udev.c
@@ -1728,6 +1728,13 @@ static int nodeStateInitialize(bool privileged,


+    /* 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

More information about the libvir-list mailing list