]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
bootctl: properly sync fs before/after moving random seed file into place
authorLennart Poettering <lennart@poettering.net>
Tue, 20 Dec 2022 10:15:51 +0000 (11:15 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 4 Jan 2023 14:18:10 +0000 (15:18 +0100)
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.

src/boot/bootctl-random-seed.c

index 98ecc86aa5a2c1137c2d20178397266a35d5a4e8..7097f78855a294133d22f56456fd80218c8f0443 100644 (file)
@@ -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;
 }