diff -urNp linux-2.6-orig/drivers/mmc/card/block.c linux-2.6/drivers/mmc/card/block.c --- linux-2.6-orig/drivers/mmc/card/block.c 2007-10-08 15:39:28.000000000 +0200 +++ linux-2.6/drivers/mmc/card/block.c 2007-10-08 15:00:55.000000000 +0200 @@ -244,6 +244,16 @@ static int mmc_blk_issue_rq(struct mmc_q !mmc_card_sd(card)) brq.data.blocks = 1; + /* Some SD cards in SPI mode return a crc error when trying + * to read the last block using a multiread command. + */ + if (mmc_host_is_spi(card->host) + && brq.data.blocks > 1 + && rq_data_dir(req) == READ + && req->sector + req->nr_sectors >= + get_capacity(md->disk)-8) + brq.data.blocks = 1; + if (brq.data.blocks > 1) { /* SPI multiblock writes terminate using a special * token, not a STOP_TRANSMISSION request.