1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-12-23 17:34:00 +03:00

shutdown: fsync() before detaching loopback devices

This is a follow-up for cae1e8fb88: 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 */