mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-23 17:34:00 +03:00
565754a37e
Currently, 99-systemd.rules.in contains a line for network block devices, which mark them as inactive until the first change event, and as active from then on forward. This is not correct. A network block device can be connected or disconnected; this state is signalled by the presence or absense of a "pid" file, which contains the PID of the nbd client userspace process that started the connection. Update the rules file so that it checks for the presence of that file to decide what to set SYSTEMD_READY to. Note that current kernels do issue a change event upon connecting the device, but not yet upon disconnecting. While it's possible to wait until that's been fixed, the behaviour of the rule with TEST!="pid" in the absence of a proper uevent is exactly the same as the behaviour of the old rule; so it should be safe to apply now. Signed-off-by: Wouter Verhelst <w@uter.be>
68 lines
3.8 KiB
Plaintext
68 lines
3.8 KiB
Plaintext
# This file is part of systemd.
|
|
#
|
|
# systemd is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU Lesser General Public License as published by
|
|
# the Free Software Foundation; either version 2.1 of the License, or
|
|
# (at your option) any later version.
|
|
|
|
ACTION=="remove", GOTO="systemd_end"
|
|
|
|
SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*|ttysclp*|sclp_line*|3270/tty[0-9]*", TAG+="systemd"
|
|
KERNEL=="vport*", TAG+="systemd"
|
|
|
|
SUBSYSTEM=="block", TAG+="systemd"
|
|
SUBSYSTEM=="block", ACTION=="add", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", ENV{SYSTEMD_READY}="0"
|
|
|
|
# Ignore encrypted devices with no identified superblock on it, since
|
|
# we are probably still calling mke2fs or mkswap on it.
|
|
SUBSYSTEM=="block", ENV{DM_UUID}=="CRYPT-*", ENV{ID_PART_TABLE_TYPE}=="", ENV{ID_FS_USAGE}=="", ENV{SYSTEMD_READY}="0"
|
|
|
|
# Ignore raid devices that are not yet assembled and started
|
|
SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="md*", TEST!="md/array_state", ENV{SYSTEMD_READY}="0"
|
|
SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="md*", ATTR{md/array_state}=="|clear|inactive", ENV{SYSTEMD_READY}="0"
|
|
|
|
# Ignore loop devices that don't have any file attached
|
|
SUBSYSTEM=="block", KERNEL=="loop[0-9]*", ENV{DEVTYPE}=="disk", TEST!="loop/backing_file", ENV{SYSTEMD_READY}="0"
|
|
|
|
# Ignore nbd devices until the PID file exists (which signals a connected device)
|
|
SUBSYSTEM=="block", KERNEL=="nbd*", ENV{DEVTYPE}=="disk", TEST!="pid", ENV{SYSTEMD_READY}="0"
|
|
|
|
# We need a hardware independent way to identify network devices. We
|
|
# use the /sys/subsystem/ path for this. Kernel "bus" and "class" names
|
|
# should be treated as one namespace, like udev handles it. This is mostly
|
|
# just an identification string for systemd, so whether the path actually is
|
|
# accessible or not does not matter as long as it is unique and in the
|
|
# filesystem namespace.
|
|
#
|
|
# http://cgit.freedesktop.org/systemd/systemd/tree/src/libudev/libudev-enumerate.c#n955
|
|
|
|
SUBSYSTEM=="net", KERNEL!="lo", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsystem/net/devices/$name"
|
|
SUBSYSTEM=="bluetooth", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsystem/bluetooth/devices/%k"
|
|
|
|
SUBSYSTEM=="bluetooth", TAG+="systemd", ENV{SYSTEMD_WANTS}+="bluetooth.target"
|
|
ENV{ID_SMARTCARD_READER}=="?*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="smartcard.target"
|
|
SUBSYSTEM=="sound", KERNEL=="card*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sound.target"
|
|
|
|
SUBSYSTEM=="printer", TAG+="systemd", ENV{SYSTEMD_WANTS}+="printer.target"
|
|
SUBSYSTEM=="usb", KERNEL=="lp*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="printer.target"
|
|
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="printer.target"
|
|
|
|
# Apply sysctl variables to network devices (and only to those) as they appear.
|
|
ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="@rootlibexecdir@/systemd-sysctl --prefix=/net/ipv4/conf/$name --prefix=/net/ipv4/neigh/$name --prefix=/net/ipv6/conf/$name --prefix=/net/ipv6/neigh/$name"
|
|
|
|
# Pull in backlight save/restore for all backlight devices and
|
|
# keyboard backlights
|
|
SUBSYSTEM=="backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@backlight:$name.service"
|
|
SUBSYSTEM=="leds", KERNEL=="*kbd_backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@leds:$name.service"
|
|
|
|
# Pull in rfkill save/restore for all rfkill devices
|
|
|
|
SUBSYSTEM=="rfkill", IMPORT{builtin}="path_id"
|
|
SUBSYSTEM=="misc", KERNEL=="rfkill", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-rfkill.socket"
|
|
|
|
# Asynchronously mount file systems implemented by these modules as soon as they are loaded.
|
|
SUBSYSTEM=="module", KERNEL=="fuse", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-fs-fuse-connections.mount"
|
|
SUBSYSTEM=="module", KERNEL=="configfs", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-kernel-config.mount"
|
|
|
|
LABEL="systemd_end"
|