mmc: block: Make multi-block write errors retry as single block writes

The current mmc block code retries i/o errors on multi-block reads by
using single block reads. For platforms with unreliable multi-block
operations, like the ARM Versatile Express board, this is a valuable
error recovery path.

This patch extends the single block retry to also include write
operations.

Signed-off-by: Jon Medhurst <jon.medhurst@linaro.org>
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index f1c84de..0b371e6 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -1062,6 +1062,10 @@
 				return MMC_BLK_ECC_ERR;
 			return MMC_BLK_DATA_ERR;
 		} else {
+			if (brq->data.blocks > 1) {
+				   /* Hack to redo transfer one sector at a time */
+				   return MMC_BLK_DATA_ERR;
+			}
 			return MMC_BLK_CMD_ERR;
 		}
 	}
@@ -1342,7 +1346,7 @@
 		case MMC_BLK_ECC_ERR:
 			if (brq->data.blocks > 1) {
 				/* Redo read one sector at a time */
-				pr_warning("%s: retrying using single block read\n",
+				pr_warning("%s: retrying using single block transfer\n",
 					   req->rq_disk->disk_name);
 				disable_multi = 1;
 				break;