machine-id-setup: explicitly fsync() the machine ID after writing
authorLennart Poettering <lennart@poettering.net>
Wed, 20 Apr 2016 15:49:31 +0000 (17:49 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 22 Apr 2016 14:06:20 +0000 (16:06 +0200)
As discussed here:

https://github.com/systemd/systemd/issues/2619#issuecomment-184670042

Explicitly syncing /etc/machine-id after writing it, is probably a good idea,
since it has a strong "commit" character and is generally a one-time thing.

Fixes #2619.

src/core/machine-id-setup.c

index 9de528b..0145fe2 100644 (file)
@@ -101,14 +101,23 @@ static int read_machine_id(int fd, char id[34]) {
         return 0;
 }
 
-static int write_machine_id(int fd, char id[34]) {
+static int write_machine_id(int fd, const char id[34]) {
+        int r;
+
         assert(fd >= 0);
         assert(id);
 
         if (lseek(fd, 0, SEEK_SET) < 0)
                 return -errno;
 
-        return loop_write(fd, id, 33, false);
+        r = loop_write(fd, id, 33, false);
+        if (r < 0)
+                return r;
+
+        if (fsync(fd) < 0)
+                return -errno;
+
+        return 0;
 }
 
 static int generate_machine_id(char id[34], const char *root) {