diff options
author | James Bottomley <James.Bottomley@steeleye.com> | 2005-10-02 16:22:35 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.(none)> | 2005-10-02 16:32:25 -0400 |
commit | 97af50f60ff1202b0dd9ce481d4cf98c6a578bec (patch) | |
tree | 5637b5d7d505869ee5aace5ad6ed33085fc78697 /drivers/scsi/aic7xxx/aic7770_osm.c | |
parent | 9e70592fcd87c90e9e98090d66cb79f39d740d4a (diff) |
[SCSI] aic7xxx/aic79xx: fix module removal path not to panic
In these drivers, scsi_remove_host() is called too late, at the point
it is called, the driver has already shut down too far to accept any
I/O that the shutdown might generate. Any generated I/O actually
triggers a panic.
Fix this by calling scsi_remove_host() as early as possible and not
calling scsi_host_put() until just before we kfree the ahc_softc.
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/aic7xxx/aic7770_osm.c')
-rw-r--r-- | drivers/scsi/aic7xxx/aic7770_osm.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/scsi/aic7xxx/aic7770_osm.c b/drivers/scsi/aic7xxx/aic7770_osm.c index 70c5fb59c9e..d754b326786 100644 --- a/drivers/scsi/aic7xxx/aic7770_osm.c +++ b/drivers/scsi/aic7xxx/aic7770_osm.c | |||
@@ -112,6 +112,9 @@ aic7770_remove(struct device *dev) | |||
112 | struct ahc_softc *ahc = dev_get_drvdata(dev); | 112 | struct ahc_softc *ahc = dev_get_drvdata(dev); |
113 | u_long s; | 113 | u_long s; |
114 | 114 | ||
115 | if (ahc->platform_data && ahc->platform_data->host) | ||
116 | scsi_remove_host(ahc->platform_data->host); | ||
117 | |||
115 | ahc_lock(ahc, &s); | 118 | ahc_lock(ahc, &s); |
116 | ahc_intr_enable(ahc, FALSE); | 119 | ahc_intr_enable(ahc, FALSE); |
117 | ahc_unlock(ahc, &s); | 120 | ahc_unlock(ahc, &s); |