diff options
Diffstat (limited to 'src/import/pull-raw.c')
-rw-r--r-- | src/import/pull-raw.c | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/src/import/pull-raw.c b/src/import/pull-raw.c index e68f197c79..3a3e015df8 100644 --- a/src/import/pull-raw.c +++ b/src/import/pull-raw.c @@ -12,7 +12,6 @@ #include "copy.h" #include "curl-util.h" #include "fd-util.h" -#include "fileio.h" #include "fs-util.h" #include "hostname-util.h" #include "import-common.h" @@ -27,6 +26,7 @@ #include "rm-rf.h" #include "string-util.h" #include "strv.h" +#include "tmpfile-util.h" #include "utf8.h" #include "util.h" #include "web-util.h" @@ -56,7 +56,6 @@ struct RawPull { char *local; bool force_local; - bool grow_machine_directory; bool settings; bool roothash; @@ -115,36 +114,42 @@ int raw_pull_new( RawPullFinished on_finished, void *userdata) { + _cleanup_(curl_glue_unrefp) CurlGlue *g = NULL; + _cleanup_(sd_event_unrefp) sd_event *e = NULL; _cleanup_(raw_pull_unrefp) RawPull *i = NULL; + _cleanup_free_ char *root = NULL; int r; assert(ret); - i = new0(RawPull, 1); - if (!i) + root = strdup(image_root ?: "/var/lib/machines"); + if (!root) return -ENOMEM; - i->on_finished = on_finished; - i->userdata = userdata; - - i->image_root = strdup(image_root ?: "/var/lib/machines"); - if (!i->image_root) - return -ENOMEM; - - i->grow_machine_directory = path_startswith(i->image_root, "/var/lib/machines"); - if (event) - i->event = sd_event_ref(event); + e = sd_event_ref(event); else { - r = sd_event_default(&i->event); + r = sd_event_default(&e); if (r < 0) return r; } - r = curl_glue_new(&i->glue, i->event); + r = curl_glue_new(&g, e); if (r < 0) return r; + i = new(RawPull, 1); + if (!i) + return -ENOMEM; + + *i = (RawPull) { + .on_finished = on_finished, + .userdata = userdata, + .image_root = TAKE_PTR(root), + .event = TAKE_PTR(e), + .glue = TAKE_PTR(g), + }; + i->glue->on_finished = pull_job_curl_on_finished; i->glue->userdata = i; @@ -237,7 +242,7 @@ static int raw_pull_maybe_convert_qcow2(RawPull *i) { if (converted_fd < 0) return log_error_errno(errno, "Failed to create %s: %m", t); - r = chattr_fd(converted_fd, FS_NOCOW_FL, FS_NOCOW_FL); + r = chattr_fd(converted_fd, FS_NOCOW_FL, FS_NOCOW_FL, NULL); if (r < 0) log_warning_errno(r, "Failed to set file attributes on %s: %m", t); @@ -353,7 +358,7 @@ static int raw_pull_make_local_copy(RawPull *i) { * performance on COW file systems like btrfs, since it * reduces fragmentation caused by not allowing in-place * writes. */ - r = chattr_fd(dfd, FS_NOCOW_FL, FS_NOCOW_FL); + r = chattr_fd(dfd, FS_NOCOW_FL, FS_NOCOW_FL, NULL); if (r < 0) log_warning_errno(r, "Failed to set file attributes on %s: %m", tp); @@ -595,7 +600,7 @@ static int raw_pull_job_on_open_disk_raw(PullJob *j) { if (r < 0) return r; - r = chattr_fd(j->disk_fd, FS_NOCOW_FL, FS_NOCOW_FL); + r = chattr_fd(j->disk_fd, FS_NOCOW_FL, FS_NOCOW_FL, NULL); if (r < 0) log_warning_errno(r, "Failed to set file attributes on %s, ignoring: %m", i->temp_path); @@ -679,7 +684,6 @@ int raw_pull_start( i->raw_job->on_open_disk = raw_pull_job_on_open_disk_raw; i->raw_job->on_progress = raw_pull_job_on_progress; i->raw_job->calc_checksum = verify != IMPORT_VERIFY_NO; - i->raw_job->grow_machine_directory = i->grow_machine_directory; r = pull_find_old_etags(url, i->image_root, DT_REG, ".raw-", ".raw", &i->raw_job->old_etags); if (r < 0) |