Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mmc: block: Add error handling support for add_disk()

We never checked for errors on add_disk() as this function returned void.
Now that this is fixed, use the shiny new error handling.

The caller only cleanups the disk if we pass on an allocated md but on
error we return return ERR_PTR(ret), and so we must do all the unwinding
ourselves.

Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
Link: https://lore.kernel.org/r/20210830212538.148729-5-mcgrof@kernel.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>

authored by

Luis Chamberlain and committed by
Ulf Hansson
9c1aaec4 d74179b8

+6 -1
+6 -1
drivers/mmc/core/block.c
··· 2442 2442 /* used in ->open, must be set before add_disk: */ 2443 2443 if (area_type == MMC_BLK_DATA_AREA_MAIN) 2444 2444 dev_set_drvdata(&card->dev, md); 2445 - device_add_disk(md->parent, md->disk, mmc_disk_attr_groups); 2445 + ret = device_add_disk(md->parent, md->disk, mmc_disk_attr_groups); 2446 + if (ret) 2447 + goto err_cleanup_queue; 2446 2448 return md; 2447 2449 2450 + err_cleanup_queue: 2451 + blk_cleanup_queue(md->disk->queue); 2452 + blk_mq_free_tag_set(&md->queue.tag_set); 2448 2453 err_kfree: 2449 2454 kfree(md); 2450 2455 out: