[PATCH] Support for read-only MMC cards

From: Pierre Ossman
Date: Sat Jun 04 2005 - 15:00:13 EST


If the card does not support the write commands then only allow
read-only access.

Signed-off-by: Pierre Ossman <drzeus@xxxxxxxxx>
--- linux-2.6.11/drivers/mmc/mmc_block.c.orig 2005-06-04 21:44:20.000000000 +0200
+++ linux-2.6.11/drivers/mmc/mmc_block.c 2005-06-04 21:48:46.000000000 +0200
@@ -95,6 +95,10 @@ static int mmc_blk_open(struct inode *in
if (md->usage == 2)
check_disk_change(inode->i_bdev);
ret = 0;
+
+ if ((filp->f_mode & FMODE_WRITE) &&
+ !(md->queue.card->csd.cmdclass & CCC_BLOCK_WRITE))
+ ret = -EROFS;
}

return ret;
@@ -403,9 +407,12 @@ static int mmc_blk_probe(struct mmc_card
if (err)
goto out;

- printk(KERN_INFO "%s: %s %s %dKiB\n",
+ printk(KERN_INFO "%s: %s %s %dKiB",
md->disk->disk_name, mmc_card_id(card), mmc_card_name(card),
(card->csd.capacity << card->csd.read_blkbits) / 1024);
+ if (!(card->csd.cmdclass & CCC_BLOCK_WRITE))
+ printk(" (ro)");
+ printk("\n");

mmc_set_drvdata(card, md);
add_disk(md->disk);