mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-23 21:35:29 +03:00
7a7b8a7778
The current logic that avoids setting SYSTEMD_ALIAS and SYSTEMD_WANTS on "change" events is flawed in the default "systemd background job" configuration. For systemd, it's important that device properties don't change spuriously. If an "add" event starts lvm2-pvscan@.service for a device, and a "change" event follows, removing SYSTEMD_ALIAS and SYSTEMD_WANTS from the udev db, information about unit dependencies between the device and the pvscan service can be lost in systemd, in particular if the daemon configuration is reloaded. Steps to reproduce problem: - create a device with an LVM PV - remove device - add device (generates "add" and "change" uevents for the device) (at this point SYSTEMD_ALIAS and SYSTEMD_WANTS are clear in udev db) - systemctl daemon-reload (systemd reloads udev db) - vgchange -a n - remove device => the lvm2-pvscan@.service for the device is still active although the device is gone. - add device again => the PV is not detected, because systemd sees the lvm2-pvscan@.service as active and thus doesn't restart it. The original purpose of this logic was to avoid volumes being scanned over and over again. With systemd background jobs, that isn't necessary, because systemd will not restart the job as long as it's active. Signed-off-by: Martin Wilck <mwilck@suse.com>
69 lines
2.2 KiB
Makefile
69 lines
2.2 KiB
Makefile
#
|
|
# Copyright (C) 2009-2010 Red Hat, Inc. All rights reserved.
|
|
#
|
|
# This file is part of LVM2.
|
|
#
|
|
# This copyrighted material is made available to anyone wishing to use,
|
|
# modify, copy, or redistribute it subject to the terms and conditions
|
|
# of the GNU General Public License v.2.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software Foundation,
|
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
srcdir = @srcdir@
|
|
top_srcdir = @top_srcdir@
|
|
top_builddir = @top_builddir@
|
|
|
|
include $(top_builddir)/make.tmpl
|
|
|
|
DM_RULES=10-dm.rules 13-dm-disk.rules 95-dm-notify.rules
|
|
LVM_RULES=11-dm-lvm.rules
|
|
ifeq ("@BUILD_LVMETAD@", "yes")
|
|
LVM_RULES+=69-dm-lvm-metad.rules
|
|
endif
|
|
|
|
DM_DIR=$(shell $(GREP) "\#define DM_DIR" $(top_srcdir)/libdm/misc/dm-ioctl.h | $(AWK) '{print $$3}')
|
|
|
|
BINDIR=@bindir@
|
|
ifeq ("@UDEV_RULE_EXEC_DETECTION@", "yes")
|
|
SBIN=\$$env{DM_SBIN_PATH}
|
|
DM_EXEC_RULE=ENV{DM_SBIN_PATH}=\"\/sbin\"\\nTEST!=\"\$$env{DM_SBIN_PATH}\/dmsetup\", ENV{DM_SBIN_PATH}=\"\/usr\/sbin\"
|
|
DM_EXEC=\$$env{DM_SBIN_PATH}
|
|
LVM_EXEC_RULE=ENV{LVM_SBIN_PATH}=\"\/sbin\"\\nTEST!=\"\$$env{LVM_SBIN_PATH}\/lvm\", ENV{LVM_SBIN_PATH}=\"\/usr\/sbin\"
|
|
LVM_EXEC=\$$env{LVM_SBIN_PATH}
|
|
else
|
|
SBIN="@sbindir@"
|
|
DM_EXEC_RULE=""
|
|
DM_EXEC=${SBIN}
|
|
LVM_EXEC_RULE=""
|
|
LVM_EXEC=${SBIN}
|
|
endif
|
|
|
|
ifeq ("@UDEV_HAS_BUILTIN_BLKID@", "yes")
|
|
BLKID_RULE=IMPORT{builtin}=\"blkid\"
|
|
else
|
|
BLKID_RULE=IMPORT{program}=\"${SBIN}\/blkid -o udev -p \$$tempnode\"
|
|
endif
|
|
|
|
ifeq ("@UDEV_SYSTEMD_BACKGROUND_JOBS@", "yes")
|
|
PVSCAN_RULE=systemd_background
|
|
PVSCAN_ACTION=add|change
|
|
else
|
|
PVSCAN_RULE=direct_pvscan
|
|
PVSCAN_ACTION=add
|
|
endif
|
|
|
|
%.rules: $(srcdir)/%.rules.in
|
|
$(SED) -e "s+(DM_DIR)+$(DM_DIR)+;s+(BINDIR)+$(BINDIR)+;s+(BLKID_RULE)+$(BLKID_RULE)+;s+(PVSCAN_RULE)+$(PVSCAN_RULE)+;s+(PVSCAN_ACTION)+$(PVSCAN_ACTION)+;s+(DM_EXEC_RULE)+$(DM_EXEC_RULE)+;s+(DM_EXEC)+$(DM_EXEC)+;s+(LVM_EXEC_RULE)+$(LVM_EXEC_RULE)+;s+(LVM_EXEC)+$(LVM_EXEC)+;" $< >$@
|
|
|
|
%_install: %.rules
|
|
$(INSTALL_DATA) -D $< $(udevdir)/$(<F)
|
|
|
|
all: $(DM_RULES) $(LVM_RULES)
|
|
CLEAN_TARGETS = $(DM_RULES) $(LVM_RULES)
|
|
install_device-mapper: $(DM_RULES:.rules=_install)
|
|
install_lvm2: $(LVM_RULES:.rules=_install)
|
|
|
|
install: install_lvm2 install_device-mapper
|