Re: [PATCH] ses: do not add a device to an enclosure if enclosure_add_links() fails.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/27/2017 04:53 AM, Maurizio Lombardi wrote:
The enclosure_add_device() function should fail if it can't
create the relevant sysfs links.

Signed-off-by: Maurizio Lombardi <mlombard@xxxxxxxxxx>
---
  drivers/misc/enclosure.c | 14 ++++++++++----
  1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/misc/enclosure.c b/drivers/misc/enclosure.c
index d3fe3ea..eb29113 100644
--- a/drivers/misc/enclosure.c
+++ b/drivers/misc/enclosure.c
@@ -375,6 +375,7 @@ int enclosure_add_device(struct enclosure_device *edev, int component,
  			 struct device *dev)
  {
  	struct enclosure_component *cdev;
+	int err;

  	if (!edev || component >= edev->components)
  		return -EINVAL;
@@ -384,12 +385,17 @@ int enclosure_add_device(struct enclosure_device *edev, int component,
  	if (cdev->dev == dev)
  		return -EEXIST;

-	if (cdev->dev)
+	if (cdev->dev) {
  		enclosure_remove_links(cdev);
-
-	put_device(cdev->dev);
+		put_device(cdev->dev);
+	}
  	cdev->dev = get_device(dev);
-	return enclosure_add_links(cdev);
+	err = enclosure_add_links(cdev);
+	if (err) {
+		put_device(cdev->dev);
+		cdev->dev = NULL;
+	}
+	return err;
  }
  EXPORT_SYMBOL_GPL(enclosure_add_device);

Tested-by: Douglas Miller <dougmill@xxxxxxxxxxxxxxxxxx>

This fixes a problem where udevd (insmod ses) races with/overtakes do_scan_async(), which creates the directory target of the symlink, resulting in missing enclosure symlinks. This patch relaxes the symlink creation allowing for delayed addition to enclosure and creation of symlinks after do_scan_async() has created the target directory.




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux