libata: clear drvdata in ata_host_release(), take#2

Clearing drvdata in ->remove_one causes NULL pointer deference. Clear
drvdata only in ata_host_release() after all resources are freed.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by Tejun Heo and committed by Jeff Garzik 1aa56cca 7b965e08

+2 -4
+2 -1
drivers/ata/libata-core.c
··· 5680 5680 5681 5681 if (host->ops->host_stop) 5682 5682 host->ops->host_stop(host); 5683 + 5684 + dev_set_drvdata(gendev, NULL); 5683 5685 } 5684 5686 5685 5687 /** ··· 5904 5902 5905 5903 err_out: 5906 5904 devres_release_group(dev, ata_device_add); 5907 - dev_set_drvdata(dev, NULL); 5908 5905 VPRINTK("EXIT, returning %d\n", rc); 5909 5906 return 0; 5910 5907 }
-1
drivers/ata/pata_cs5520.c
··· 306 306 struct ata_host *host = dev_get_drvdata(dev); 307 307 308 308 ata_host_detach(host); 309 - dev_set_drvdata(dev, NULL); 310 309 } 311 310 312 311 /**
-1
drivers/ata/pata_isapnp.c
··· 128 128 struct ata_host *host = dev_get_drvdata(dev); 129 129 130 130 ata_host_detach(host); 131 - dev_set_drvdata(dev, NULL); 132 131 } 133 132 134 133 static struct pnp_device_id isapnp_devices[] = {
-1
drivers/ata/pata_platform.c
··· 228 228 struct ata_host *host = dev_get_drvdata(dev); 229 229 230 230 ata_host_detach(host); 231 - dev_set_drvdata(dev, NULL); 232 231 233 232 return 0; 234 233 }