From 426a65ac5d56264b1890539eff96a1fa1d460217 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Wed, 14 May 2014 00:34:49 +0200 Subject: [PATCH] udev: do not skip the execution of RUN when renaming a network device fails (cherry picked from commit 1ea972174baba40dbc80c51cbfc4edc49764b59b) Resolves: #1102135 --- src/test/test-udev.c | 5 ++--- src/udev/udev-event.c | 9 ++++----- src/udev/udev.h | 2 +- src/udev/udevadm-test.c | 13 +++++-------- src/udev/udevd.c | 13 ++++++------- 5 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/test/test-udev.c b/src/test/test-udev.c index 17825f1..3fcf728 100644 --- a/src/test/test-udev.c +++ b/src/test/test-udev.c @@ -156,9 +156,8 @@ int main(int argc, char *argv[]) } } - err = udev_event_execute_rules(event, rules, &sigmask_orig); - if (err == 0) - udev_event_execute_run(event, NULL); + udev_event_execute_rules(event, rules, &sigmask_orig); + udev_event_execute_run(event, NULL); out: if (event != NULL && event->fd_signal >= 0) close(event->fd_signal); diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index 3db2cb7..d69d7ba 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -776,13 +776,12 @@ static int rename_netif(struct udev_event *event) return err; } -int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, const sigset_t *sigmask) +void udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, const sigset_t *sigmask) { struct udev_device *dev = event->dev; - int err = 0; if (udev_device_get_subsystem(dev) == NULL) - return -1; + return; if (streq(udev_device_get_action(dev), "remove")) { udev_device_read_db(dev, NULL); @@ -816,9 +815,10 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, event->name != NULL && !streq(event->name, udev_device_get_sysname(dev))) { char syspath[UTIL_PATH_SIZE]; char *pos; + int err; err = rename_netif(event); - if (err == 0) { + if (err >= 0) { log_debug("renamed netif to '%s'\n", event->name); /* remember old name */ @@ -881,7 +881,6 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, udev_device_unref(event->dev_db); event->dev_db = NULL; } - return err; } void udev_event_execute_run(struct udev_event *event, const sigset_t *sigmask) diff --git a/src/udev/udev.h b/src/udev/udev.h index 8395926..900b1d6 100644 --- a/src/udev/udev.h +++ b/src/udev/udev.h @@ -83,7 +83,7 @@ int udev_event_apply_subsys_kernel(struct udev_event *event, const char *string, int udev_event_spawn(struct udev_event *event, const char *cmd, char **envp, const sigset_t *sigmask, char *result, size_t ressize); -int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, const sigset_t *sigset); +void udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, const sigset_t *sigset); void udev_event_execute_run(struct udev_event *event, const sigset_t *sigset); int udev_build_argv(struct udev *udev, char *cmd, int *argc, char *argv[]); diff --git a/src/udev/udevadm-test.c b/src/udev/udevadm-test.c index df1409b..dc292c2 100644 --- a/src/udev/udevadm-test.c +++ b/src/udev/udevadm-test.c @@ -42,7 +42,6 @@ static int adm_test(struct udev *udev, int argc, char *argv[]) struct udev_rules *rules = NULL; struct udev_list_entry *entry; sigset_t mask, sigmask_orig; - int err; int rc = 0; static const struct option options[] = { @@ -141,18 +140,16 @@ static int adm_test(struct udev *udev, int argc, char *argv[]) goto out; } - err = udev_event_execute_rules(event, rules, &sigmask_orig); + udev_event_execute_rules(event, rules, &sigmask_orig); udev_list_entry_foreach(entry, udev_device_get_properties_list_entry(dev)) printf("%s=%s\n", udev_list_entry_get_name(entry), udev_list_entry_get_value(entry)); - if (err == 0) { - udev_list_entry_foreach(entry, udev_list_get_entry(&event->run_list)) { - char program[UTIL_PATH_SIZE]; + udev_list_entry_foreach(entry, udev_list_get_entry(&event->run_list)) { + char program[UTIL_PATH_SIZE]; - udev_event_apply_format(event, udev_list_entry_get_name(entry), program, sizeof(program)); - printf("run: '%s'\n", program); - } + udev_event_apply_format(event, udev_list_entry_get_name(entry), program, sizeof(program)); + printf("run: '%s'\n", program); } out: if (event != NULL && event->fd_signal >= 0) diff --git a/src/udev/udevd.c b/src/udev/udevd.c index 7c6c5d6..3d5feb4 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -272,7 +272,7 @@ static void worker_new(struct event *event) for (;;) { struct udev_event *udev_event; struct worker_message msg; - int err; + int err = 0; log_debug("seq %llu running\n", udev_device_get_seqnum(dev)); udev_event = udev_event_new(dev); @@ -288,13 +288,12 @@ static void worker_new(struct event *event) udev_event->exec_delay = exec_delay; /* apply rules, create node, symlinks */ - err = udev_event_execute_rules(udev_event, rules, &sigmask_orig); + udev_event_execute_rules(udev_event, rules, &sigmask_orig); - if (err == 0) - udev_event_execute_run(udev_event, &sigmask_orig); + udev_event_execute_run(udev_event, &sigmask_orig); /* apply/restore inotify watch */ - if (err == 0 && udev_event->inotify_watch) { + if (udev_event->inotify_watch) { udev_watch_begin(udev, dev); udev_device_update_db(dev); } @@ -304,8 +303,8 @@ static void worker_new(struct event *event) /* send udevd the result of the event execution */ memset(&msg, 0, sizeof(struct worker_message)); - if (err != 0) - msg.exitcode = err; + + msg.exitcode = err; msg.pid = getpid(); send(worker_watch[WRITE_END], &msg, sizeof(struct worker_message), 0);