From ad81cbe3f0c0c9f1e0d3c71210778e4005fe0259 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 29 Apr 2016 20:06:20 +0200 Subject: [PATCH] machined: support non-btrfs file systems with "machinectl clone" Fall back to a normal copy operation when the backing file system isn't btrfs, and hence doesn't support cheap snapshotting. Of course, this will be slow, but given that the execution is asynchronous now, this should be OK. Fixes: #1308 --- src/basic/copy.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/basic/copy.c b/src/basic/copy.c index 24d109f48..c2c0579c8 100644 --- a/src/basic/copy.c +++ b/src/basic/copy.c @@ -385,6 +385,21 @@ int copy_directory_fd(int dirfd, const char *to, bool merge) { return fd_copy_directory(dirfd, NULL, &st, AT_FDCWD, to, st.st_dev, merge); } +int copy_directory(const char *from, const char *to, bool merge) { + struct stat st; + + assert(from); + assert(to); + + if (lstat(from, &st) < 0) + return -errno; + + if (!S_ISDIR(st.st_mode)) + return -ENOTDIR; + + return fd_copy_directory(AT_FDCWD, from, &st, AT_FDCWD, to, st.st_dev, merge); +} + int copy_file_fd(const char *from, int fdt, bool try_reflink) { _cleanup_close_ int fdf = -1; int r; -- 2.30.2