diff --git a/1054-udev-exclude-MD-from-block-device-ownership-event-lo.patch b/1054-udev-exclude-MD-from-block-device-ownership-event-lo.patch new file mode 100644 index 00000000..ecf11ad5 --- /dev/null +++ b/1054-udev-exclude-MD-from-block-device-ownership-event-lo.patch @@ -0,0 +1,53 @@ +From 2e5b17d01347d3c3118be2b8ad63d20415dbb1f0 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Thu, 24 Jul 2014 23:37:35 +0200 +Subject: [PATCH] udev: exclude MD from block device ownership event locking + +MD instantiates devices at open(). This is incomptible with the +locking logic, as the "change" event emitted when stopping a +device will bring it back. +--- + src/udev/udevd.c | 23 +++++++---------------- + 1 file changed, 7 insertions(+), 16 deletions(-) + +diff --git src/udev/udevd.c src/udev/udevd.c +index a45d324..db935d6 100644 +--- src/udev/udevd.c ++++ src/udev/udevd.c +@@ -285,26 +285,17 @@ static void worker_new(struct event *event) + udev_event->exec_delay = exec_delay; + + /* +- * Take a "read lock" on the device node; this establishes ++ * Take a shared lock on the device node; this establishes + * a concept of device "ownership" to serialize device +- * access. External processes holding a "write lock" will ++ * access. External processes holding an exclusive lock will + * cause udev to skip the event handling; in the case udev +- * acquired the lock, the external process will block until ++ * acquired the lock, the external process can block until + * udev has finished its event handling. + */ +- +- /* +- * since we make check - device seems unused - we try +- * ioctl to deactivate - and device is found to be opened +- * sure, you try to take a write lock +- * if you get it udev is out +- * if you can't get it, udev is busy +- * we cannot deactivate openned device (as it is in-use) +- * maybe we should just exclude dm from that thing entirely +- * IMHO this sounds like a good plan for this moment +- */ +- if (streq_ptr("block", udev_device_get_subsystem(dev)) && +- !startswith(udev_device_get_sysname(dev), "dm-")) { ++ 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")) { + struct udev_device *d = dev; + + if (streq_ptr("partition", udev_device_get_devtype(d))) +-- +1.7.9.2 + diff --git a/systemd-mini.changes b/systemd-mini.changes index 974914d5..6d7b6869 100644 --- a/systemd-mini.changes +++ b/systemd-mini.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Fri Jul 25 09:37:56 UTC 2014 - werner@suse.de + +- Add upstream patch + 1054-udev-exclude-MD-from-block-device-ownership-event-lo.patch +- Add with condition blkrrpart to be able to disable the patches + 1025, 1027, 1029, 1030, 1031, 1032, 1033, 1034, 1037, and 1054 + which uses the BLKRRPART ioctl for e.g. synthesize change events + which may interfere with other tools like parted. + ------------------------------------------------------------------- Thu Jul 24 13:05:42 UTC 2014 - fcrozat@suse.com diff --git a/systemd-mini.spec b/systemd-mini.spec index dc81db2d..f39657d0 100644 --- a/systemd-mini.spec +++ b/systemd-mini.spec @@ -33,6 +33,7 @@ %endif %bcond_with udevsettle %bcond_with permission +%bcond_without blkrrpart Name: systemd-mini Url: http://www.freedesktop.org/wiki/Software/systemd @@ -835,6 +836,8 @@ Patch1051: 1051-check-if-NAME-has-a-value.patch Patch1052: 1052-rules-uaccess-add-ID_SOFTWARE_RADIO.patch # PATCH-FIX-SUSE 1053-better-checks-in-write_net_rules.patch (bnc#888178) Patch1053: 1053-better-checks-in-write_net_rules.patch +# PATCH-FIX-SUSE 0001-udev-exclude-MD-from-block-device-ownership-event-lo.patch +Patch1054: 1054-udev-exclude-MD-from-block-device-ownership-event-lo.patch %description Systemd is a system and service manager, compatible with SysV and LSB @@ -1374,19 +1377,27 @@ cp %{SOURCE7} m4/ %endif %patch1023 -p0 %patch1024 -p0 +%if %{with blkrrpart} %patch1025 -p1 +%endif %patch1026 -p1 +%if %{with blkrrpart} %patch1027 -p1 +%endif %patch1028 -p1 +%if %{with blkrrpart} %patch1029 -p1 %patch1030 -p1 %patch1031 -p1 %patch1032 -p1 %patch1033 -p1 %patch1034 -p1 +%endif %patch1035 -p1 %patch1036 -p1 +%if %{with blkrrpart} %patch1037 -p1 +%endif %patch1038 -p0 %if %{with udevsettle} %patch1039 -p0 @@ -1407,6 +1418,9 @@ cp %{SOURCE7} m4/ %patch1051 -p1 %patch1052 -p0 %patch1053 -p1 +%if %{with blkrrpart} +%patch1054 -p0 +%endif # ensure generate files are removed rm -f units/emergency.service diff --git a/systemd.changes b/systemd.changes index 974914d5..6d7b6869 100644 --- a/systemd.changes +++ b/systemd.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Fri Jul 25 09:37:56 UTC 2014 - werner@suse.de + +- Add upstream patch + 1054-udev-exclude-MD-from-block-device-ownership-event-lo.patch +- Add with condition blkrrpart to be able to disable the patches + 1025, 1027, 1029, 1030, 1031, 1032, 1033, 1034, 1037, and 1054 + which uses the BLKRRPART ioctl for e.g. synthesize change events + which may interfere with other tools like parted. + ------------------------------------------------------------------- Thu Jul 24 13:05:42 UTC 2014 - fcrozat@suse.com diff --git a/systemd.spec b/systemd.spec index 568c84eb..27a15606 100644 --- a/systemd.spec +++ b/systemd.spec @@ -31,6 +31,7 @@ %endif %bcond_with udevsettle %bcond_with permission +%bcond_without blkrrpart Name: systemd Url: http://www.freedesktop.org/wiki/Software/systemd @@ -830,6 +831,8 @@ Patch1051: 1051-check-if-NAME-has-a-value.patch Patch1052: 1052-rules-uaccess-add-ID_SOFTWARE_RADIO.patch # PATCH-FIX-SUSE 1053-better-checks-in-write_net_rules.patch (bnc#888178) Patch1053: 1053-better-checks-in-write_net_rules.patch +# PATCH-FIX-SUSE 0001-udev-exclude-MD-from-block-device-ownership-event-lo.patch +Patch1054: 1054-udev-exclude-MD-from-block-device-ownership-event-lo.patch %description Systemd is a system and service manager, compatible with SysV and LSB @@ -1369,19 +1372,27 @@ cp %{SOURCE7} m4/ %endif %patch1023 -p0 %patch1024 -p0 +%if %{with blkrrpart} %patch1025 -p1 +%endif %patch1026 -p1 +%if %{with blkrrpart} %patch1027 -p1 +%endif %patch1028 -p1 +%if %{with blkrrpart} %patch1029 -p1 %patch1030 -p1 %patch1031 -p1 %patch1032 -p1 %patch1033 -p1 %patch1034 -p1 +%endif %patch1035 -p1 %patch1036 -p1 +%if %{with blkrrpart} %patch1037 -p1 +%endif %patch1038 -p0 %if %{with udevsettle} %patch1039 -p0 @@ -1402,6 +1413,9 @@ cp %{SOURCE7} m4/ %patch1051 -p1 %patch1052 -p0 %patch1053 -p1 +%if %{with blkrrpart} +%patch1054 -p0 +%endif # ensure generate files are removed rm -f units/emergency.service