am 168724c3: fix unnecessarily slow writing of EMMC partitions

* commit '168724c31ad5241e157ebb35135a734fa075d53b':
  fix unnecessarily slow writing of EMMC partitions
This commit is contained in:
Doug Zongker
2013-12-19 16:03:12 -08:00
committed by Android Git Automerger

View File

@@ -424,20 +424,18 @@ int WriteToPartition(unsigned char* data, size_t len,
{ {
size_t start = 0; size_t start = 0;
int success = 0; int success = 0;
int fd = open(partition, O_RDWR | O_SYNC); int fd = open(partition, O_RDWR);
if (fd < 0) { if (fd < 0) {
printf("failed to open %s: %s\n", partition, strerror(errno)); printf("failed to open %s: %s\n", partition, strerror(errno));
return -1; return -1;
} }
int attempt; int attempt;
for (attempt = 0; attempt < 10; ++attempt) { for (attempt = 0; attempt < 2; ++attempt) {
size_t next_sync = start + (1<<20);
printf("raw O_SYNC write %s attempt %d start at %d\n", partition, attempt+1, start);
lseek(fd, start, SEEK_SET); lseek(fd, start, SEEK_SET);
while (start < len) { while (start < len) {
size_t to_write = len - start; size_t to_write = len - start;
if (to_write > 4096) to_write = 4096; if (to_write > 1<<20) to_write = 1<<20;
ssize_t written = write(fd, data+start, to_write); ssize_t written = write(fd, data+start, to_write);
if (written < 0) { if (written < 0) {
@@ -450,10 +448,6 @@ int WriteToPartition(unsigned char* data, size_t len,
} }
} }
start += written; start += written;
if (start >= next_sync) {
fsync(fd);
next_sync = start + (1<<20);
}
} }
fsync(fd); fsync(fd);
@@ -506,8 +500,6 @@ int WriteToPartition(unsigned char* data, size_t len,
success = true; success = true;
break; break;
} }
sleep(2);
} }
if (!success) { if (!success) {
@@ -519,11 +511,7 @@ int WriteToPartition(unsigned char* data, size_t len,
printf("error closing %s (%s)\n", partition, strerror(errno)); printf("error closing %s (%s)\n", partition, strerror(errno));
return -1; return -1;
} }
// hack: sync and sleep after closing in hopes of getting
// the data actually onto flash.
printf("sleeping after close\n");
sync(); sync();
sleep(5);
break; break;
} }
} }