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 96392b97f6bf1670d478494fb6df89a3410e53fa)
diff --git a/updater/blockimg.c b/updater/blockimg.c
index 7b8721d..a2786c8 100644
--- a/updater/blockimg.c
+++ b/updater/blockimg.c
@@ -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 @@
     }
 
     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 @@
     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) {