diff options
Diffstat (limited to 'src/import/import-raw.c')
-rw-r--r-- | src/import/import-raw.c | 42 |
1 files changed, 18 insertions, 24 deletions
diff --git a/src/import/import-raw.c b/src/import/import-raw.c index f31432cd04..4b1161557d 100644 --- a/src/import/import-raw.c +++ b/src/import/import-raw.c @@ -10,7 +10,6 @@ #include "chattr-util.h" #include "copy.h" #include "fd-util.h" -#include "fileio.h" #include "fs-util.h" #include "hostname-util.h" #include "import-common.h" @@ -24,6 +23,7 @@ #include "ratelimit.h" #include "rm-rf.h" #include "string-util.h" +#include "tmpfile-util.h" #include "util.h" struct RawImport { @@ -37,7 +37,6 @@ struct RawImport { char *local; bool force_local; bool read_only; - bool grow_machine_directory; char *temp_path; char *final_path; @@ -47,8 +46,6 @@ struct RawImport { ImportCompress compress; - uint64_t written_since_last_grow; - sd_event_source *input_event_source; uint8_t buffer[16*1024]; @@ -94,26 +91,29 @@ int raw_import_new( void *userdata) { _cleanup_(raw_import_unrefp) RawImport *i = NULL; + _cleanup_free_ char *root = NULL; int r; assert(ret); - i = new0(RawImport, 1); + root = strdup(image_root ?: "/var/lib/machines"); + if (!root) + return -ENOMEM; + + i = new(RawImport, 1); if (!i) return -ENOMEM; - i->input_fd = i->output_fd = -1; - i->on_finished = on_finished; - i->userdata = userdata; + *i = (RawImport) { + .input_fd = -1, + .output_fd = -1, + .on_finished = on_finished, + .userdata = userdata, + .last_percent = (unsigned) -1, + .image_root = TAKE_PTR(root), + }; RATELIMIT_INIT(i->progress_rate_limit, 100 * USEC_PER_MSEC, 1); - i->last_percent = (unsigned) -1; - - 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); @@ -175,7 +175,7 @@ static int raw_import_maybe_convert_qcow2(RawImport *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); @@ -260,7 +260,7 @@ static int raw_import_open_disk(RawImport *i) { if (i->output_fd < 0) return log_error_errno(errno, "Failed to open destination %s: %m", i->temp_path); - r = chattr_fd(i->output_fd, FS_NOCOW_FL, FS_NOCOW_FL); + r = chattr_fd(i->output_fd, FS_NOCOW_FL, FS_NOCOW_FL, NULL); if (r < 0) log_warning_errno(r, "Failed to set file attributes on %s: %m", i->temp_path); @@ -300,19 +300,13 @@ static int raw_import_write(const void *p, size_t sz, void *userdata) { RawImport *i = userdata; ssize_t n; - if (i->grow_machine_directory && i->written_since_last_grow >= GROW_INTERVAL_BYTES) { - i->written_since_last_grow = 0; - grow_machine_directory(); - } - n = sparse_write(i->output_fd, p, sz, 64); if (n < 0) - return -errno; + return (int) n; if ((size_t) n < sz) return -EIO; i->written_uncompressed += sz; - i->written_since_last_grow += sz; return 0; } |