Blame SOURCES/libvirt-nodedev-Increase-the-netlink-socket-buffer-size-to-the-one-used-by-udev.patch

6d3351
From c0b489c317a0cd3b709008d742d6653634455ded Mon Sep 17 00:00:00 2001
6d3351
Message-Id: <c0b489c317a0cd3b709008d742d6653634455ded@dist-git>
6d3351
From: "ning.bo" <ning.bo9@zte.com.cn>
6d3351
Date: Mon, 29 May 2017 16:22:50 +0200
6d3351
Subject: [PATCH] nodedev: Increase the netlink socket buffer size to the one
6d3351
 used by udev
6d3351
6d3351
When a number of SRIOV VFs (up to 128 on Intel XL710) is created:
6d3351
for i in `seq 0 1`; do
6d3351
  echo 63 > /sys/class/net/<interface>/device/sriov_numvfs
6d3351
done
6d3351
6d3351
libvirtd will then report "udev_monitor_receive_device returned NULL"
6d3351
error because the netlink socket buffer is not big enough (using GDB on
6d3351
libudev confirmed this with ENOBUFFS) and thus some udev events were
6d3351
dropped. This results in some devices being missing in the nodedev-list
6d3351
output. This patch overrides the system's rmem_max limit but for that,
6d3351
we need to make sure we've got root privileges.
6d3351
6d3351
https://bugzilla.redhat.com/show_bug.cgi?id=1450960
6d3351
6d3351
Signed-off-by: ning.bo <ning.bo9@zte.com.cn>
6d3351
Signed-off-by: Erik Skultety <eskultet@redhat.com>
6d3351
(cherry picked from commit d1eea6c12aad5cb503562a52915138bf0d0a70a2)
6d3351
6d3351
https://bugzilla.redhat.com/show_bug.cgi?id=1442307
6d3351
Signed-off-by: Erik Skultety <eskultet@redhat.com>
6d3351
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
6d3351
---
6d3351
 src/node_device/node_device_udev.c | 7 +++++++
6d3351
 1 file changed, 7 insertions(+)
6d3351
6d3351
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
6d3351
index 37528ee48..20c0fc837 100644
6d3351
--- a/src/node_device/node_device_udev.c
6d3351
+++ b/src/node_device/node_device_udev.c
6d3351
@@ -1732,6 +1732,13 @@ static int nodeStateInitialize(bool privileged,
6d3351
 
6d3351
     udev_monitor_enable_receiving(priv->udev_monitor);
6d3351
 
6d3351
+    /* mimic udevd's behaviour and override the systems rmem_max limit in case
6d3351
+     * there's a significant number of device 'add' events
6d3351
+     */
6d3351
+    if (geteuid() == 0)
6d3351
+        udev_monitor_set_receive_buffer_size(priv->udev_monitor,
6d3351
+                                             128 * 1024 * 1024);
6d3351
+
6d3351
     /* We register the monitor with the event callback so we are
6d3351
      * notified by udev of device changes before we enumerate existing
6d3351
      * devices because libvirt will simply recreate the device if we
6d3351
-- 
6d3351
2.13.0
6d3351