mirror of
https://github.com/systemd/systemd.git
synced 2024-12-26 03:22:00 +03:00
machine-id-setup: sync before committing machine-id
sync() before committing a transient machine-id to disk. This will ensure that any filesystem changes made by first-boot units will have been persisted before the first boot is marked as completed.
This commit is contained in:
parent
3023f2fead
commit
c261a5d014
@ -202,10 +202,22 @@ finish:
|
||||
|
||||
int machine_id_commit(const char *root) {
|
||||
_cleanup_close_ int fd = -1, initial_mntns_fd = -1;
|
||||
const char *etc_machine_id;
|
||||
const char *etc_machine_id, *sync_path;
|
||||
sd_id128_t id;
|
||||
int r;
|
||||
|
||||
/* Before doing anything, sync everything to ensure any changes by first-boot units are persisted.
|
||||
*
|
||||
* First, explicitly sync the file systems we care about and check if it worked. */
|
||||
FOREACH_STRING(sync_path, "/etc/", "/var/") {
|
||||
r = syncfs_path(AT_FDCWD, sync_path);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Cannot sync %s: %m", sync_path);
|
||||
}
|
||||
|
||||
/* Afterwards, sync() the rest too, but we can't check the return value for these. */
|
||||
sync();
|
||||
|
||||
/* Replaces a tmpfs bind mount of /etc/machine-id by a proper file, atomically. For this, the umount is removed
|
||||
* in a mount namespace, a new file is created at the right place. Afterwards the mount is also removed in the
|
||||
* original mount namespace, thus revealing the file that was just created. */
|
||||
|
Loading…
Reference in New Issue
Block a user