From: Daan De Meyer Date: Wed, 24 Jul 2024 13:04:43 +0000 (+0200) Subject: tree-wide: Don't explicity disable copy-on-write when copying images X-Git-Tag: v257-rc1~817^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=42e9288180ce37abd86c58774950636ebce35432;p=thirdparty%2Fsystemd.git tree-wide: Don't explicity disable copy-on-write when copying images Since the copy helpers now copy file attributes as well, let's not explicitly disable copy-on-write anymore when we copy an image. If the source already has copy-on-write disabled, the copy will have it disabled as well. Otherwise, the copy will also have copy-on-write enabled. This makes sure that reflinks always work as reflink is only supported if both source and target are copy-on-write or both source and target are not copy-on-write. --- diff --git a/src/core/exec-invoke.c b/src/core/exec-invoke.c index 8c7e29f17a4..c7082f9e2e6 100644 --- a/src/core/exec-invoke.c +++ b/src/core/exec-invoke.c @@ -2893,16 +2893,6 @@ static int setup_ephemeral( if (fd < 0) return log_debug_errno(fd, "Failed to copy image %s to %s: %m", *root_image, new_root); - - /* A root image might be subject to lots of random writes so let's try to disable COW on it - * which tends to not perform well in combination with lots of random writes. - * - * Note: btrfs actually isn't impressed by us setting the flag after making the reflink'ed - * copy, but we at least want to make the intention clear. - */ - r = chattr_fd(fd, FS_NOCOW_FL, FS_NOCOW_FL, NULL); - if (r < 0) - log_debug_errno(r, "Failed to disable copy-on-write for %s, ignoring: %m", new_root); } else { assert(*root_directory); diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index 01c3a432a57..5c7b1568584 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -6072,10 +6072,8 @@ static int run(int argc, char *argv[]) { { BLOCK_SIGNALS(SIGINT); - r = copy_file_full(arg_image, np, O_EXCL, arg_read_only ? 0400 : 0600, - FS_NOCOW_FL, FS_NOCOW_FL, - COPY_REFLINK|COPY_CRTIME|COPY_SIGINT, - NULL, NULL); + r = copy_file(arg_image, np, O_EXCL, arg_read_only ? 0400 : 0600, + COPY_REFLINK|COPY_CRTIME|COPY_SIGINT); } if (r == -EINTR) { log_error_errno(r, "Interrupted while copying image file to %s, removed again.", np); diff --git a/src/shared/discover-image.c b/src/shared/discover-image.c index dd78a013aaf..1386452203f 100644 --- a/src/shared/discover-image.c +++ b/src/shared/discover-image.c @@ -1205,8 +1205,7 @@ int image_clone(Image *i, const char *new_name, bool read_only) { case IMAGE_RAW: new_path = strjoina("/var/lib/machines/", new_name, ".raw"); - r = copy_file_atomic_full(i->path, new_path, read_only ? 0444 : 0644, FS_NOCOW_FL, FS_NOCOW_FL, - COPY_REFLINK|COPY_CRTIME, NULL, NULL); + r = copy_file_atomic(i->path, new_path, read_only ? 0444 : 0644, COPY_REFLINK|COPY_CRTIME); break; case IMAGE_BLOCK: