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

journal-file: explicitly handle file systems that do not support hole punching

Apparently the error code fallocate() returns if hole punching is not
supported is not too well defined (man page just says "an error is
returned"), hence let's accept the usual set of errors, and the
normalize it to EOPNOTSUPP, and generate a clear error message in this
case.
This commit is contained in:
Lennart Poettering 2022-02-02 10:42:37 +01:00
parent 47497593fa
commit d94e8a5064

View File

@ -5,6 +5,7 @@
#include "chattr-util.h"
#include "copy.h"
#include "errno-util.h"
#include "fd-util.h"
#include "format-util.h"
#include "journal-authenticate.h"
@ -91,8 +92,14 @@ static int managed_journal_file_entry_array_punch_hole(JournalFile *f, uint64_t
return 0;
}
if (fallocate(f->fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, offset, sz) < 0)
if (fallocate(f->fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, offset, sz) < 0) {
if (ERRNO_IS_NOT_SUPPORTED(errno)) {
log_debug("Hole punching not supported by backing file system, skipping.");
return -EOPNOTSUPP; /* Make recognizable */
}
return log_debug_errno(errno, "Failed to punch hole in entry array of %s: %m", f->path);
}
return 0;
}
@ -135,8 +142,12 @@ static int managed_journal_file_punch_holes(JournalFile *f) {
if (le64toh(o.data.n_entries) == 0)
continue;
(void) managed_journal_file_entry_array_punch_hole(
f, le64toh(o.data.entry_array_offset), le64toh(o.data.n_entries) - 1);
r = managed_journal_file_entry_array_punch_hole(
f, le64toh(o.data.entry_array_offset), le64toh(o.data.n_entries) - 1);
if (r == -EOPNOTSUPP)
return -EOPNOTSUPP;
/* Ignore other errors */
}
}
}