RE: [PATCH] mmc: block: fix RPMB device unregister ordering

Avri Altman <[email protected]>
Newsgroups org.kernel.vger.linux-mmc
Message-ID <DS1PR16MB6753A02E9B66E4310CF8980FE5F12@DS1PR16MB6753.namprd16.prod.outlook.com>
> From: Ao Sun <[email protected]>
> 
Maybe one more preliminary sentence giving some background:
Since commit 7852028a35f0 ("mmc: block: register RPMB partition with the RPMB subsystem"), each mmc RPMB partition is represented by two device objects:
 - the mmc-owned device (`rpmb->dev`, backing the legacy /dev/mmcblkXrpmb char device) and
 - the rpmb-core device (`rdev`, backing /dev/rpmbN).

> The child RPMB device holds a reference to its parent, so the parent's release
> callback cannot be invoked if the child device is still registered.
> 
> Remove rpmb_dev_unregister() from the parent release handler and
> unregister the child RPMB device in the remove path before tearing down the
> parent device.
> 
> Also delete the extra blank line between mmc_blk_remove_rpmb_part() and {.
> 

Maybe add:
Fixes: 7852028a35f0 ("mmc: block: register RPMB partition with the RPMB subsystem")
and also
Cc: [email protected]

> Signed-off-by: Jiazi Li <[email protected]>
> Signed-off-by: Ao Sun <[email protected]>
Reviewed-by: Avri Altman <[email protected]>

> ---
>  drivers/mmc/core/block.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index
> c0ffe0817fd4..abd5ae4ef2ba 100644
> --- a/drivers/mmc/core/block.c
> +++ b/drivers/mmc/core/block.c
> @@ -2776,7 +2776,6 @@ static void mmc_blk_rpmb_device_release(struct
> device *dev)  {
>         struct mmc_rpmb_data *rpmb = dev_get_drvdata(dev);
> 
> -       rpmb_dev_unregister(rpmb->rdev);
>         mmc_blk_put(rpmb->md);
>         ida_free(&mmc_rpmb_ida, rpmb->id);
>         kfree(rpmb);
> @@ -2991,8 +2990,8 @@ static int mmc_blk_alloc_rpmb_part(struct
> mmc_card *card,  }
> 
>  static void mmc_blk_remove_rpmb_part(struct mmc_rpmb_data *rpmb)
> -
>  {
> +       rpmb_dev_unregister(rpmb->rdev);
>         cdev_device_del(&rpmb->chrdev, &rpmb->dev);
>         put_device(&rpmb->dev);
>  }
> --
> 2.34.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.