Skip to content

Commit

Permalink
mmc: Avoid re-using minor numbers before the original device is closed.
Browse files Browse the repository at this point in the history
Move the code which marks the minor number as free to mmc_blk_put() so
that it happens on the final close() (or removal), instead of doing it
at removal even when the device is still logically open.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
  • Loading branch information
David Woodhouse authored and Pierre Ossman committed Nov 21, 2007
1 parent b37a050 commit 1dff314
Showing 1 changed file with 6 additions and 8 deletions.
14 changes: 6 additions & 8 deletions drivers/mmc/card/block.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@
* max 8 partitions per card
*/
#define MMC_SHIFT 3
#define MMC_NUM_MINORS (256 >> MMC_SHIFT)

static unsigned long dev_use[MMC_NUM_MINORS/(8*sizeof(unsigned long))];

/*
* There is one mmc_blk_data per slot.
Expand Down Expand Up @@ -80,6 +83,9 @@ static void mmc_blk_put(struct mmc_blk_data *md)
mutex_lock(&open_lock);
md->usage--;
if (md->usage == 0) {
int devidx = md->disk->first_minor >> MMC_SHIFT;
__clear_bit(devidx, dev_use);

put_disk(md->disk);
kfree(md);
}
Expand Down Expand Up @@ -406,9 +412,6 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
return 0;
}

#define MMC_NUM_MINORS (256 >> MMC_SHIFT)

static unsigned long dev_use[MMC_NUM_MINORS/(8*sizeof(unsigned long))];

static inline int mmc_blk_readonly(struct mmc_card *card)
{
Expand Down Expand Up @@ -574,17 +577,12 @@ static void mmc_blk_remove(struct mmc_card *card)
struct mmc_blk_data *md = mmc_get_drvdata(card);

if (md) {
int devidx;

/* Stop new requests from getting into the queue */
del_gendisk(md->disk);

/* Then flush out any already in there */
mmc_cleanup_queue(&md->queue);

devidx = md->disk->first_minor >> MMC_SHIFT;
__clear_bit(devidx, dev_use);

mmc_blk_put(md);
}
mmc_set_drvdata(card, NULL);
Expand Down

0 comments on commit 1dff314

Please sign in to comment.