chiark / gitweb /
udevd: inotify - do not parse rules at create but at close
[elogind.git] / udev / udevd.c
index 300d6035191a8e55e7c09d2d85e6d0272f53c147..fe3352ceb513519afa20cbb8f976d44ad00fe633 100644 (file)
@@ -292,12 +292,9 @@ static void worker_new(struct event *event)
                        if (udev_device_get_event_timeout(dev) >= 0)
                                alarm(udev_device_get_event_timeout(dev));
 
-                       /* execute RUN= */
-                       if (err == 0 && udev_get_run(udev_event->udev))
-                               failed = udev_event_execute_run(udev_event,
-                                                               &orig_sigmask);
+                       if (err == 0)
+                               failed = udev_event_execute_run(udev_event, &orig_sigmask);
 
-                       /* reset alarm */
                        alarm(0);
 
                        /* apply/restore inotify watch */
@@ -309,7 +306,7 @@ static void worker_new(struct event *event)
                        /* send processed event back to libudev listeners */
                        udev_monitor_send_device(worker_monitor, NULL, dev);
 
-                       /* send back the result of the event execution */
+                       /* send udevd the result of the event execution */
                        if (err != 0)
                                msg.exitcode = err;
                        else if (failed != 0)
@@ -764,37 +761,11 @@ static void handle_signal(struct udev *udev, int signo)
        }
 }
 
-static void startup_log(struct udev *udev)
-{
-       FILE *f;
-       char path[UTIL_PATH_SIZE];
-       struct stat statbuf;
-
-       f = fopen("/dev/kmsg", "w");
-       if (f != NULL)
-               fprintf(f, "<6>udev: starting version " VERSION "\n");
-
-       util_strscpyl(path, sizeof(path), udev_get_sys_path(udev), "/class/mem/null", NULL);
-       if (lstat(path, &statbuf) == 0 && S_ISDIR(statbuf.st_mode)) {
-               const char *depr_str =
-                       "udev: missing sysfs features; please update the kernel "
-                       "or disable the kernel's CONFIG_SYSFS_DEPRECATED option; "
-                       "udev may fail to work correctly";
-
-               if (f != NULL)
-                       fprintf(f, "<3>%s\n", depr_str);
-               err(udev, "%s\n", depr_str);
-               sleep(15);
-       }
-
-       if (f != NULL)
-               fclose(f);
-}
-
 int main(int argc, char *argv[])
 {
        struct udev *udev;
        int fd;
+       FILE *f;
        sigset_t mask;
        const char *value;
        int daemonize = false;
@@ -916,15 +887,15 @@ int main(int argc, char *argv[])
 
        if (udev_get_rules_path(udev) != NULL) {
                inotify_add_watch(pfd[FD_INOTIFY].fd, udev_get_rules_path(udev),
-                                 IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
+                                 IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
        } else {
                char filename[UTIL_PATH_SIZE];
                struct stat statbuf;
 
                inotify_add_watch(pfd[FD_INOTIFY].fd, LIBEXECDIR "/rules.d",
-                                 IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
+                                 IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
                inotify_add_watch(pfd[FD_INOTIFY].fd, SYSCONFDIR "/udev/rules.d",
-                                 IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
+                                 IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
 
                /* watch dynamic rules directory */
                util_strscpyl(filename, sizeof(filename), udev_get_dev_path(udev), "/.udev/rules.d", NULL);
@@ -935,7 +906,7 @@ int main(int argc, char *argv[])
                        udev_selinux_resetfscreatecon(udev);
                }
                inotify_add_watch(pfd[FD_INOTIFY].fd, filename,
-                                 IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
+                                 IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
        }
        udev_watch_restore(udev);
 
@@ -988,7 +959,11 @@ int main(int argc, char *argv[])
                }
        }
 
-       startup_log(udev);
+       f = fopen("/dev/kmsg", "w");
+       if (f != NULL) {
+               fprintf(f, "<6>udev: starting version " VERSION "\n");
+               fclose(f);
+       }
 
        /* redirect std{out,err} */
        if (!debug && !debug_trace) {