Force write to disk while doing uncrypt

This should reduce errors if the device reboots before the blocks
are commited to disk.

Bug: 18481902

Change-Id: I13cda1c78955e4c83522fbcf87ddb16cc9f97683
This commit is contained in:
Michael Runge 2014-11-21 16:00:45 -08:00
parent de27d4cbb7
commit 4b54239173

View file

@ -164,7 +164,8 @@ char* parse_recovery_command_file()
if (f == NULL) {
return NULL;
}
FILE* fo = fopen(RECOVERY_COMMAND_FILE_TMP, "w");
int fd = open(RECOVERY_COMMAND_FILE_TMP, O_WRONLY | O_SYNC);
FILE* fo = fdopen(fd, "w");
while (fgets(temp, sizeof(temp), f)) {
printf("read: %s", temp);
@ -175,6 +176,7 @@ char* parse_recovery_command_file()
fputs(temp, fo);
}
fclose(f);
fsync(fd);
fclose(fo);
if (fn) {
@ -190,7 +192,8 @@ int produce_block_map(const char* path, const char* map_file, const char* blk_de
struct stat sb;
int ret;
FILE* mapf = fopen(map_file, "w");
int mapfd = open(map_file, O_WRONLY | O_SYNC);
FILE* mapf = fdopen(mapfd, "w");
ret = stat(path, &sb);
if (ret != 0) {
@ -232,7 +235,7 @@ int produce_block_map(const char* path, const char* map_file, const char* blk_de
int wfd = -1;
if (encrypted) {
wfd = open(blk_dev, O_WRONLY);
wfd = open(blk_dev, O_WRONLY | O_SYNC);
if (wfd < 0) {
ALOGE("failed to open fd for writing: %s\n", strerror(errno));
return -1;
@ -302,9 +305,11 @@ int produce_block_map(const char* path, const char* map_file, const char* blk_de
fprintf(mapf, "%d %d\n", ranges[i*2], ranges[i*2+1]);
}
fsync(mapfd);
fclose(mapf);
close(fd);
if (encrypted) {
fsync(wfd);
close(wfd);
}
@ -318,7 +323,7 @@ void wipe_misc() {
struct fstab_rec* v = &fstab->recs[i];
if (!v->mount_point) continue;
if (strcmp(v->mount_point, "/misc") == 0) {
int fd = open(v->blk_device, O_WRONLY);
int fd = open(v->blk_device, O_WRONLY | O_SYNC);
uint8_t zeroes[1088]; // sizeof(bootloader_message) from recovery
memset(zeroes, 0, sizeof(zeroes));
@ -333,7 +338,7 @@ void wipe_misc() {
written += w;
}
}
fsync(fd);
close(fd);
}
}