Re: sysfs group not found for kobject on mvsas drive removal

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

 



On Thu, May 7, 2015 at 11:25 AM, Dan Williams <dan.j.williams@xxxxxxxxx> wrote:
> On Thu, May 7, 2015 at 11:08 AM, Praveen Murali <pmurali@xxxxxxxxxxxx> wrote:
>> Hey Guys,
>>   Am I on the right track? Or am I missing something?
>
> I'm still paging in my libsas knowledge from slow backing media :).
>
> I wonder if the Intel-isci driver triggers a different ordering on
> remove that avoids this...  let me take a look.

So I wonder if this is a new warning, because as far as I can tell
we've always been double deleting the devices below sas_port.  It
seems we should delete all the devices from rphy down before deleting
the parent port.  Something like this (excuse the whitespace
mangling).  Only compile tested as I don't have a SAS setup handy.

diff --git a/drivers/scsi/libsas/sas_discover.c
b/drivers/scsi/libsas/sas_discover.c
index 60de66252fa2..a4db770fe8b0 100644
--- a/drivers/scsi/libsas/sas_discover.c
+++ b/drivers/scsi/libsas/sas_discover.c
@@ -362,11 +362,14 @@ static void sas_destruct_devices(struct work_struct *work)
        clear_bit(DISCE_DESTRUCT, &port->disc.pending);

        list_for_each_entry_safe(dev, n, &port->destroy_list, disco_list_node) {
+               struct sas_port *sas_port =
dev_to_sas_port(dev->rphy->dev.parent);
+
                list_del_init(&dev->disco_list_node);

                sas_remove_children(&dev->rphy->dev);
                sas_rphy_delete(dev->rphy);
                sas_unregister_common_dev(port, dev);
+               sas_port_delete(sas_port);
        }
 }

@@ -400,9 +403,6 @@ void sas_unregister_domain_devices(struct
asd_sas_port *port, int gone)

        list_for_each_entry_safe(dev, n, &port->disco_list, disco_list_node)
                sas_unregister_dev(port, dev);
-
-       port->port->rphy = NULL;
-
 }

 void sas_device_set_phy(struct domain_device *dev, struct sas_port *port)
diff --git a/drivers/scsi/libsas/sas_port.c b/drivers/scsi/libsas/sas_port.c
index d3c5297c6c89..9a25ae3a52a4 100644
--- a/drivers/scsi/libsas/sas_port.c
+++ b/drivers/scsi/libsas/sas_port.c
@@ -219,7 +219,6 @@ void sas_deform_port(struct asd_sas_phy *phy, int gone)

        if (port->num_phys == 1) {
                sas_unregister_domain_devices(port, gone);
-               sas_port_delete(port->port);
                port->port = NULL;
        } else {
                sas_port_delete_phy(port->port, phy->phy);
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[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