From: Yu Watanabe Date: Tue, 19 Dec 2023 15:14:21 +0000 (+0900) Subject: udev: call udev_watch_end() before udev_event_execute_rules() X-Git-Tag: v256-rc1~1354^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0df87a4037f8ffe8623e954cd21473215fef8788;p=thirdparty%2Fsystemd.git udev: call udev_watch_end() before udev_event_execute_rules() No functional change, just refactoring. --- diff --git a/src/udev/test-udev-rule-runner.c b/src/udev/test-udev-rule-runner.c index 72296b3f0e6..c661ac7189e 100644 --- a/src/udev/test-udev-rule-runner.c +++ b/src/udev/test-udev-rule-runner.c @@ -169,7 +169,7 @@ static int run(int argc, char *argv[]) { } } - udev_event_execute_rules(event, -1, 3 * USEC_PER_SEC, SIGKILL, NULL, rules); + udev_event_execute_rules(event, 3 * USEC_PER_SEC, SIGKILL, NULL, rules); udev_event_execute_run(event, 3 * USEC_PER_SEC, SIGKILL); return 0; diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index ed22c8b6793..2cb74711a82 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -14,7 +14,6 @@ #include "udev-node.h" #include "udev-trace.h" #include "udev-util.h" -#include "udev-watch.h" #include "user-util.h" UdevEvent *udev_event_new(sd_device *dev, usec_t exec_delay_usec, sd_netlink *rtnl, int log_level) { @@ -278,7 +277,6 @@ static int update_devnode(UdevEvent *event) { static int event_execute_rules_on_remove( UdevEvent *event, - int inotify_fd, usec_t timeout_usec, int timeout_signal, Hashmap *properties_list, @@ -299,10 +297,6 @@ static int event_execute_rules_on_remove( if (r < 0) log_device_debug_errno(dev, r, "Failed to delete database under /run/udev/data/, ignoring: %m"); - r = udev_watch_end(inotify_fd, dev); - if (r < 0) - log_device_warning_errno(dev, r, "Failed to remove inotify watch, ignoring: %m"); - r = udev_rules_apply_to_event(rules, event, timeout_usec, timeout_signal, properties_list); if (sd_device_get_devnum(dev, NULL) >= 0) @@ -330,7 +324,6 @@ static int copy_all_tags(sd_device *d, sd_device *s) { int udev_event_execute_rules( UdevEvent *event, - int inotify_fd, /* This may be negative */ usec_t timeout_usec, int timeout_signal, Hashmap *properties_list, @@ -348,12 +341,7 @@ int udev_event_execute_rules( return log_device_error_errno(dev, r, "Failed to get ACTION: %m"); if (action == SD_DEVICE_REMOVE) - return event_execute_rules_on_remove(event, inotify_fd, timeout_usec, timeout_signal, properties_list, rules); - - /* Disable watch during event processing. */ - r = udev_watch_end(inotify_fd, dev); - if (r < 0) - log_device_warning_errno(dev, r, "Failed to remove inotify watch, ignoring: %m"); + return event_execute_rules_on_remove(event, timeout_usec, timeout_signal, properties_list, rules); r = device_clone_with_db(dev, &event->dev_db_clone); if (r < 0) diff --git a/src/udev/udev-event.h b/src/udev/udev-event.h index 6b94fd08aba..24bd3229c66 100644 --- a/src/udev/udev-event.h +++ b/src/udev/udev-event.h @@ -53,7 +53,6 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(UdevEvent*, udev_event_free); int udev_event_execute_rules( UdevEvent *event, - int inotify_fd, usec_t timeout_usec, int timeout_signal, Hashmap *properties_list, diff --git a/src/udev/udev-watch.c b/src/udev/udev-watch.c index 58c82794f0f..258eb26a65f 100644 --- a/src/udev/udev-watch.c +++ b/src/udev/udev-watch.c @@ -232,12 +232,9 @@ int udev_watch_end(int inotify_fd, sd_device *dev) { _cleanup_close_ int dirfd = -EBADF; int wd, r; + assert(inotify_fd >= 0); assert(dev); - /* This may be called by 'udevadm test'. In that case, inotify_fd is not initialized. */ - if (inotify_fd < 0) - return 0; - if (sd_device_get_devname(dev, NULL) < 0) return 0; diff --git a/src/udev/udev-worker.c b/src/udev/udev-worker.c index 2dc7bd08200..7165ed9542b 100644 --- a/src/udev/udev-worker.c +++ b/src/udev/udev-worker.c @@ -194,10 +194,14 @@ static int worker_process_device(UdevWorker *worker, sd_device *dev) { if (worker->blockdev_read_only) (void) worker_mark_block_device_read_only(dev); + /* Disable watch during event processing. */ + r = udev_watch_end(worker->inotify_fd, dev); + if (r < 0) + log_device_warning_errno(dev, r, "Failed to remove inotify watch, ignoring: %m"); + /* apply rules, create node, symlinks */ r = udev_event_execute_rules( udev_event, - worker->inotify_fd, worker->timeout_usec, worker->timeout_signal, worker->properties, diff --git a/src/udev/udevadm-test.c b/src/udev/udevadm-test.c index 809143ede0b..9d1c99ed75b 100644 --- a/src/udev/udevadm-test.c +++ b/src/udev/udevadm-test.c @@ -129,7 +129,7 @@ int test_main(int argc, char *argv[], void *userdata) { assert_se(sigfillset(&mask) >= 0); assert_se(sigprocmask(SIG_SETMASK, &mask, &sigmask_orig) >= 0); - udev_event_execute_rules(event, -1, 60 * USEC_PER_SEC, SIGKILL, NULL, rules); + udev_event_execute_rules(event, 60 * USEC_PER_SEC, SIGKILL, NULL, rules); FOREACH_DEVICE_PROPERTY(dev, key, value) printf("%s=%s\n", key, value);