udev-node: drop unnecessary manager side cleaning up logic for stack directory
Unnecessary stack directories and their lock files are removed by workers. Hence, the logic is not necessary anymore.
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -28,48 +28,6 @@
|
||||
|
||||
#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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user