X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fimport%2Fimport-gpt.c;h=d304a399fb86c2845aae74e5387351e6a63c7f72;hp=a85ceee337218e8440477cb850056ca040e42a4b;hb=dfd1520d3ab98cfa376f2d84ed1e7887d013720d;hpb=087682d103e08670963686d9b1bc1d35c412a63f diff --git a/src/import/import-gpt.c b/src/import/import-gpt.c index a85ceee33..d304a399f 100644 --- a/src/import/import-gpt.c +++ b/src/import/import-gpt.c @@ -20,6 +20,7 @@ ***/ #include +#include #include #include "hashmap.h" @@ -165,7 +166,7 @@ static void gpt_import_file_success(GptImportFile *f) { f->disk_fd = open(f->final_path, O_RDONLY|O_NOCTTY|O_CLOEXEC); if (f->disk_fd < 0) { - r = log_error_errno(errno, "Failed top open vendor image: %m"); + r = log_error_errno(errno, "Failed to open vendor image: %m"); goto finish; } } @@ -186,6 +187,14 @@ static void gpt_import_file_success(GptImportFile *f) { goto finish; } + /* Turn off COW writing. This should greatly improve + * performance on COW file systems like btrfs, since it + * reduces fragmentation caused by not allowing in-place + * writes. */ + r = chattr_fd(dfd, true, FS_NOCOW_FL); + if (r < 0) + log_warning_errno(errno, "Failed to set file attributes on %s: %m", f->temp_path); + r = copy_bytes(f->disk_fd, dfd, (off_t) -1, true); if (r < 0) { log_error_errno(r, "Failed to make writable copy of image: %m");