shutdown: fsync() before detaching loopback devices

This is a follow-up for cae1e8fb88c5a6b0960a2d0be3df8755f0c78462: we
also call the detach ioctls in the shutdown code, hence add the fsync()s
there too, just to be safe.
This commit is contained in:
Lennart Poettering 2020-09-22 11:19:37 +02:00
parent e59d030ff8
commit 4534b32c73

View file

@ -387,8 +387,15 @@ static int delete_loopback(const char *device) {
assert(device);
fd = open(device, O_RDONLY|O_CLOEXEC);
if (fd < 0)
if (fd < 0) {
log_debug_errno(errno, "Failed to open loopback device %s: %m", device);
return errno == ENOENT ? 0 : -errno;
}
/* Loopback block devices don't sync in-flight blocks when we clear the fd, hence sync explicitly
* first */
if (fsync(fd) < 0)
log_debug_errno(errno, "Failed to sync loop block device %s, ignoring: %m", device);
if (ioctl(fd, LOOP_CLR_FD, 0) < 0) {
if (errno == ENXIO) /* Nothing bound, didn't do anything */