diff mbox series

[06/10] mmc/core/block: add error handling support for add_disk()

Message ID 20210823202930.137278-7-mcgrof@kernel.org
State New
Headers show
Series [01/10] scsi/sd: use blk_cleanup_queue() insted of put_disk() | expand

Commit Message

Luis Chamberlain Aug. 23, 2021, 8:29 p.m. UTC
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(-)

Comments

Christoph Hellwig Aug. 24, 2021, 6:13 a.m. UTC | #1
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.
Luis Chamberlain Aug. 27, 2021, 6:42 p.m. UTC | #2
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
Christoph Hellwig Aug. 28, 2021, 7:32 a.m. UTC | #3
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.
Luis Chamberlain Aug. 30, 2021, 8:42 p.m. UTC | #4
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 mbox series

Patch

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: