]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev-node: drop unnecessary manager side cleaning up logic for stack directory
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 10 Oct 2024 01:42:24 +0000 (10:42 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 11 Oct 2024 20:34:07 +0000 (05:34 +0900)
Unnecessary stack directories and their lock files are removed by
workers. Hence, the logic is not necessary anymore.

src/udev/udev-manager.c
src/udev/udev-manager.h
src/udev/udev-node.c
src/udev/udev-node.h

index 08ed176faf22e0bc60a89130ba00a13a98a93ede..32bc0db345c0bf5be912327e1bb26f7456ef8c3f 100644 (file)
@@ -583,9 +583,6 @@ static int event_queue_start(Manager *manager) {
         if (!manager->events || manager->exit || manager->stop_exec_queue)
                 return 0;
 
-        /* To make the stack directory /run/udev/links cleaned up later. */
-        manager->udev_node_needs_cleanup = true;
-
         r = event_source_disable(manager->kill_workers_event);
         if (r < 0)
                 log_warning_errno(r, "Failed to disable event source for cleaning up idle workers, ignoring: %m");
@@ -1181,11 +1178,6 @@ static int on_post(sd_event_source *s, void *userdata) {
 
         /* There are no idle workers. */
 
-        if (manager->udev_node_needs_cleanup) {
-                (void) udev_node_cleanup();
-                manager->udev_node_needs_cleanup = false;
-        }
-
         if (manager->exit)
                 return sd_event_exit(manager->event, 0);
 
index 41aa73698d67b62b8550e555ffd3d42474279de7..5921d333d1f7dc56a848734e0cb705ba8b5d0ac5 100644 (file)
@@ -44,7 +44,6 @@ typedef struct Manager {
         int timeout_signal;
         bool blockdev_read_only;
 
-        bool udev_node_needs_cleanup;
         bool stop_exec_queue;
         bool exit;
 } Manager;
index 6d917c4dd22173b594890bcc0a5081faec1603a8..673f723ff21e66f00d459aeb9eae324800e36dec 100644 (file)
 
 #define UDEV_NODE_HASH_KEY SD_ID128_MAKE(b9,6a,f1,ce,40,31,44,1a,9e,19,ec,8b,ae,f3,e3,2f)
 
-int udev_node_cleanup(void) {
-        _cleanup_closedir_ DIR *dir = NULL;
-
-        /* This must not be called when any workers exist. It would cause a race between mkdir() called
-         * by stack_directory_lock() and unlinkat() called by this. */
-
-        dir = opendir("/run/udev/links");
-        if (!dir) {
-                if (errno == ENOENT)
-                        return 0;
-
-                return log_debug_errno(errno, "Failed to open directory '/run/udev/links', ignoring: %m");
-        }
-
-        FOREACH_DIRENT_ALL(de, dir, break) {
-                _cleanup_free_ char *lockfile = NULL;
-
-                if (de->d_name[0] == '.')
-                        continue;
-
-                if (de->d_type != DT_DIR)
-                        continue;
-
-                /* As commented in the above, this is called when no worker exists, hence the file is not
-                 * locked. On a later uevent, the lock file will be created if necessary. So, we can safely
-                 * remove the file now. */
-                lockfile = path_join(de->d_name, ".lock");
-                if (!lockfile)
-                        return log_oom_debug();
-
-                if (unlinkat(dirfd(dir), lockfile, 0) < 0 && errno != ENOENT) {
-                        log_debug_errno(errno, "Failed to remove '/run/udev/links/%s', ignoring: %m", lockfile);
-                        continue;
-                }
-
-                if (unlinkat(dirfd(dir), de->d_name, AT_REMOVEDIR) < 0 && errno != ENOTEMPTY)
-                        log_debug_errno(errno, "Failed to remove '/run/udev/links/%s', ignoring: %m", de->d_name);
-        }
-
-        return 0;
-}
-
 static int node_remove_symlink(sd_device *dev, const char *slink) {
         assert(dev);
         assert(slink);
index 0c545e4a0f7b995124f2df3580965dbca12ab6c4..86a829545a533138087cb9f2f3e14d69612f6fab 100644 (file)
@@ -24,6 +24,5 @@ int static_node_apply_permissions(
 
 int udev_node_remove(sd_device *dev);
 int udev_node_update(sd_device *dev, sd_device *dev_old);
-int udev_node_cleanup(void);
 
 size_t udev_node_escape_path(const char *src, char *dest, size_t size);