X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Fmachine-pool.c;h=8af78f47d5e3775de87065a6a3cb7e86dbd1ea08;hp=3eafb9443a1cdec322122580aac6a076b4f2b134;hb=fb047e8edd9fc19b4a65f2656df494a12add1d31;hpb=26166c88e0b47b83972f32b5057ecbffe06bf904 diff --git a/src/shared/machine-pool.c b/src/shared/machine-pool.c index 3eafb9443..8af78f47d 100644 --- a/src/shared/machine-pool.c +++ b/src/shared/machine-pool.c @@ -25,9 +25,12 @@ #include #include "util.h" +#include "process-util.h" +#include "lockfile-util.h" #include "mkdir.h" #include "btrfs-util.h" #include "path-util.h" +#include "signal-util.h" #include "machine-pool.h" #define VAR_LIB_MACHINES_SIZE_START (1024UL*1024UL*500UL) @@ -72,7 +75,7 @@ static int setup_machine_raw(uint64_t size, sd_bus_error *error) { if (errno != ENOENT) return sd_bus_error_set_errnof(error, errno, "Failed to open /var/lib/machines.raw: %m"); - r = tempfn_xxxxxx("/var/lib/machines.raw", &tmp); + r = tempfn_xxxxxx("/var/lib/machines.raw", NULL, &tmp); if (r < 0) return r; @@ -106,8 +109,8 @@ static int setup_machine_raw(uint64_t size, sd_bus_error *error) { /* Child */ - reset_all_signal_handlers(); - reset_signal_mask(); + (void) reset_all_signal_handlers(); + (void) reset_signal_mask(); assert_se(prctl(PR_SET_PDEATHSIG, SIGTERM) == 0); fd = safe_close(fd); @@ -140,8 +143,9 @@ static int setup_machine_raw(uint64_t size, sd_bus_error *error) { goto fail; } - if (renameat2(AT_FDCWD, tmp, AT_FDCWD, "/var/lib/machines.raw", RENAME_NOREPLACE) < 0) { - r = sd_bus_error_set_errnof(error, errno, "Failed to move /var/lib/machines.raw into place: %m"); + r = rename_noreplace(AT_FDCWD, tmp, AT_FDCWD, "/var/lib/machines.raw"); + if (r < 0) { + sd_bus_error_set_errnof(error, r, "Failed to move /var/lib/machines.raw into place: %m"); goto fail; } @@ -151,8 +155,7 @@ static int setup_machine_raw(uint64_t size, sd_bus_error *error) { return r; fail: - if (tmp) - unlink_noerrno(tmp); + unlink_noerrno(tmp); if (pid > 1) kill_and_sigcont(pid, SIGKILL); @@ -196,7 +199,7 @@ int setup_machine_directory(uint64_t size, sd_bus_error *error) { return 0; } - if (path_is_mount_point("/var/lib/machines", true) > 0 || + if (path_is_mount_point("/var/lib/machines", AT_SYMLINK_FOLLOW) > 0 || dir_is_empty("/var/lib/machines") == 0) return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "/var/lib/machines is not a btrfs file system. Operation is not supported on legacy file systems.");