From: Zbigniew Jędrzejewski-Szmek Date: Tue, 23 May 2023 10:28:55 +0000 (+0200) Subject: repart: do not require /var/tmp if not used X-Git-Tag: v254-rc1~411^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c264ec5f536c9629a24d770694ce50520ac8420b;p=thirdparty%2Fsystemd.git repart: do not require /var/tmp if not used If systemd-repart is running sufficiently early, /var/tmp might not be in place yet. But if there is nothing to minimize, we won't even use it. Let's move the check right before the first use. systemd-repart[441]: Device '/' has no dm-crypt/dm-verity device, no need to look for… systemd-repart[441]: Device /dev/sda opened and locked. systemd-repart[441]: Sector size of device is 512 bytes. Using grain size of 4096. systemd-repart[441]: Could not determine temporary directory: No such file or directory systemd[1]: systemd-repart.service: Child 441 belongs to systemd-repart.service. systemd[1]: systemd-repart.service: Main process exited, code=exited, status=1/FAILURE systemd[1]: systemd-repart.service: Failed with result 'exit-code'. --- diff --git a/src/partition/repart.c b/src/partition/repart.c index d5d5e2353f2..5a2f992e2dc 100644 --- a/src/partition/repart.c +++ b/src/partition/repart.c @@ -5515,15 +5515,11 @@ static int fd_apparent_size(int fd, uint64_t *ret) { } static int context_minimize(Context *context) { - const char *vt; + const char *vt = NULL; int r; assert(context); - r = var_tmp_dir(&vt); - if (r < 0) - return log_error_errno(r, "Could not determine temporary directory: %m"); - LIST_FOREACH(partitions, p, context->partitions) { _cleanup_(rm_rf_physical_and_freep) char *root = NULL; _cleanup_(unlink_and_freep) char *temp = NULL; @@ -5556,6 +5552,12 @@ static int context_minimize(Context *context) { log_info("Pre-populating %s filesystem of partition %s twice to calculate minimal partition size", p->format, strna(hint)); + if (!vt) { + r = var_tmp_dir(&vt); + if (r < 0) + return log_error_errno(r, "Could not determine temporary directory: %m"); + } + r = tempfn_random_child(vt, "repart", &temp); if (r < 0) return log_error_errno(r, "Failed to generate temporary file path: %m"); @@ -5713,6 +5715,12 @@ static int context_minimize(Context *context) { log_info("Pre-populating verity hash data of partition %s to calculate minimal partition size", strna(hint)); + if (!vt) { + r = var_tmp_dir(&vt); + if (r < 0) + return log_error_errno(r, "Could not determine temporary directory: %m"); + } + r = tempfn_random_child(vt, "repart", &temp); if (r < 0) return log_error_errno(r, "Failed to generate temporary file path: %m");