Merge tag 'for-4.20/block-20181021' of git://git.kernel.dk/linux-block
[muen/linux.git] / drivers / mmc / core / block.c
index de8e1a8be690a0faaceb9adda96b455b48cdd837..c35b5b08bb334626279d3d4f12a8a4c6af691492 100644 (file)
@@ -1370,6 +1370,16 @@ static void mmc_blk_data_prep(struct mmc_queue *mq, struct mmc_queue_req *mqrq,
                brq->data.blocks = card->host->max_blk_count;
 
        if (brq->data.blocks > 1) {
+               /*
+                * Some SD cards in SPI mode return a CRC error or even lock up
+                * completely when trying to read the last block using a
+                * multiblock read command.
+                */
+               if (mmc_host_is_spi(card->host) && (rq_data_dir(req) == READ) &&
+                   (blk_rq_pos(req) + blk_rq_sectors(req) ==
+                    get_capacity(md->disk)))
+                       brq->data.blocks--;
+
                /*
                 * After a read error, we redo the request one sector
                 * at a time in order to accurately determine which