OTA: make lp_metadata write more atomic
Powerloss of OS failure occurs when super is merging, then the device can't bring up again for no lp_metadata sync, so make lp_metadata sync in time. Change-Id: I1ea31662b838e35022a566b614796f2d5e05df4b Signed-off-by: Jia Jia <jia.jia@zte.com.cn>
This commit is contained in:
parent
06a150b9f5
commit
45eee7fe52
1 changed files with 10 additions and 1 deletions
|
|
@ -30,6 +30,7 @@ namespace android {
|
|||
namespace fiemap {
|
||||
|
||||
using namespace android::fs_mgr;
|
||||
using android::base::unique_fd;
|
||||
|
||||
static constexpr uint32_t kMaxMetadataSize = 256 * 1024;
|
||||
|
||||
|
|
@ -109,10 +110,18 @@ bool SaveMetadata(MetadataBuilder* builder, const std::string& metadata_dir) {
|
|||
if (exported->partitions.empty() && android::base::RemoveFileIfExists(metadata_file)) {
|
||||
return true;
|
||||
}
|
||||
if (!WriteToImageFile(metadata_file, *exported.get())) {
|
||||
|
||||
unique_fd fd(open(metadata_file.c_str(), O_CREAT | O_RDWR | O_TRUNC | O_CLOEXEC | O_BINARY | O_SYNC, 0644));
|
||||
if (fd < 0) {
|
||||
LOG(ERROR) << "open failed: " << metadata_file;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!WriteToImageFile(fd, *exported.get())) {
|
||||
LOG(ERROR) << "Unable to save new metadata";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue