1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-26 03:22:00 +03:00

import: don't complain if FS_NOCOW_FL is not available

Let's downgrade the log message to LOG_DEBUG if triggered by an fs that
doesn't support the flag.
This commit is contained in:
Lennart Poettering 2020-01-20 21:10:31 +01:00
parent cdc6804b60
commit 137c6c6b36
4 changed files with 23 additions and 23 deletions

View File

@ -7,7 +7,6 @@
#include "alloc-util.h" #include "alloc-util.h"
#include "btrfs-util.h" #include "btrfs-util.h"
#include "chattr-util.h"
#include "copy.h" #include "copy.h"
#include "fd-util.h" #include "fd-util.h"
#include "fs-util.h" #include "fs-util.h"
@ -174,9 +173,7 @@ static int raw_import_maybe_convert_qcow2(RawImport *i) {
if (converted_fd < 0) if (converted_fd < 0)
return log_error_errno(errno, "Failed to create %s: %m", t); return log_error_errno(errno, "Failed to create %s: %m", t);
r = chattr_fd(converted_fd, FS_NOCOW_FL, FS_NOCOW_FL, NULL); (void) import_set_nocow_and_log(converted_fd, t);
if (r < 0)
log_warning_errno(r, "Failed to set file attributes on %s: %m", t);
log_info("Unpacking QCOW2 file."); log_info("Unpacking QCOW2 file.");
@ -259,10 +256,7 @@ static int raw_import_open_disk(RawImport *i) {
if (i->output_fd < 0) if (i->output_fd < 0)
return log_error_errno(errno, "Failed to open destination %s: %m", i->temp_path); 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); (void) import_set_nocow_and_log(i->output_fd, i->temp_path);
if (r < 0)
log_warning_errno(r, "Failed to set file attributes on %s: %m", i->temp_path);
return 0; return 0;
} }

View File

@ -8,7 +8,6 @@
#include "alloc-util.h" #include "alloc-util.h"
#include "btrfs-util.h" #include "btrfs-util.h"
#include "chattr-util.h"
#include "copy.h" #include "copy.h"
#include "curl-util.h" #include "curl-util.h"
#include "fd-util.h" #include "fd-util.h"
@ -242,9 +241,7 @@ static int raw_pull_maybe_convert_qcow2(RawPull *i) {
if (converted_fd < 0) if (converted_fd < 0)
return log_error_errno(errno, "Failed to create %s: %m", t); return log_error_errno(errno, "Failed to create %s: %m", t);
r = chattr_fd(converted_fd, FS_NOCOW_FL, FS_NOCOW_FL, NULL); (void) import_set_nocow_and_log(converted_fd, t);
if (r < 0)
log_warning_errno(r, "Failed to set file attributes on %s: %m", t);
log_info("Unpacking QCOW2 file."); log_info("Unpacking QCOW2 file.");
@ -354,13 +351,9 @@ static int raw_pull_make_local_copy(RawPull *i) {
if (dfd < 0) if (dfd < 0)
return log_error_errno(errno, "Failed to create writable copy of image: %m"); return log_error_errno(errno, "Failed to create writable copy of image: %m");
/* Turn off COW writing. This should greatly improve /* Turn off COW writing. This should greatly improve performance on COW file systems like btrfs,
* performance on COW file systems like btrfs, since it * since it reduces fragmentation caused by not allowing in-place writes. */
* reduces fragmentation caused by not allowing in-place (void) import_set_nocow_and_log(dfd, tp);
* 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);
r = copy_bytes(i->raw_job->disk_fd, dfd, (uint64_t) -1, COPY_REFLINK); r = copy_bytes(i->raw_job->disk_fd, dfd, (uint64_t) -1, COPY_REFLINK);
if (r < 0) { if (r < 0) {
@ -600,10 +593,7 @@ static int raw_pull_job_on_open_disk_raw(PullJob *j) {
if (r < 0) if (r < 0)
return r; return r;
r = chattr_fd(j->disk_fd, FS_NOCOW_FL, FS_NOCOW_FL, NULL); (void) import_set_nocow_and_log(j->disk_fd, i->temp_path);
if (r < 0)
log_warning_errno(r, "Failed to set file attributes on %s, ignoring: %m", i->temp_path);
return 0; return 0;
} }

View File

@ -4,6 +4,8 @@
#include "alloc-util.h" #include "alloc-util.h"
#include "btrfs-util.h" #include "btrfs-util.h"
#include "chattr-util.h"
#include "errno-util.h"
#include "import-util.h" #include "import-util.h"
#include "log.h" #include "log.h"
#include "macro.h" #include "macro.h"
@ -163,3 +165,15 @@ int import_assign_pool_quota_and_warn(const char *path) {
return 0; 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;
}

View File

@ -23,3 +23,5 @@ int tar_strip_suffixes(const char *name, char **ret);
int raw_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_assign_pool_quota_and_warn(const char *path);
int import_set_nocow_and_log(int fd, const char *path);