Zero blocks before BLKDISCARD

Due to observed BLKDISCARD flakiness, overwrite blocks that we want
to discard with zeros first to avoid later issues with dm-verity if
BLKDISCARD is not successful.

Bug: 20614277
Bug: 20881595
Change-Id: I0280fe115b020dcab35f49041fb55b7f8e793da3
(cherry picked from commit 96392b97f6)
This commit is contained in:
Sami Tolvanen
2015-06-09 21:42:30 +01:00
parent 02b6472546
commit 604c583c9d
+5 -9
View File
@@ -39,11 +39,6 @@
#define BLOCKSIZE 4096
// Set this to 0 to interpret 'erase' transfers to mean do a
// BLKDISCARD ioctl (the normal behavior). Set to 1 to interpret
// erase to mean fill the region with zeroes.
#define DEBUG_ERASE 0
#ifndef BLKDISCARD
#define BLKDISCARD _IO(0x12,119)
#endif
@@ -1222,8 +1217,7 @@ static int PerformCommandZero(CommandParameters* params) {
}
if (params->cmdname[0] == 'z') {
// Update only for the zero command, as the erase command will call
// this if DEBUG_ERASE is defined.
// Update only for the zero command, as the erase command will call this
params->written += tgt->size;
}
@@ -1409,8 +1403,10 @@ static int PerformCommandErase(CommandParameters* params) {
struct stat st;
uint64_t blocks[2];
if (DEBUG_ERASE) {
return PerformCommandZero(params);
// Always zero the blocks first to work around possibly flaky BLKDISCARD
// Bug: 20881595
if (PerformCommandZero(params) != 0) {
goto pceout;
}
if (!params) {