From 7e12f25eb699600325068e7126c6390737dd500b Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Wed, 20 Apr 2022 22:44:47 +0200 Subject: [PATCH] mxqd: Use helper to unmount tmpdir Use the external helper to unmount the tmpdir. We are going to experiment with more complex tmpdir settings in the future which might be difficult to code in C. --- mxqd.c | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/mxqd.c b/mxqd.c index 880059f3..ec6b6579 100644 --- a/mxqd.c +++ b/mxqd.c @@ -1146,6 +1146,8 @@ static void exec_reaper(struct mxq_server *server,struct mxq_group_list *glist, argv[0]); } +static char tmpdir_script[] = LIBEXECDIR "/mxq/tmpdir-setup"; + static unsigned long start_job(struct mxq_group_list *glist) { struct mxq_server *server; @@ -1158,8 +1160,6 @@ static unsigned long start_job(struct mxq_group_list *glist) struct mxq_daemon *daemon; - static char tmpdir_script[] = LIBEXECDIR "/mxq/tmpdir-setup"; - pid_t pid; int res; @@ -1871,31 +1871,17 @@ static void rename_outfiles(struct mxq_server *server, struct mxq_group *group, } } -static char *job_tmpdir_path(unsigned long job_id) { - char *pathname; - pathname = mx_asprintf_forever("%s/%lu", MXQ_JOB_TMPDIR_MNTDIR, job_id); - return pathname; -} - -static int unmount_and_remove(char *pathname) { - int res; - res = rmdir(pathname); - if (res && errno==EBUSY) { - res = umount(pathname); - if (res == 0) { - res = rmdir(pathname); - } - } - return res; -} - static void unmount_job_tmpdir(unsigned long job_id) { - char *pathname; - pathname=job_tmpdir_path(job_id); - if (unmount_and_remove(pathname)) { - mx_log_warning("failed to unmount/remove stale job tmpdir %s: %m", pathname); - } - free(pathname); + char *argv[] = { + tmpdir_script, + "cleanup", + mx_asprintf_forever("%lu", job_id), + NULL + }; + int res = mx_call_external(tmpdir_script, argv); + free(argv[2]); + if (res == -1) + mx_log_err("cleanup job tmpdir: %m"); } static void release_gpu(struct mxq_server *server, struct mxq_group *group, struct mxq_job *job) {