diff options
author | Tianjie Xu <xunchang@google.com> | 2016-06-22 05:11:24 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-06-22 05:11:24 +0000 |
commit | 0eade3f02775733fba1404d8f26ad0386f225f72 (patch) | |
tree | ea6a2a2c55096ff40b30d08f5372d75943c1b988 | |
parent | 1f87a820ad227befc84f6a2a11fa73333f8deb5f (diff) | |
parent | b64439b2916913ed0d544e6e19724868ffa4008c (diff) | |
download | build-0eade3f02775733fba1404d8f26ad0386f225f72.tar.gz |
Merge "Limit the number of blocks in command zero" into nyc-dev
-rw-r--r-- | tools/releasetools/blockimgdiff.py | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/tools/releasetools/blockimgdiff.py b/tools/releasetools/blockimgdiff.py index a7a4098f76..66d59077dd 100644 --- a/tools/releasetools/blockimgdiff.py +++ b/tools/releasetools/blockimgdiff.py @@ -342,6 +342,21 @@ class BlockImageDiff(object): return ctx.hexdigest() def WriteTransfers(self, prefix): + def WriteTransfersZero(out, to_zero): + """Limit the number of blocks in command zero to 1024 blocks. + + This prevents the target size of one command from being too large; and + might help to avoid fsync errors on some devices.""" + + zero_blocks_limit = 1024 + total = 0 + while to_zero: + zero_blocks = to_zero.first(zero_blocks_limit) + out.append("zero %s\n" % (zero_blocks.to_string_raw(),)) + total += zero_blocks.size() + to_zero = to_zero.subtract(zero_blocks) + return total + out = [] total = 0 @@ -523,9 +538,8 @@ class BlockImageDiff(object): elif xf.style == "zero": assert xf.tgt_ranges to_zero = xf.tgt_ranges.subtract(xf.src_ranges) - if to_zero: - out.append("%s %s\n" % (xf.style, to_zero.to_string_raw())) - total += to_zero.size() + assert WriteTransfersZero(out, to_zero) == to_zero.size() + total += to_zero.size() else: raise ValueError("unknown transfer style '%s'\n" % xf.style) @@ -554,7 +568,8 @@ class BlockImageDiff(object): # Zero out extended blocks as a workaround for bug 20881595. if self.tgt.extended: - out.append("zero %s\n" % (self.tgt.extended.to_string_raw(),)) + assert (WriteTransfersZero(out, self.tgt.extended) == + self.tgt.extended.size()) total += self.tgt.extended.size() # We erase all the blocks on the partition that a) don't contain useful |