2005-10-28 07:36:08

by Pierre Ossman

[permalink] [raw]
Subject: [PATCH] [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: Pierre Ossman <[email protected]>
---

drivers/mmc/mmc_block.c | 11 +++++++----
1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/mmc/mmc_block.c b/drivers/mmc/mmc_block.c
--- a/drivers/mmc/mmc_block.c
+++ b/drivers/mmc/mmc_block.c
@@ -97,7 +97,8 @@ static int mmc_blk_open(struct inode *in
ret = 0;

if ((filp->f_mode & FMODE_WRITE) &&
- mmc_card_readonly(md->queue.card))
+ (!(md->queue.card->csd.cmdclass & CCC_BLOCK_WRITE) ||
+ mmc_card_readonly(md->queue.card)))
ret = -EROFS;
}

@@ -407,10 +408,12 @@ static int mmc_blk_probe(struct mmc_card
if (err)
goto out;

- printk(KERN_INFO "%s: %s %s %dKiB %s\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,
- mmc_card_readonly(card)?"(ro)":"");
+ (card->csd.capacity << card->csd.read_blkbits) / 1024);
+ if (mmc_card_readonly(card) || !(card->csd.cmdclass & CCC_BLOCK_WRITE))
+ printk("(ro)");
+ printk("\n");

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


2005-10-28 20:15:04

by Russell King

[permalink] [raw]
Subject: Re: [PATCH] [MMC] Use command class to determine read-only status.

On Fri, Oct 28, 2005 at 09:36:05AM +0200, Pierre Ossman wrote:
> 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.

I'd rather we kept printk messages as one printk if at all possible.
How about encapsulating both of these conditions into an inline
function:

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

> diff --git a/drivers/mmc/mmc_block.c b/drivers/mmc/mmc_block.c
> --- a/drivers/mmc/mmc_block.c
> +++ b/drivers/mmc/mmc_block.c
> @@ -97,7 +97,8 @@ static int mmc_blk_open(struct inode *in
> ret = 0;
>
> if ((filp->f_mode & FMODE_WRITE) &&
> - mmc_card_readonly(md->queue.card))

+ mmc_blk_readonly(md->queue.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)" : "");

As a bonus, I think this makes the code a lot more readable... but
then I am biased. 8)

--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 Serial core

2005-10-29 22:40:11

by Pierre Ossman

[permalink] [raw]
Subject: Re: [PATCH] [MMC] Use command class to determine read-only status.

Russell King wrote:
> On Fri, Oct 28, 2005 at 09:36:05AM +0200, Pierre Ossman wrote:
>> 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.
>
> I'd rather we kept printk messages as one printk if at all possible.
> How about encapsulating both of these conditions into an inline
> function:
>

Ok with me. New patch included.


Attachments:
mmc-readonly-ccc.patch (1.34 kB)

2005-10-30 10:16:52

by Russell King

[permalink] [raw]
Subject: Re: [PATCH] [MMC] Use command class to determine read-only status.

On Sun, Oct 30, 2005 at 12:39:58AM +0200, Pierre Ossman wrote:
> Russell King wrote:
> >On Fri, Oct 28, 2005 at 09:36:05AM +0200, Pierre Ossman wrote:
> >>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.
> >
> >I'd rather we kept printk messages as one printk if at all possible.
> >How about encapsulating both of these conditions into an inline
> >function:
> >
>
> Ok with me. New patch included.

Applied, thanks.

--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 Serial core