]> Pileus Git - ~andy/linux/blobdiff - drivers/ata/libata-core.c
devres: release resources on device_del()
[~andy/linux] / drivers / ata / libata-core.c
index f6408ca82062f9375228158be9e9b23aa9cd0846..3c1f8830ac8bf7dedef3d44b049beefcf695e811 100644 (file)
@@ -5685,18 +5685,22 @@ static void ata_host_release(struct device *gendev, void *res)
        for (i = 0; i < host->n_ports; i++) {
                struct ata_port *ap = host->ports[i];
 
-               if (!ap)
-                       continue;
-
-               if (ap->ops->port_stop)
+               if (ap && ap->ops->port_stop)
                        ap->ops->port_stop(ap);
-
-               scsi_host_put(ap->scsi_host);
        }
 
        if (host->ops->host_stop)
                host->ops->host_stop(host);
 
+       for (i = 0; i < host->n_ports; i++) {
+               struct ata_port *ap = host->ports[i];
+
+               if (ap)
+                       scsi_host_put(ap->scsi_host);
+
+               host->ports[i] = NULL;
+       }
+
        dev_set_drvdata(gendev, NULL);
 }