From a73f33fcc211e209118984970b0ebb8dcc7f973f Mon Sep 17 00:00:00 2001 From: Akilesh Kailash Date: Wed, 30 Dec 2020 00:49:12 +0000 Subject: [PATCH] walleye: 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 Change-Id: I4d30342b44aaeb7a4fdc915cc1e53ffb20c17a2f --- gpt-utils/gpt-utils.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/gpt-utils/gpt-utils.cpp b/gpt-utils/gpt-utils.cpp index 7f04f42..71b1b4a 100644 --- a/gpt-utils/gpt-utils.cpp +++ b/gpt-utils/gpt-utils.cpp @@ -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; }