dm verity: add support for forward error correction
authorSami Tolvanen <samitolvanen@google.com>
Thu, 3 Dec 2015 14:26:30 +0000 (14:26 +0000)
committerMike Snitzer <snitzer@redhat.com>
Thu, 10 Dec 2015 15:39:03 +0000 (10:39 -0500)
commita739ff3f543afbb4a041c16cd0182c8e8d366e70
tree2613a382283548a1b88e6f2ba589252312d05fff
parentbb4d73ac5e4f0a6c4853f35824f6cb2d396a2f9c
dm verity: add support for forward error correction

Add support for correcting corrupted blocks using Reed-Solomon.

This code uses RS(255, N) interleaved across data and hash
blocks. Each error-correcting block covers N bytes evenly
distributed across the combined total data, so that each byte is a
maximum distance away from the others. This makes it possible to
recover from several consecutive corrupted blocks with relatively
small space overhead.

In addition, using verity hashes to locate erasures nearly doubles
the effectiveness of error correction. Being able to detect
corrupted blocks also improves performance, because only corrupted
blocks need to corrected.

For a 2 GiB partition, RS(255, 253) (two parity bytes for each
253-byte block) can correct up to 16 MiB of consecutive corrupted
blocks if erasures can be located, and 8 MiB if they cannot, with
16 MiB space overhead.

Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Documentation/device-mapper/verity.txt
drivers/md/Kconfig
drivers/md/Makefile
drivers/md/dm-verity-fec.c [new file with mode: 0644]
drivers/md/dm-verity-fec.h [new file with mode: 0644]
drivers/md/dm-verity-target.c
drivers/md/dm-verity.h