From: Lennart Poettering Date: Fri, 21 May 2010 23:00:28 +0000 (+0200) Subject: device: make use of new libudev tags logic X-Git-Tag: v1~278 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=e1ce2c2782015579f042d4d6963ed039333fb8c2 device: make use of new libudev tags logic --- diff --git a/configure.ac b/configure.ac index cccb0ee3c..ffdedeedf 100644 --- a/configure.ac +++ b/configure.ac @@ -92,7 +92,7 @@ AC_CHECK_HEADERS([sys/capability.h], [], [AC_MSG_ERROR([*** POSIX caps headers n # This makes sure pkg.m4 is available. m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config]) -PKG_CHECK_MODULES(UDEV, [ libudev ]) +PKG_CHECK_MODULES(UDEV, [ libudev >= 154 ]) AC_SUBST(UDEV_CFLAGS) AC_SUBST(UDEV_LIBS) diff --git a/src/99-systemd.rules b/src/99-systemd.rules index 62aab85e3..70c0d8191 100644 --- a/src/99-systemd.rules +++ b/src/99-systemd.rules @@ -7,10 +7,10 @@ ACTION!="add|change", GOTO="systemd_end" -KERNEL=="tty[0-9]|tty1[0-2]", ENV{SYSTEMD_EXPOSE}="1" -KERNEL=="ttyS*", ENV{SYSTEMD_EXPOSE}="1" +KERNEL=="tty[0-9]|tty1[0-2]", TAG="systemd" +KERNEL=="ttyS*", TAG="systemd" -SUBSYSTEM=="block", ENV{SYSTEMD_EXPOSE}="1" +SUBSYSTEM=="block", TAG="systemd" # We need a hardware independent way to identify network devices. We # use the /sys/subsystem path for this. Current vanilla kernels don't @@ -23,6 +23,6 @@ SUBSYSTEM=="block", ENV{SYSTEMD_EXPOSE}="1" # # http://git.kernel.org/?p=linux/hotplug/udev.git;a=blob;f=libudev/libudev-enumerate.c;h=da831449dcaf5e936a14409e8e68ab12d30a98e2;hb=HEAD#l742 -SUBSYSTEM=="net", KERNEL!="lo", ENV{SYSTEMD_EXPOSE}="1", ENV{SYSTEMD_ALIAS}="/sys/subsystem/net/devices/%k" +SUBSYSTEM=="net", KERNEL!="lo", TAG="systemd", ENV{SYSTEMD_ALIAS}="/sys/subsystem/net/devices/%k" LABEL="systemd_end" diff --git a/src/device.c b/src/device.c index e67d0a6c2..adc6cc1e2 100644 --- a/src/device.c +++ b/src/device.c @@ -144,31 +144,19 @@ static int device_find_escape_name(Manager *m, const char *dn, Unit **_u) { } static int device_process_new_device(Manager *m, struct udev_device *dev, bool update_state) { - const char *dn, *wants, *sysfs, *expose, *model, *alias; + const char *dn, *wants, *sysfs, *model, *alias; Unit *u = NULL; int r; char *w, *state; size_t l; bool delete; struct udev_list_entry *item = NULL, *first = NULL; - int b; assert(m); if (!(sysfs = udev_device_get_syspath(dev))) return -ENOMEM; - if (!(expose = udev_device_get_property_value(dev, "SYSTEMD_EXPOSE"))) - return 0; - - if ((b = parse_boolean(expose)) < 0) { - log_error("Failed to parse SYSTEMD_EXPOSE udev property for device %s: %s", sysfs, expose); - return 0; - } - - if (!b) - return 0; - /* Check whether this entry is even relevant for us. */ dn = udev_device_get_devnode(dev); wants = udev_device_get_property_value(dev, "SYSTEMD_WANTS"); @@ -365,6 +353,11 @@ static int device_enumerate(Manager *m) { goto fail; } + if (udev_monitor_filter_add_match_tag(m->udev_monitor, "systemd") < 0) { + r = -ENOMEM; + goto fail; + } + if (udev_monitor_enable_receiving(m->udev_monitor) < 0) { r = -EIO; goto fail; @@ -385,6 +378,10 @@ static int device_enumerate(Manager *m) { r = -ENOMEM; goto fail; } + if (udev_enumerate_add_match_tag(e, "systemd") < 0) { + r = -EIO; + goto fail; + } if (udev_enumerate_scan_devices(e) < 0) { r = -EIO;