Autoactivate VG/LV on coldplug of DM-based PVs at boot.

This commit is contained in:
Peter Rajnoha 2013-04-19 14:19:55 +02:00
parent 40c9afff51
commit 19cc44730e
2 changed files with 79 additions and 1 deletions

View File

@ -0,0 +1,73 @@
commit 764195207d4773cf6f1674a2fb16e9a0acda304a
Author: Peter Rajnoha <prajnoha@redhat.com>
Date: Fri Apr 19 12:17:53 2013 +0200
udev: also autoactivate on coldplug
Commit 756bcabbfe297688ba240a880bc2b55265ad33f0 fixed autoactivation
to not trigger on each uevent for a PV that appeared in the system
most notably the events that are triggered artificially (udevadm
trigger or as the result of the WATCH udev rule being applied that
consequently generates CHANGE uevents). This fixed a situation in
which VGs/LVs were activated when they should not.
BUT we still need to care about the coldplug used at boot to
retrigger the ADD events - the "udevadm trigger --action=add"!
For non-DM-based PVs, this is already covered as for these we
run the autoactivation on ADD event only.
However, for DM-based PVs, we still need to run the
autoactivation even for the artificial ADD event, reusing
the udev DB content from previous proper CHANGE event that
came with the DM device activation.
Simply, this patch fixes a situation in which we run extra
"udevadm trigger --action=add" (or echo add > /sys/block/<dev>/uevent)
for DM-based PVs (cryptsetup devices, multipath devices, any
other DM devices...).
Without this patch, while using lvmetad + autoactivation,
any VG/LV that has a DM-based PV and for which we do not
call the activation directly, the VG/LV is not activated.
For example a VG with an LV with root FS on it which is directly
activated in initrd and then missing activation of the rest
of the LVs in the VG because of unhandled uevent retrigger on
boot after switching to root FS (the "coldplug").
(No WHATS_NEW here as this fixes the commit mentioned
above and which was not released yet.)
---
udev/10-dm.rules.in | 5 ++++-
udev/69-dm-lvm-metad.rules.in | 1 +
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/udev/10-dm.rules.in b/udev/10-dm.rules.in
index cfee145..512d156 100644
--- a/udev/10-dm.rules.in
+++ b/udev/10-dm.rules.in
@@ -77,7 +77,10 @@ LABEL="dm_flags_done"
# before (e.g. in initrd). If udev is used in initrd, we require the udev init
# script to not remove the existing udev database so we can reuse the information
# stored at the time of device activation in the initrd.
-ACTION=="add", ENV{DM_UDEV_RULES_VSN}!="1", ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="1", GOTO="dm_disable"
+ACTION!="add", GOTO="dm_no_coldplug"
+ENV{DM_UDEV_RULES_VSN}!="1", ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="1", GOTO="dm_disable"
+ENV{DM_ACTIVATION}="1"
+LABEL="dm_no_coldplug"
# "dm" sysfs subdirectory is available in newer versions of DM
# only (kernels >= 2.6.29). We have to check for its existence
diff --git a/udev/69-dm-lvm-metad.rules.in b/udev/69-dm-lvm-metad.rules.in
index b16a27a..66c58b3 100644
--- a/udev/69-dm-lvm-metad.rules.in
+++ b/udev/69-dm-lvm-metad.rules.in
@@ -26,6 +26,7 @@ ACTION=="remove", GOTO="lvm_scan"
KERNEL!="dm-[0-9]*", ACTION!="add", GOTO="lvm_end"
# If the PV is a dm device, scan only after proper mapping activation (CHANGE event + DM_ACTIVATION=1)
+# or after a coldplug (event retrigger) with "add" event (ADD event + DM_ACTIVATION=1)
KERNEL=="dm-[0-9]*", ENV{DM_ACTIVATION}!="1", GOTO="lvm_end"
LABEL="lvm_scan"

View File

@ -37,7 +37,7 @@
Summary: Userland logical volume management tools Summary: Userland logical volume management tools
Name: lvm2 Name: lvm2
Version: 2.02.98 Version: 2.02.98
Release: 6%{?dist} Release: 7%{?dist}
License: GPLv2 License: GPLv2
Group: System Environment/Base Group: System Environment/Base
URL: http://sources.redhat.com/lvm2 URL: http://sources.redhat.com/lvm2
@ -56,6 +56,7 @@ Patch10: lvm2-2_02_99-exit-pvscan-cache-immediately-if-cluster-locking-used-or-l
Patch11: lvm2-2_02_99-skip-mlocking-verctors-on-arm-arch.patch Patch11: lvm2-2_02_99-skip-mlocking-verctors-on-arm-arch.patch
Patch12: lvm2-2_02_99-fix-autoactivation-to-not-autoactivate-vg-lv-on-each-pv-change.patch Patch12: lvm2-2_02_99-fix-autoactivation-to-not-autoactivate-vg-lv-on-each-pv-change.patch
Patch13: lvm2-2_02_99-synchronize-with-udev-in-pvscan-cache-and-fix-dangling-udev_sync-cookies.patch Patch13: lvm2-2_02_99-synchronize-with-udev-in-pvscan-cache-and-fix-dangling-udev_sync-cookies.patch
Patch14: lvm2-2_02_99-also-autoactivate-on-coldplug.patch
BuildRequires: libselinux-devel >= %{libselinux_version}, libsepol-devel BuildRequires: libselinux-devel >= %{libselinux_version}, libsepol-devel
BuildRequires: ncurses-devel BuildRequires: ncurses-devel
@ -104,6 +105,7 @@ or more physical volumes and creating one or more logical volumes
%patch11 -p1 -b .arm_vectors %patch11 -p1 -b .arm_vectors
%patch12 -p1 -b .autoactivation %patch12 -p1 -b .autoactivation
%patch13 -p1 -b .dangling_cookies %patch13 -p1 -b .dangling_cookies
%patch14 -p1 -b .coldplug
%build %build
%define _default_pid_dir /run %define _default_pid_dir /run
@ -600,6 +602,9 @@ the device-mapper event library.
%{_libdir}/pkgconfig/devmapper-event.pc %{_libdir}/pkgconfig/devmapper-event.pc
%changelog %changelog
* Fri Apr 19 2013 Peter Rajnoha <prajnoha@redhat.com> - 2.02.98-7
- Autoactivate VG/LV on coldplug of DM-based PVs at boot.
* Tue Apr 09 2013 Peter Rajnoha <prajnoha@redhat.com> - 2.02.98-6 * Tue Apr 09 2013 Peter Rajnoha <prajnoha@redhat.com> - 2.02.98-6
- Synchronize with udev in pvscan --cache and fix dangling udev_sync cookies. - Synchronize with udev in pvscan --cache and fix dangling udev_sync cookies.
- Fix autoactivation to not autoactivate VG/LV on each change of the PVs used. - Fix autoactivation to not autoactivate VG/LV on each change of the PVs used.