Zero out blocks that may be touched by dm-verity.
dm-verity may touch some blocks that are not in the care_map due to block device read-ahead. It will fail if such blocks contain non-zeroes. As a workaround, we mark them as extended blocks and zero out explicitly to avoid dm-verity failures. Bug: 20881595 Change-Id: I54e24e70ad822c0d6d7af43301f74d24505f4461
This commit is contained in:
@@ -238,6 +238,28 @@ class RangeSet(object):
|
||||
out.append(offset + p - start)
|
||||
return RangeSet(data=out)
|
||||
|
||||
def extend(self, n):
|
||||
"""Extend the RangeSet by 'n' blocks.
|
||||
|
||||
The lower bound is guaranteed to be non-negative.
|
||||
|
||||
>>> RangeSet("0-9").extend(1)
|
||||
<RangeSet("0-10")>
|
||||
>>> RangeSet("10-19").extend(15)
|
||||
<RangeSet("0-34")>
|
||||
>>> RangeSet("10-19 30-39").extend(4)
|
||||
<RangeSet("6-23 26-43")>
|
||||
>>> RangeSet("10-19 30-39").extend(10)
|
||||
<RangeSet("0-49")>
|
||||
"""
|
||||
out = self
|
||||
for i in range(0, len(self.data), 2):
|
||||
s, e = self.data[i:i+2]
|
||||
s1 = max(0, s - n)
|
||||
e1 = e + n
|
||||
out = out.union(RangeSet(str(s1) + "-" + str(e1-1)))
|
||||
return out
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import doctest
|
||||
|
Reference in New Issue
Block a user