Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 936d8592 authored by Pierre Ossman's avatar Pierre Ossman Committed by Russell King
Browse files

[MMC] Use command class to determine read-only status



If a card doesn't support the "write block" command class then
any attempts to open the device should reflect this by denying
write access.

Signed-off-by: default avatarPierre Ossman <drzeus@drzeus.cx>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 9e1d98c5
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -85,6 +85,12 @@ static void mmc_blk_put(struct mmc_blk_data *md)
	up(&open_lock);
}

static inline int mmc_blk_readonly(struct mmc_card *card)
{
	return mmc_card_readonly(card) ||
	       !(card->csd.cmdclass & CCC_BLOCK_WRITE);
}

static int mmc_blk_open(struct inode *inode, struct file *filp)
{
	struct mmc_blk_data *md;
@@ -97,7 +103,7 @@ static int mmc_blk_open(struct inode *inode, struct file *filp)
		ret = 0;

		if ((filp->f_mode & FMODE_WRITE) &&
			mmc_card_readonly(md->queue.card))
			mmc_blk_readonly(md->queue.card))
			ret = -EROFS;
	}

@@ -410,7 +416,7 @@ static int mmc_blk_probe(struct mmc_card *card)
	printk(KERN_INFO "%s: %s %s %dKiB %s\n",
		md->disk->disk_name, mmc_card_id(card), mmc_card_name(card),
		(card->csd.capacity << card->csd.read_blkbits) / 1024,
		mmc_card_readonly(card)?"(ro)":"");
		mmc_blk_readonly(card)?"(ro)":"");

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