Ninjatrappeur's systemd working tree
Go to file
Lennart Poettering e77b146f82 udev: make tags "sticky"
This tries to address the "bind"/"unbind" uevent kernel API breakage, by
changing the semantics of device tags.

Previously, tags would be applied on uevents (and the database entries
they result in) only depending on the immediate context. This means that
if one uevent causes the tag to be set and the next to be unset, this
would immediately effect what apps would see and the database entries
would contain each time. This is problematic however, as tags are a
filtering concept, and if tags vanish then clients won't hence notice
when a device stops being relevant to them since not only the tags
disappear but immediately also the uevents for it are filtered including
the one necessary for the app to notice that the device lost its tag and
hence relevance.

With this change tags become "sticky". If a tag is applied is once
applied to a device it will stay in place forever, until the device is
removed. Tags can never be removed again. This means that an app
watching a specific set of devices by filtering for a tag is guaranteed
to not only see the events where the tag is set but also all follow-up
events where the tags might be removed again.

This change of behaviour is unfortunate, but is required due to the
kernel introducing new "bind" and "unbind" uevents that generally have
the effect that tags and properties disappear and apps hence don't
notice when a device looses relevance to it. "bind"/"unbind" events were
introduced in kernel 4.12, and are now used in more and more subsystems.
The introduction broke userspace widely, and this commit is an attempt
to provide a way for apps to deal with it.

While tags are now "sticky" a new automatic device property
CURRENT_TAGS is introduced (matching the existing TAGS property) that
always reflects the precise set of tags applied on the most recent
events. Thus, when subscribing to devices through tags, all devices that
ever had the tag put on them will be be seen, and by CURRENT_TAGS it may
be checked whether the device right at the moment matches the tag
requirements.

