mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
mmc: block: fix RPMB device unregister ordering
Since commit7852028a35("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 {. Fixes:7852028a35("mmc: block: register RPMB partition with the RPMB subsystem") Cc: stable@vger.kernel.org Signed-off-by: Jiazi Li <jiazi.li@transsion.com> Signed-off-by: Ao Sun <ao.sun@transsion.com> Reviewed-by: Avri Altman <avri.altman@sandisk.com> Signed-off-by: Ulf Hansson <ulfh@kernel.org>
This commit is contained in:
@@ -2715,7 +2715,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);
|
||||
@@ -2930,8 +2929,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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user