[SCSI] libsas: async ata scanning
[platform/adaptation/renesas_rcar/renesas_kernel.git] / drivers / scsi / libsas / sas_discover.c
index 18fa364..0d58a8b 100644 (file)
@@ -207,22 +207,22 @@ static void sas_probe_devices(struct work_struct *work)
 
        clear_bit(DISCE_PROBE, &port->disc.pending);
 
-       list_for_each_entry_safe(dev, n, &port->disco_list, disco_list_node) {
-               int err;
-
+       /* devices must be domain members before link recovery and probe */
+       list_for_each_entry(dev, &port->disco_list, disco_list_node) {
                spin_lock_irq(&port->dev_list_lock);
                list_add_tail(&dev->dev_list_node, &port->dev_list);
                spin_unlock_irq(&port->dev_list_lock);
+       }
 
-               err = sas_rphy_add(dev->rphy);
+       sas_probe_sata(port);
 
-               if (err) {
-                       SAS_DPRINTK("%s: for %s device %16llx returned %d\n",
-                                   __func__, dev->parent ? "exp-attached" :
-                                                           "direct-attached",
-                                   SAS_ADDR(dev->sas_addr), err);
-                       sas_unregister_dev(port, dev);
-               else
+       list_for_each_entry_safe(dev, n, &port->disco_list, disco_list_node) {
+               int err;
+
+               err = sas_rphy_add(dev->rphy);
+               if (err)
+                       sas_fail_probe(dev, __func__, err);
+               else
                        list_del_init(&dev->disco_list_node);
        }
 }