See: #7587 #7018 #8221
2020-09-01 17:40:12 +02:00
.github Revert "ci: turn off the "upstream-systemd-ci" ppa" 2020-07-15 08:59:25 +02:00
.lgtm/cpp-queries lgtm: complain about accept() [people should use accept4() instead, due to O_CLOEXEC] 2019-04-10 20:03:38 +02:00
.mkosi Update mkosi.ubuntu to 'focal' 2020-07-23 16:44:09 +02:00
catalog catalog: update Polish translation 2020-07-26 11:28:29 +02:00
coccinelle tree-wide: use set_ensure_put() 2020-06-22 16:32:37 +02:00
docs socket: New option 'FlushPending' (boolean) to flush socket before entering listening state 2020-09-01 17:20:23 +02:00
factory/etc man: move 'files' module in NSS 'hosts:' line before myhostname 2020-08-17 18:55:59 +02:00
hwdb.d hwdb: fix size lenovo x240 touchpad (#16871) 2020-08-27 21:59:23 +02:00
man socket: New option 'FlushPending' (boolean) to flush socket before entering listening state 2020-09-01 17:20:23 +02:00
modprobe.d Add SPDX license headers to various assorted files 2017-11-19 19:08:15 +01:00
network network: add TUN/TAP vt-* network rule for VMs 2020-04-17 19:15:00 +02:00
po Translated using Weblate (Swedish) 2020-08-27 04:46:23 +02:00
presets Revert "presets: "disable" all passive targets by default" 2020-05-26 20:51:58 +02:00
rules.d rules: don't install 80-drivers.rules when kmod is disabled 2020-08-25 09:35:49 +02:00
semaphoreci semaphoreci: update Debian release to bullseye 2020-07-24 01:45:44 +03:00
shell-completion add "list" verb to autocompleted commands 2020-08-27 10:01:36 +02:00
src udev: make tags "sticky" 2020-09-01 17:40:12 +02:00
sysctl.d sysctl: enable coredump for suid binaries 2020-04-07 15:28:46 +02:00
sysusers.d sysusers,tmpfiles: re-create systemd-network, systemd-resolve and systemd-timesync 2018-07-16 17:11:50 +02:00
test test-functions: make sure we test our own libudev instead of the host libudev 2020-09-01 17:40:12 +02:00
tmpfiles.d tmpfiles: don't complain if we can't enable pstore in containers 2020-05-25 16:43:35 +02:00
tools update-dbus-docs: add hint 2020-08-27 21:30:23 +02:00
travis-ci travis: compile with -O1 with clang 2020-07-21 02:00:04 +09:00
units Merge pull request #16850 from mbiebl/networkd-socket-activation 2020-08-29 16:12:46 +02:00
xorg scripts: use 4 space indentation 2019-04-12 08:30:31 +02:00
.clang-format clang-format: set Break afer enum to false 2020-07-19 15:44:04 +02:00
.ctags editors: Prevent ctags from following symlinks 2019-02-15 11:01:20 -08:00
.dir-locals.el scripts: use 4 space indentation 2019-04-12 08:30:31 +02:00
.editorconfig editorconfig: add man configuration 2020-05-26 15:37:05 +02:00
.gitattributes git: indicate that tabs are never OK in the systemd tree 2013-10-30 02:25:38 +01:00
.gitignore mkosi: Keep mkosi.default out of the repository. 2020-07-16 21:44:02 +01:00
.lgtm.yml lgtm: drop the TMPDIR/meson workaround 2020-03-03 20:27:42 +01:00
.mailmap NEWS: update contributors list for v246-pre 2020-07-23 17:30:54 +02:00
.travis.yml coverity: switch back to Fedora 31 2020-07-12 22:00:16 +00:00
.vimrc scripts: use 4 space indentation 2019-04-12 08:30:31 +02:00
.ycm_extra_conf.py ycm: add doc string for all the functions in configuration file 2017-11-29 13:21:49 -07:00
LICENSE.GPL2 relicense to LGPLv2.1 (with exceptions) 2012-04-12 00:24:39 +02:00
LICENSE.LGPL2.1 licence: remove references to old FSF address 2012-12-17 11:41:31 +01:00
Makefile build-sys: Fix Makefile wrapper for install target (#6548) 2017-08-07 11:29:20 +02:00
NEWS NEWS: clarify two points 2020-08-01 11:54:26 +02:00
README meson: add min version for libfdisk 2020-08-19 10:18:33 +02:00
README.md README: add reference to systemd.io 2020-06-16 13:34:04 +02:00
TODO Merge pull request #16568 from poettering/creds-store 2020-08-26 10:32:30 +02:00
azure-pipelines.yml Free up some resources on Azure Pipelines 2019-07-17 13:28:38 +09:00
configure treewide: more portable bash shebangs 2020-03-05 17:27:07 +01:00
meson.build test: verify that dbus docs are fresh 2020-08-27 21:30:22 +02:00
meson_options.txt meson: add "develop mode" config switch 2020-08-27 20:20:23 +02:00
mkosi.build mkosi: Unify environment for unit tests 2020-04-22 10:35:12 +02:00
zanata.xml po: add basic fedora.zanata.org configuration 2018-02-19 13:56:57 +01:00

README.md

Systemd

System and Service Manager

Count of open issues over time Count of open pull requests over time Semaphore CI Build Status
Coverity Scan Status
OSS-Fuzz Status
CIFuzz
CII Best Practices
Travis CI Build Status
Language Grade: C/C++
CentOS CI Build Status
Build Status
Fossies codespell report
Packaging status

Details

Most documentation is available on systemd's web site.

Assorted, older, general information about systemd can be found in the systemd Wiki.

Information about build requirements is provided in the README file.

Consult our NEWS file for information about what's new in the most recent systemd versions.

Please see the Hacking guide for information on how to hack on systemd and test your modifications.

Please see our Contribution Guidelines for more information about filing GitHub Issues and posting GitHub Pull Requests.

When preparing patches for systemd, please follow our Coding Style Guidelines.

If you are looking for support, please contact our mailing list or join our IRC channel.

Stable branches with backported patches are available in the stable repo.