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
This commit is contained in:
Sami Tolvanen
2015-06-09 21:42:30 +01:00
parent 3f9db6af3d
commit 96392b97f6

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
@@ -1283,8 +1278,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;
}
@@ -1470,8 +1464,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) {