mbox series

[RFC,0/2] driver core: Add ability to delete device links of unregistered devices

Message ID 20210707172948.1025-1-adrian.hunter@intel.com
Headers show
Series driver core: Add ability to delete device links of unregistered devices | expand

Message

Adrian Hunter July 7, 2021, 5:29 p.m. UTC
Hi

There is an issue with the SCSI UFS driver when the optional
BOOT well-known LUN fails to probe, which is not a fatal error.
The issue is that the device and its "managed" device link do not
then get deleted.  The device because the device link has a
reference to it.  The device link because it can only be deleted
by device_del(), but device_add() was never called, so device_del()
never will be either.

It is not clear if there is a way to get rid of the device link in
this case, so here is a patch to add a function that does just that.

There is also a patch to use the new function to fix the issue with
the SCSI UFS driver.


Adrian Hunter (2):
      driver core: Add ability to delete device links of unregistered devices
      scsi: ufshcd: Fix device links when BOOT WLUN fails to probe

 Documentation/driver-api/device_link.rst |  7 +++++--
 drivers/base/core.c                      | 22 +++++++++++++++++++---
 drivers/scsi/ufs/ufshcd.c                |  7 +++++++
 include/linux/device.h                   |  1 +
 4 files changed, 32 insertions(+), 5 deletions(-)


Regards
Adrian

Comments

Greg Kroah-Hartman July 7, 2021, 5:38 p.m. UTC | #1
On Wed, Jul 07, 2021 at 08:29:47PM +0300, Adrian Hunter wrote:
> +void device_links_scrap(struct device *dev)
> +{
> +	if (WARN_ON(device_is_registered(dev)))

You just rebooted a box if this was hit, never add new WARN_ON() please.

greg k-h
Greg Kroah-Hartman July 7, 2021, 5:40 p.m. UTC | #2
On Wed, Jul 07, 2021 at 08:29:46PM +0300, Adrian Hunter wrote:
> Hi
> 
> There is an issue with the SCSI UFS driver when the optional
> BOOT well-known LUN fails to probe, which is not a fatal error.
> The issue is that the device and its "managed" device link do not
> then get deleted.  The device because the device link has a
> reference to it.  The device link because it can only be deleted
> by device_del(), but device_add() was never called, so device_del()
> never will be either.

How was a link created for something that never had device_add() called
on it?  Who is doing that?

thanks,

greg k-h