Message ID | 20210823202930.137278-7-mcgrof@kernel.org |
---|---|
State | New |
Headers | show |
Series | block: first batch of add_disk() error handling conversions | expand |
On Mon, Aug 23, 2021 at 01:29:26PM -0700, Luis Chamberlain wrote: > 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 cleanups the disk already so all we need to do > is just pass along the return value. > > Signed-off-by: Luis Chamberlain <mcgrof@kernel.org> > --- > drivers/mmc/core/block.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c > index 4c11f171e56d..4f12c6d1e1b5 100644 > --- a/drivers/mmc/core/block.c > +++ b/drivers/mmc/core/block.c > @@ -2432,7 +2432,9 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card, > /* used in ->open, must be set before add_disk: */ > if (area_type == MMC_BLK_DATA_AREA_MAIN) > dev_set_drvdata(&card->dev, md); > - device_add_disk(md->parent, md->disk, mmc_disk_attr_groups); > + ret = device_add_disk(md->parent, md->disk, mmc_disk_attr_groups); > + if (ret) > + goto out; This needs to do a blk_cleanup_queue and also te kfree of md.
On Tue, Aug 24, 2021 at 07:13:13AM +0100, Christoph Hellwig wrote: > On Mon, Aug 23, 2021 at 01:29:26PM -0700, Luis Chamberlain wrote: > > 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 cleanups the disk already so all we need to do > > is just pass along the return value. > > > > Signed-off-by: Luis Chamberlain <mcgrof@kernel.org> > > --- > > drivers/mmc/core/block.c | 4 +++- > > 1 file changed, 3 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c > > index 4c11f171e56d..4f12c6d1e1b5 100644 > > --- a/drivers/mmc/core/block.c > > +++ b/drivers/mmc/core/block.c > > @@ -2432,7 +2432,9 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card, > > /* used in ->open, must be set before add_disk: */ > > if (area_type == MMC_BLK_DATA_AREA_MAIN) > > dev_set_drvdata(&card->dev, md); > > - device_add_disk(md->parent, md->disk, mmc_disk_attr_groups); > > + ret = device_add_disk(md->parent, md->disk, mmc_disk_attr_groups); > > + if (ret) > > + goto out; > > This needs to do a blk_cleanup_queue and also te kfree of md. If mmc_blk_alloc_parts() fails mmc_blk_remove_req() is called which does both for us? Luis
On Fri, Aug 27, 2021 at 11:42:36AM -0700, Luis Chamberlain wrote: > > > if (area_type == MMC_BLK_DATA_AREA_MAIN) > > > dev_set_drvdata(&card->dev, md); > > > - device_add_disk(md->parent, md->disk, mmc_disk_attr_groups); > > > + ret = device_add_disk(md->parent, md->disk, mmc_disk_attr_groups); > > > + if (ret) > > > + goto out; > > > > This needs to do a blk_cleanup_queue and also te kfree of md. > > If mmc_blk_alloc_parts() fails mmc_blk_remove_req() is called which > does both for us? Yes, but only for the main gendisk, and those parts already added to the list which happens after device_add_disk succeeded.
On Sat, Aug 28, 2021 at 08:32:11AM +0100, Christoph Hellwig wrote: > On Fri, Aug 27, 2021 at 11:42:36AM -0700, Luis Chamberlain wrote: > > > > if (area_type == MMC_BLK_DATA_AREA_MAIN) > > > > dev_set_drvdata(&card->dev, md); > > > > - device_add_disk(md->parent, md->disk, mmc_disk_attr_groups); > > > > + ret = device_add_disk(md->parent, md->disk, mmc_disk_attr_groups); > > > > + if (ret) > > > > + goto out; > > > > > > This needs to do a blk_cleanup_queue and also te kfree of md. > > > > If mmc_blk_alloc_parts() fails mmc_blk_remove_req() is called which > > does both for us? > > Yes, but only for the main gendisk, and those parts already added to > the list which happens after device_add_disk succeeded. Ah yes I see that now. Will fix up. The tag also needs to be cleaned up. Luis
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index 4c11f171e56d..4f12c6d1e1b5 100644 --- a/drivers/mmc/core/block.c +++ b/drivers/mmc/core/block.c @@ -2432,7 +2432,9 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card, /* used in ->open, must be set before add_disk: */ if (area_type == MMC_BLK_DATA_AREA_MAIN) dev_set_drvdata(&card->dev, md); - device_add_disk(md->parent, md->disk, mmc_disk_attr_groups); + ret = device_add_disk(md->parent, md->disk, mmc_disk_attr_groups); + if (ret) + goto out; return md; err_kfree:
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 cleanups the disk already so all we need to do is just pass along the return value. Signed-off-by: Luis Chamberlain <mcgrof@kernel.org> --- drivers/mmc/core/block.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)