diff options
author | Hannes Reinecke <hare@suse.de> | 2006-06-22 05:45:00 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-06-26 10:59:18 -0400 |
commit | f89d0a4e1d01168f20f9e8273de7dfc094b2a430 (patch) | |
tree | 192535b673233f57fa7617b99ce593892957cb2f /drivers/scsi/aic7xxx/aic79xx_osm.h | |
parent | 9ba0883cfc5ab69820c05f1bf2b7711bb0a0103c (diff) |
[SCSI] aic79xx: remove slave_destroy
Even with the latest fixes aic79xx still occasionally triggers the
BUG_ON in slave_destroy. Rather than trying to figure out the various
levels of interaction here I've decided to remove the callback altogether.
The primary reason for the slave_alloc / slave_destroy is to keep an
index of pointers to the sdevs associated with a given target.
However, by changing the arguments to the affected functions slightly
it's possible to avoid the use of that index entirely.
The only performance penalty we'll incur is in writing the
information for /proc/scsi/XXX, as we'll have to recurse over all
available sdevs to find the correct ones. But I doubt that reading
from /proc is in any way time-critical.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/aic7xxx/aic79xx_osm.h')
-rw-r--r-- | drivers/scsi/aic7xxx/aic79xx_osm.h | 11 |
1 files changed, 2 insertions, 9 deletions
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.h b/drivers/scsi/aic7xxx/aic79xx_osm.h index 2b8331649eeb..b2e65e10ad2b 100644 --- a/drivers/scsi/aic7xxx/aic79xx_osm.h +++ b/drivers/scsi/aic7xxx/aic79xx_osm.h | |||
@@ -263,7 +263,6 @@ typedef enum { | |||
263 | AHD_DEV_PERIODIC_OTAG = 0x40, /* Send OTAG to prevent starvation */ | 263 | AHD_DEV_PERIODIC_OTAG = 0x40, /* Send OTAG to prevent starvation */ |
264 | } ahd_linux_dev_flags; | 264 | } ahd_linux_dev_flags; |
265 | 265 | ||
266 | struct ahd_linux_target; | ||
267 | struct ahd_linux_device { | 266 | struct ahd_linux_device { |
268 | TAILQ_ENTRY(ahd_linux_device) links; | 267 | TAILQ_ENTRY(ahd_linux_device) links; |
269 | 268 | ||
@@ -343,12 +342,6 @@ struct ahd_linux_device { | |||
343 | #define AHD_OTAG_THRESH 500 | 342 | #define AHD_OTAG_THRESH 500 |
344 | }; | 343 | }; |
345 | 344 | ||
346 | struct ahd_linux_target { | ||
347 | struct scsi_device *sdev[AHD_NUM_LUNS]; | ||
348 | struct ahd_transinfo last_tinfo; | ||
349 | struct ahd_softc *ahd; | ||
350 | }; | ||
351 | |||
352 | /********************* Definitions Required by the Core ***********************/ | 345 | /********************* Definitions Required by the Core ***********************/ |
353 | /* | 346 | /* |
354 | * Number of SG segments we require. So long as the S/G segments for | 347 | * Number of SG segments we require. So long as the S/G segments for |
@@ -865,7 +858,7 @@ ahd_freeze_scb(struct scb *scb) | |||
865 | } | 858 | } |
866 | } | 859 | } |
867 | 860 | ||
868 | void ahd_platform_set_tags(struct ahd_softc *ahd, | 861 | void ahd_platform_set_tags(struct ahd_softc *ahd, struct scsi_device *sdev, |
869 | struct ahd_devinfo *devinfo, ahd_queue_alg); | 862 | struct ahd_devinfo *devinfo, ahd_queue_alg); |
870 | int ahd_platform_abort_scbs(struct ahd_softc *ahd, int target, | 863 | int ahd_platform_abort_scbs(struct ahd_softc *ahd, int target, |
871 | char channel, int lun, u_int tag, | 864 | char channel, int lun, u_int tag, |
@@ -874,7 +867,7 @@ irqreturn_t | |||
874 | ahd_linux_isr(int irq, void *dev_id, struct pt_regs * regs); | 867 | ahd_linux_isr(int irq, void *dev_id, struct pt_regs * regs); |
875 | void ahd_done(struct ahd_softc*, struct scb*); | 868 | void ahd_done(struct ahd_softc*, struct scb*); |
876 | void ahd_send_async(struct ahd_softc *, char channel, | 869 | void ahd_send_async(struct ahd_softc *, char channel, |
877 | u_int target, u_int lun, ac_code, void *); | 870 | u_int target, u_int lun, ac_code); |
878 | void ahd_print_path(struct ahd_softc *, struct scb *); | 871 | void ahd_print_path(struct ahd_softc *, struct scb *); |
879 | 872 | ||
880 | #ifdef CONFIG_PCI | 873 | #ifdef CONFIG_PCI |