summaryrefslogtreecommitdiff
path: root/src/boot/bootctl-random-seed.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2022-12-20 11:15:51 +0100
committerLennart Poettering <lennart@poettering.net>2023-01-04 15:18:10 +0100
commit60315d59534fe59aacae26e2c497359a409af0b6 (patch)
treef1bb77b6d38a96ff113f5df229a7890882cb0fa1 /src/boot/bootctl-random-seed.c
parent6b97b267bf990b2ec553efae229b7996dc262996 (diff)
downloadsystemd-60315d59534fe59aacae26e2c497359a409af0b6.tar.gz
bootctl: properly sync fs before/after moving random seed file into place
Let's do a careful, focussed sync at the right places instead of a blanket sync at the end. After all we want to run this on every boot soon.
Diffstat (limited to 'src/boot/bootctl-random-seed.c')
-rw-r--r--src/boot/bootctl-random-seed.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/boot/bootctl-random-seed.c b/src/boot/bootctl-random-seed.c
index 98ecc86aa5..7097f78855 100644
--- a/src/boot/bootctl-random-seed.c
+++ b/src/boot/bootctl-random-seed.c
@@ -50,6 +50,11 @@ int install_random_seed(const char *esp) {
goto fail;
}
+ if (fsync(fd) < 0 || fsync(loader_dir_fd) < 0) {
+ r = log_error_errno(errno, "Failed to sync random seed file: %m");
+ goto fail;
+ }
+
if (renameat(loader_dir_fd, tmp, loader_dir_fd, "random-seed") < 0) {
r = log_error_errno(errno, "Failed to move random seed file into place: %m");
goto fail;
@@ -57,6 +62,9 @@ int install_random_seed(const char *esp) {
tmp = mfree(tmp);
+ if (syncfs(fd) < 0)
+ return log_error_errno(errno, "Failed to sync ESP file system: %m");
+
log_info("Random seed file %s/loader/random-seed successfully written (%zu bytes).", esp, sizeof(buffer));
if (!arg_touch_variables)
@@ -147,6 +155,5 @@ int verb_random_seed(int argc, char *argv[], void *userdata) {
if (r < 0)
return r;
- (void) sync_everything();
return 0;
}