mmc_block: add dev_t initialization check
PATCH 19/42 mmc_block: add dev_t initialization check
From: Anna Lemehova <[email protected]>
When a card is removed before mmc_blk_probe() has called add_disk(), then the minor field is uninitialized and has value 0. This caused mmc_blk_put() to always release devidx 0 even if 0 was still in use. Then the next mmc_blk_probe() used the first free idx of 0, which oopses in sysfs, since it is used by another card.
Signed-off-by Anna Lemehova <[email protected]>
Signed-off-by Adrian Hunter <[email protected]>
Cc <[email protected]>
Cc <[email protected]>
Signed-off-by Andrew Morton <[email protected]>
---
drivers/mmc/card/block.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/mmc/card/block.c renamed from drivers/mmc/card/block.c~mmc_block-add-dev_t-initialization-check +5 -0
@@ -85,7 +85,12 @@ static void mmc_blk_put(struct mmc_blk_dmutex_lock (&open_lock); md->usage--;if (md->usage ==0 ) { +int devmaj =MAJOR (disk_devt (md->disk));int devidx =MINOR (disk_devt (md->disk)) >>MMC_SHIFT ; + +if (!devmaj) + devidx = md->disk->first_minor >>MMC_SHIFT ; +__clear_bit (devidx, dev_use);put_disk (md->disk);
_