]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: exclude DRBD from block device ownership event locking
authorRoland Kammerer <roland.kammerer@linbit.com>
Thu, 21 Jun 2018 09:32:32 +0000 (11:32 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 21 Jun 2018 12:46:27 +0000 (14:46 +0200)
It does not make sense for udev to even open DRBD block devices
(/dev/drbdX). It is on one hand not necessary as DRBD is controlled by
something else in the stack (e.g., pacemaker), and it even can get
cumbersome in various scenarios (e.g., DRBD9 auto-promote).

Closes: #9371
Signed-off-by: Roland Kammerer <roland.kammerer@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
src/udev/udevd.c

index da266bf035cadcaaa7828bbd80bf12d2add67cf2..34f6a9550368be419dc3f7e04fa34232c9e7b3f4 100644 (file)
@@ -311,6 +311,18 @@ static int worker_send_message(int fd) {
         return loop_write(fd, &message, sizeof(message), false);
 }
 
+static bool shall_lock_device(struct udev_device *dev) {
+        const char *sysname;
+
+        if (!streq_ptr("block", udev_device_get_subsystem(dev)))
+                return false;
+
+        sysname = udev_device_get_sysname(dev);
+        return !startswith(sysname, "dm-") &&
+               !startswith(sysname, "md") &&
+               !startswith(sysname, "drbd");
+}
+
 static void worker_spawn(Manager *manager, struct event *event) {
         struct udev *udev = event->udev;
         _cleanup_(udev_monitor_unrefp) struct udev_monitor *worker_monitor = NULL;
@@ -412,9 +424,7 @@ static void worker_spawn(Manager *manager, struct event *event) {
                          * udev has finished its event handling.
                          */
                         if (!streq_ptr(udev_device_get_action(dev), "remove") &&
-                            streq_ptr("block", udev_device_get_subsystem(dev)) &&
-                            !startswith(udev_device_get_sysname(dev), "dm-") &&
-                            !startswith(udev_device_get_sysname(dev), "md")) {
+                            shall_lock_device(dev)) {
                                 struct udev_device *d = dev;
 
                                 if (streq_ptr("partition", udev_device_get_devtype(d)))