mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-22 17:35:59 +03:00
9d0621267d
Reset the DM_UDEV_OTHER_RULES_FLAG to original value right at the time of dropping the DM_NOSCAN flag. When DM_NOSCAN is set, the DM_UDEV_DISABLE_OTHER_RULES_FLAG is also set to avoid udev processing in "other/foreign" rules. If the noscan flag is dropped, the DM_UDEV_DISABLE_OTHER_RULES_FLAG should be reset to its original value. Also, lvmetad should respect the DM_UDEV_DISABLE_OTHER_RULES_FLAG because if the volume is set with this flag it: - definitely is not a top-level device (so makes no sense for lvmetad scanning) - is not supposed to be scanned further (for any stacking on top of it, including LVM stacking itself and any autoactivation of stacked LVs)
55 lines
2.4 KiB
Plaintext
55 lines
2.4 KiB
Plaintext
# Copyright (C) 2009 Red Hat, Inc. All rights reserved.
|
|
#
|
|
# This file is part of LVM2.
|
|
|
|
# Udev rules for LVM.
|
|
#
|
|
# These rules create symlinks for LVM logical volumes in
|
|
# /dev/VG directory (VG is an actual VG name). Some udev
|
|
# environment variables are set (they can be used in later
|
|
# rules as well):
|
|
# DM_LV_NAME - logical volume name
|
|
# DM_VG_NAME - volume group name
|
|
# DM_LV_LAYER - logical volume layer (blank if not set)
|
|
|
|
# "add" event is processed on coldplug only!
|
|
ACTION!="add|change", GOTO="lvm_end"
|
|
ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="lvm_end"
|
|
ENV{DM_UUID}!="LVM-?*", GOTO="lvm_end"
|
|
|
|
# Use DM name and split it up into its VG/LV/layer constituents.
|
|
IMPORT{program}="(DM_EXEC)/dmsetup splitname --nameprefixes --noheadings --rows $env{DM_NAME}"
|
|
|
|
# DM_SUBSYSTEM_UDEV_FLAG0 is the 'NOSCAN' flag for LVM subsystem.
|
|
# This flag is used to temporarily disable selected rules to prevent any
|
|
# processing or scanning done on the LVM volume before LVM has any chance
|
|
# to zero any stale metadata found within the LV data area. Such stale
|
|
# metadata could cause false claim of the LV device, keeping it open etc.
|
|
#
|
|
# If the NOSCAN flag is present, backup selected existing flags used to
|
|
# disable rules, then set them firmly so those selected rules are surely skipped.
|
|
# Restore these flags once the NOSCAN flag is dropped (which is normally any
|
|
# uevent that follows for this LV, even an artificially generated one).
|
|
ENV{DM_SUBSYSTEM_UDEV_FLAG0}=="1", ENV{DM_NOSCAN}="1", ENV{DM_DISABLE_OTHER_RULES_FLAG_OLD}="$env{DM_UDEV_DISABLE_OTHER_RULES_FLAG}", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1"
|
|
ENV{DM_SUBSYSTEM_UDEV_FLAG0}!="1", IMPORT{db}="DM_NOSCAN", IMPORT{db}="DM_DISABLE_OTHER_RULES_FLAG_OLD"
|
|
ENV{DM_SUBSYSTEM_UDEV_FLAG0}!="1", ENV{DM_NOSCAN}=="1", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="$env{DM_DISABLE_OTHER_RULES_FLAG_OLD}", \
|
|
ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG_OLD}="", ENV{DM_NOSCAN}=""
|
|
|
|
ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}=="1", GOTO="lvm_end"
|
|
|
|
OPTIONS+="event_timeout=180"
|
|
|
|
# Do not create symlinks for inappropriate subdevices.
|
|
ENV{DM_LV_NAME}=="pvmove?*|?*_vorigin", GOTO="lvm_disable"
|
|
ENV{DM_LV_LAYER}=="?*", GOTO="lvm_disable"
|
|
|
|
# Create symlinks for top-level devices only.
|
|
ENV{DM_VG_NAME}=="?*", ENV{DM_LV_NAME}=="?*", SYMLINK+="$env{DM_VG_NAME}/$env{DM_LV_NAME}", GOTO="lvm_end"
|
|
|
|
LABEL="lvm_disable"
|
|
ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="1"
|
|
ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1"
|
|
OPTIONS:="nowatch"
|
|
|
|
LABEL="lvm_end"
|