diff options
author | Doug Zongker <dougz@google.com> | 2013-12-19 15:16:57 -0800 |
---|---|---|
committer | Doug Zongker <dougz@google.com> | 2013-12-19 15:16:57 -0800 |
commit | 168724c31ad5241e157ebb35135a734fa075d53b (patch) | |
tree | 2767df1a481624b816eeddce4cc1a1ab6b08b2de | |
parent | c87bab101893e8322b49d7c8600e3367b20ab50a (diff) | |
download | bootable_recovery-168724c31ad5241e157ebb35135a734fa075d53b.zip bootable_recovery-168724c31ad5241e157ebb35135a734fa075d53b.tar.gz bootable_recovery-168724c31ad5241e157ebb35135a734fa075d53b.tar.bz2 |
fix unnecessarily slow writing of EMMC partitions
These were attempts to write partitions "conservatively" in hopes of
fixing the problems with writing the radio partition on Nexus 4. They
didn't work (a kernel patch was needed), but got left in. They make
writing of partitions unnecessarily slow (ie, we really shouldn't need
to sync() after every 4kb). Roll back most of them, but leave the
verification read-back in.
Change-Id: I94badc0979e88816c5aa0485f6316c02be69173c
-rw-r--r-- | applypatch/applypatch.c | 18 |
1 files changed, 3 insertions, 15 deletions
diff --git a/applypatch/applypatch.c b/applypatch/applypatch.c index 6b8da2a..cb9bc23 100644 --- a/applypatch/applypatch.c +++ b/applypatch/applypatch.c @@ -424,20 +424,18 @@ int WriteToPartition(unsigned char* data, size_t len, { size_t start = 0; int success = 0; - int fd = open(partition, O_RDWR | O_SYNC); + int fd = open(partition, O_RDWR); if (fd < 0) { printf("failed to open %s: %s\n", partition, strerror(errno)); return -1; } int attempt; - for (attempt = 0; attempt < 10; ++attempt) { - size_t next_sync = start + (1<<20); - printf("raw O_SYNC write %s attempt %d start at %d\n", partition, attempt+1, start); + for (attempt = 0; attempt < 2; ++attempt) { lseek(fd, start, SEEK_SET); while (start < len) { 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); if (written < 0) { @@ -450,10 +448,6 @@ int WriteToPartition(unsigned char* data, size_t len, } } start += written; - if (start >= next_sync) { - fsync(fd); - next_sync = start + (1<<20); - } } fsync(fd); @@ -506,8 +500,6 @@ int WriteToPartition(unsigned char* data, size_t len, success = true; break; } - - sleep(2); } if (!success) { @@ -519,11 +511,7 @@ int WriteToPartition(unsigned char* data, size_t len, printf("error closing %s (%s)\n", partition, strerror(errno)); return -1; } - // hack: sync and sleep after closing in hopes of getting - // the data actually onto flash. - printf("sleeping after close\n"); sync(); - sleep(5); break; } } |