Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e1bb2733 authored by Doug Zongker's avatar Doug Zongker Committed by Android Git Automerger
Browse files

am 168724c3: fix unnecessarily slow writing of EMMC partitions

* commit '168724c3':
  fix unnecessarily slow writing of EMMC partitions
parents d327c63a 168724c3
Loading
Loading
Loading
Loading
+3 −15
Original line number Diff line number Diff line
@@ -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;
        }
    }