taimen: gpt-utils: fsync after block device writes

When markBoolSuccessful is invoked, we update
the partition table. These writes should be
synced before merge operation is resumed post OTA.
If not, any crash before these writes are landed to
backing storage will lead to incorrect switching of
slots.

BUG: 175711601
Test: Verify slot switching correctly after crash when merge in progress
(on redbull)
Signed-off-by: Akilesh Kailash <akailash@google.com>
Change-Id: I4d30342b44aaeb7a4fdc915cc1e53ffb20c17a2f
This commit is contained in:
Akilesh Kailash
2020-12-30 00:49:12 +00:00
committed by Asriadi Rahim
parent e28d504d68
commit 4112681d3e

View File

@@ -157,11 +157,18 @@ static int blk_rw(int fd, int rw, int64_t offset, uint8_t *buf, unsigned len)
else
r = read(fd, buf, len);
if (r < 0)
if (r < 0) {
fprintf(stderr, "block dev %s failed: %s\n", rw ? "write" : "read",
strerror(errno));
else
r = 0;
} else {
if (rw) {
r = fsync(fd);
if (r < 0)
fprintf(stderr, "fsync failed: %s\n", strerror(errno));
} else {
r = 0;
}
}
return r;
}