summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/zorro7xx.c
diff options
context:
space:
mode:
authorMatthew Wilcox <matthew@wil.cx>2007-07-17 13:38:03 -0600
committerJames Bottomley <jejb@mulgrave.localdomain>2007-07-18 11:17:57 -0500
commit3ac709c113daa19e375e8b0fef318fab1713f687 (patch)
tree210b4b746f02197ac8c48dbcd424cbc716a7ae22 /drivers/scsi/zorro7xx.c
parent88e2f98e1b3eb27ae708daa3b37dd50f3f06c952 (diff)
downloadlinux-3ac709c113daa19e375e8b0fef318fab1713f687.tar.gz
linux-3ac709c113daa19e375e8b0fef318fab1713f687.tar.bz2
linux-3ac709c113daa19e375e8b0fef318fab1713f687.zip
[SCSI] a4000t, zorro7xx, mvme16x, bvme6000,sim710: xxx_device_remove seems buggy
Fix drivers misusing dev_to_shost Some drivers were using dev_to_shost to go from a struct device to the corresponding shost. Unfortunately, dev_to_shost only looks up the tree to find an shost (it's designed to go from a scsi_device or a scsi_target to the parent scsi_host), and these drivers were calling it with the parent of the scsi_host. I've fixed this by saving a pointer to the Scsi_Host in the drvdata, which matches what most scsi drivers do. Signed-off-by: Matthew Wilcox <matthew@wil.cx> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/zorro7xx.c')
-rw-r--r--drivers/scsi/zorro7xx.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/scsi/zorro7xx.c b/drivers/scsi/zorro7xx.c
index 50703877a585..c822debc2668 100644
--- a/drivers/scsi/zorro7xx.c
+++ b/drivers/scsi/zorro7xx.c
@@ -130,6 +130,7 @@ static int __devinit zorro7xx_init_one(struct zorro_dev *z,
goto out_put_host;
}
+ zorro_set_drvdata(z, host);
scsi_scan_host(host);
return 0;
@@ -148,7 +149,7 @@ static int __devinit zorro7xx_init_one(struct zorro_dev *z,
static __devexit void zorro7xx_remove_one(struct zorro_dev *z)
{
- struct Scsi_Host *host = dev_to_shost(&z->dev);
+ struct Scsi_Host *host = zorro_get_drvdata(z);
struct NCR_700_Host_Parameters *hostdata = shost_priv(host);
scsi_remove_host(host);