]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
import: don't complain if FS_NOCOW_FL is not available
authorLennart Poettering <lennart@poettering.net>
Mon, 20 Jan 2020 20:10:31 +0000 (21:10 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 20 Jan 2020 20:10:31 +0000 (21:10 +0100)
Let's downgrade the log message to LOG_DEBUG if triggered by an fs that
doesn't support the flag.

src/import/import-raw.c
src/import/pull-raw.c
src/shared/import-util.c
src/shared/import-util.h

index a12a6d63b139a74a516f8f7b4aebeabdeea0c227..0606cf5406b38defd706c7759b135881301b0fa0 100644 (file)
@@ -7,7 +7,6 @@
 
 #include "alloc-util.h"
 #include "btrfs-util.h"
-#include "chattr-util.h"
 #include "copy.h"
 #include "fd-util.h"
 #include "fs-util.h"
@@ -174,9 +173,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, NULL);
-        if (r < 0)
-                log_warning_errno(r, "Failed to set file attributes on %s: %m", t);
+        (void) import_set_nocow_and_log(converted_fd, t);
 
         log_info("Unpacking QCOW2 file.");
 
@@ -259,10 +256,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, NULL);
-        if (r < 0)
-                log_warning_errno(r, "Failed to set file attributes on %s: %m", i->temp_path);
-
+        (void) import_set_nocow_and_log(i->output_fd, i->temp_path);
         return 0;
 }
 
index 4f76421bc7954557446c33dca1f125d141252d4c..51c12444e00af53491ff855f1b55aa24447795ea 100644 (file)
@@ -8,7 +8,6 @@
 
 #include "alloc-util.h"
 #include "btrfs-util.h"
-#include "chattr-util.h"
 #include "copy.h"
 #include "curl-util.h"
 #include "fd-util.h"
@@ -242,9 +241,7 @@ static int raw_pull_maybe_convert_qcow2(RawPull *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, NULL);
-        if (r < 0)
-                log_warning_errno(r, "Failed to set file attributes on %s: %m", t);
+        (void) import_set_nocow_and_log(converted_fd, t);
 
         log_info("Unpacking QCOW2 file.");
 
@@ -354,13 +351,9 @@ static int raw_pull_make_local_copy(RawPull *i) {
         if (dfd < 0)
                 return log_error_errno(errno, "Failed to create writable copy of image: %m");
 
-        /* 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, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
-        if (r < 0)
-                log_warning_errno(r, "Failed to set file attributes on %s: %m", tp);
+        /* 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. */
+        (void) import_set_nocow_and_log(dfd, tp);
 
         r = copy_bytes(i->raw_job->disk_fd, dfd, (uint64_t) -1, COPY_REFLINK);
         if (r < 0) {
@@ -600,10 +593,7 @@ static int raw_pull_job_on_open_disk_raw(PullJob *j) {
         if (r < 0)
                 return r;
 
-        r = chattr_fd(j->disk_fd, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
-        if (r < 0)
-                log_warning_errno(r, "Failed to set file attributes on %s, ignoring: %m", i->temp_path);
-
+        (void) import_set_nocow_and_log(j->disk_fd, i->temp_path);
         return 0;
 }
 
index f7770e7df50aea23fc799a426304295fea624106..0a57c0899090fd6d1ada682e95a48e2b329e43c1 100644 (file)
@@ -4,6 +4,8 @@
 
 #include "alloc-util.h"
 #include "btrfs-util.h"
+#include "chattr-util.h"
+#include "errno-util.h"
 #include "import-util.h"
 #include "log.h"
 #include "macro.h"
@@ -163,3 +165,15 @@ int import_assign_pool_quota_and_warn(const char *path) {
 
         return 0;
 }
+
+int import_set_nocow_and_log(int fd, const char *path) {
+        int r;
+
+        r = chattr_fd(fd, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
+        if (r < 0)
+                return log_full_errno(
+                                ERRNO_IS_NOT_SUPPORTED(r) ? LOG_DEBUG : LOG_WARNING,
+                                r, "Failed to set file attributes on %s: %m", path);
+
+        return 0;
+}
index 0f2a5170c85ca9a0ec9011f70cf6bc705a3ce6e3..d85aa565cc1e5bd089f28a158b22eaf9507c187f 100644 (file)
@@ -23,3 +23,5 @@ int tar_strip_suffixes(const char *name, char **ret);
 int raw_strip_suffixes(const char *name, char **ret);
 
 int import_assign_pool_quota_and_warn(const char *path);
+
+int import_set_nocow_and_log(int fd, const char *path);