Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP3:Update
slurm
U_10-Use-rmdir_recursive.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File U_10-Use-rmdir_recursive.patch of Package slurm
From: Tim Wickberg <tim@schedmd.com> Date: Wed Oct 11 12:45:25 2023 -0600 Subject: [PATCH 10/19]Use rmdir_recursive(). Patch-mainline: Upstream Git-repo: https://github.com/SchedMD/slurm Git-commit: 44a5547a705ba1c21e93729a3f002cb006dc43c7 References: bsc#1216207 Signed-off-by: Egbert Eich <eich@suse.de> force_rm behaves counter-intuitively. When true, it'll lead to nftw() returning an error and bailing out immediately - potentially leaving more files behind than when not set. Emulate the prior behavior by only using the rmdir_recursive() to change control flow in _create_ns(). Only print an error in _delete_ns(). --- .../job_container/tmpfs/job_container_tmpfs.c | 62 ++++------------------ 1 file changed, 9 insertions(+), 53 deletions(-) diff --git a/src/plugins/job_container/tmpfs/job_container_tmpfs.c b/src/plugins/job_container/tmpfs/job_container_tmpfs.c index 88658aabaa..1e6d8c2366 100644 --- a/src/plugins/job_container/tmpfs/job_container_tmpfs.c +++ b/src/plugins/job_container/tmpfs/job_container_tmpfs.c @@ -39,7 +39,6 @@ \*****************************************************************************/ #define _GNU_SOURCE -#define _XOPEN_SOURCE 500 /* For ftw.h */ #include <errno.h> #include <sys/types.h> #include <sys/stat.h> @@ -47,12 +46,12 @@ #include <sys/mman.h> #include <sched.h> #include <fcntl.h> -#include <ftw.h> #include <sys/mount.h> #include <linux/limits.h> #include <semaphore.h> #include "src/common/slurm_xlator.h" +#include "src/common/fd.h" #include "src/common/log.h" #include "src/common/run_command.h" @@ -73,7 +72,6 @@ const uint32_t plugin_version = SLURM_VERSION_NUMBER; static slurm_jc_conf_t *jc_conf = NULL; static int step_ns_fd = -1; -static bool force_rm = true; static List running_job_ids = NULL; static int _create_paths(uint32_t job_id, @@ -395,35 +393,6 @@ static int _mount_private_shm(void) return rc; } -static int _rm_data(const char *path, const struct stat *st_buf, - int type, struct FTW *ftwbuf) -{ - int rc = SLURM_SUCCESS; - - if (remove(path) < 0) { - log_level_t log_lvl; - if (force_rm) { - rc = SLURM_ERROR; - log_lvl = LOG_LEVEL_ERROR; - } else - log_lvl = LOG_LEVEL_DEBUG2; - - if (type == FTW_NS) - log_var(log_lvl, - "%s: Unreachable file of FTW_NS type: %s", - __func__, path); - else if (type == FTW_DNR) - log_var(log_lvl, - "%s: Unreadable directory: %s", - __func__, path); - - log_var(log_lvl, - "%s: could not remove path: %s: %s", - __func__, path, strerror(errno)); - } - - return rc; -} static int _create_ns(uint32_t job_id, bool remount) { @@ -653,11 +622,11 @@ exit1: exit2: if (rc) { + int failures; /* cleanup the job mount */ - force_rm = true; - if (nftw(job_mount, _rm_data, 64, FTW_DEPTH|FTW_PHYS) < 0) { - error("%s: Directory traversal failed: %s: %s", - __func__, job_mount, strerror(errno)); + if ((failures = rmdir_recursive(job_mount, false))) { + error("%s: failed to remove %d files from %s", + __func__, failures, job_mount); return SLURM_ERROR; } @@ -782,7 +751,7 @@ static int _delete_ns(uint32_t job_id) { char job_mount[PATH_MAX]; char ns_holder[PATH_MAX]; - int rc = 0; + int rc = 0, failures = 0; #ifdef HAVE_NATIVE_CRAY return SLURM_SUCCESS; @@ -801,22 +770,9 @@ static int _delete_ns(uint32_t job_id) return SLURM_ERROR; } - /* - * Traverses the job directory, and delete all files. - * Doesn't - - * traverse filesystem boundaries, - * follow symbolic links - * Does - - * a post order traversal and delete directory after processing - * contents - * NOTE: Can happen EBUSY here so we need to ignore this. - */ - force_rm = false; - if (nftw(job_mount, _rm_data, 64, FTW_DEPTH|FTW_PHYS) < 0) { - error("%s: Directory traversal failed: %s: %s", - __func__, job_mount, strerror(errno)); - return SLURM_ERROR; - } + if ((failures = rmdir_recursive(job_mount, false))) + error("%s: failed to remove %d files from %s", + __func__, failures, job_mount); return SLURM_SUCCESS; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor