From: Lennart Poettering Date: Fri, 22 Jun 2018 09:36:58 +0000 (+0200) Subject: bootctl: let's be paranoid and synchronize the ESP in full after all changes X-Git-Tag: v240~610^2~22 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e0e8d177c8b2b41adfb966640042ea4ed323dd40;p=thirdparty%2Fsystemd.git bootctl: let's be paranoid and synchronize the ESP in full after all changes We already synchronize all files we write individually, as well as the directories they are stored in. Let's also synchronize the ESP as a whole after our work, just in case. --- diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c index 827927f18b5..0ee908e8a34 100644 --- a/src/boot/bootctl.c +++ b/src/boot/bootctl.c @@ -1066,6 +1066,22 @@ static int verb_list(int argc, char *argv[], void *userdata) { return 0; } +static int sync_esp(void) { + _cleanup_close_ int fd = -1; + + if (!arg_path) + return 0; + + fd = open(arg_path, O_CLOEXEC|O_DIRECTORY|O_RDONLY); + if (fd < 0) + return log_error_errno(errno, "Couldn't open ESP '%s' for synchronization: %m", arg_path); + + if (syncfs(fd) < 0) + return log_error_errno(errno, "Failed to synchronize the ESP '%s': %m", arg_path); + + return 1; +} + static int verb_install(int argc, char *argv[], void *userdata) { sd_id128_t uuid = SD_ID128_NULL; @@ -1092,6 +1108,8 @@ static int verb_install(int argc, char *argv[], void *userdata) { } } + (void) sync_esp(); + if (arg_touch_variables) r = install_variables(arg_path, part, pstart, psize, uuid, @@ -1111,6 +1129,8 @@ static int verb_remove(int argc, char *argv[], void *userdata) { r = remove_binaries(arg_path); + (void) sync_esp(); + if (arg_touch_variables) { int q;