diff options
author | Lennart Poettering <lennart@poettering.net> | 2015-01-08 19:15:49 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2015-01-08 23:13:45 +0100 |
commit | f2068bcce01db31cdc9422f44185f3b49c04d2ce (patch) | |
tree | fd5f6ddf9b0c36e9deb24252267d5ecce0cb2fe3 /src/shared/machine-image.c | |
parent | e45fc5e738b0b7700e8b4f3c4b25c58a49b44b27 (diff) |
machined: when cloning a raw disk image, also set the NOCOW flag
Diffstat (limited to 'src/shared/machine-image.c')
-rw-r--r-- | src/shared/machine-image.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/shared/machine-image.c b/src/shared/machine-image.c index 36b64e1fab..25689ca93c 100644 --- a/src/shared/machine-image.c +++ b/src/shared/machine-image.c @@ -20,6 +20,7 @@ ***/ #include <sys/statfs.h> +#include <linux/fs.h> #include <fcntl.h> #include "strv.h" @@ -440,7 +441,7 @@ int image_clone(Image *i, const char *new_name, bool read_only) { case IMAGE_GPT: new_path = strappenda("/var/lib/container/", new_name, ".gpt"); - r = copy_file_atomic(i->path, new_path, read_only ? 0444 : 0644, false); + r = copy_file_atomic(i->path, new_path, read_only ? 0444 : 0644, false, FS_NOCOW_FL); break; default: @@ -477,6 +478,12 @@ int image_read_only(Image *i, bool b) { if (chmod(i->path, (st.st_mode & 0444) | (b ? 0000 : 0200)) < 0) return -errno; + + /* If the images is now read-only, it's a good time to + * defrag it, given that no write patterns will + * fragment it again. */ + if (b) + (void) btrfs_defrag(i->path); break; } |