am 393d1e73: am 27c1ab20: Merge "udpater: Call fsync() after rename()."

* commit '393d1e739fc10e526bd3b7b83836a266bfa24079':
  udpater: Call fsync() after rename().
This commit is contained in:
Tao Bao 2015-08-04 18:42:21 +00:00 committed by Android Git Automerger
commit 0e2efab345

View file

@ -19,6 +19,7 @@
#include <dirent.h>
#include <fcntl.h>
#include <inttypes.h>
#include <libgen.h>
#include <linux/fs.h>
#include <pthread.h>
#include <stdarg.h>
@ -686,6 +687,7 @@ static int WriteStash(const char* base, const char* id, int blocks, uint8_t* buf
char *cn = NULL;
int fd = -1;
int rc = -1;
int dfd = -1;
int res;
struct stat st;
@ -744,6 +746,20 @@ static int WriteStash(const char* base, const char* id, int blocks, uint8_t* buf
goto wsout;
}
const char* dname;
dname = dirname(cn);
dfd = TEMP_FAILURE_RETRY(open(dname, O_RDONLY | O_DIRECTORY));
if (dfd == -1) {
fprintf(stderr, "failed to open \"%s\" failed: %s\n", dname, strerror(errno));
goto wsout;
}
if (fsync(dfd) == -1) {
fprintf(stderr, "fsync \"%s\" failed: %s\n", dname, strerror(errno));
goto wsout;
}
rc = 0;
wsout:
@ -751,6 +767,10 @@ wsout:
close(fd);
}
if (dfd != -1) {
close(dfd);
}
if (fn) {
free(fn);
}