From: Lennart Poettering Date: Thu, 16 Jan 2025 09:22:39 +0000 (+0100) Subject: machine-id-setup: do sync() stuff only when operating on the real rootfs X-Git-Tag: v258-rc1~1548^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4d0fb50e9ea2c3caa167e744145aef5cf24efb9e;p=thirdparty%2Fsystemd.git machine-id-setup: do sync() stuff only when operating on the real rootfs If we operate relative some explicit rootfs the reason for the sync()ing is not really given, we are not really acting as a milestone at boot, but "offline". --- diff --git a/src/shared/machine-id-setup.c b/src/shared/machine-id-setup.c index 42405257428..5526a900f47 100644 --- a/src/shared/machine-id-setup.c +++ b/src/shared/machine-id-setup.c @@ -255,17 +255,20 @@ int machine_id_commit(const char *root) { 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); - } + if (empty_or_root(root)) { + /* 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(); + /* 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