File: //usr/share/doc/scsitools/kernel-source-2.2.14.espfix
diff -ur kernel-source-2.2.14.orig/drivers/scsi/esp.c kernel-source-2.2.14/drivers/scsi/esp.c
--- kernel-source-2.2.14.orig/drivers/scsi/esp.c Tue Jan 4 19:12:20 2000
+++ kernel-source-2.2.14/drivers/scsi/esp.c Sat Mar 25 13:46:04 2000
@@ -4313,3 +4313,11 @@
spin_unlock_irqrestore(&io_request_lock, flags);
}
#endif
+
+int esp_revoke(Scsi_Device* SDptr)
+{
+ struct Sparc_ESP *esp = (struct Sparc_ESP *) SDptr->host->hostdata;
+ esp->targets_present &= ~(1 << SDptr->id);
+ return 0;
+}
+
diff -ur kernel-source-2.2.14.orig/drivers/scsi/esp.h kernel-source-2.2.14/drivers/scsi/esp.h
--- kernel-source-2.2.14.orig/drivers/scsi/esp.h Sun Mar 28 20:04:13 1999
+++ kernel-source-2.2.14/drivers/scsi/esp.h Sat Mar 25 01:27:17 2000
@@ -413,6 +413,7 @@
extern int esp_reset(Scsi_Cmnd *, unsigned int);
extern int esp_proc_info(char *buffer, char **start, off_t offset, int length,
int hostno, int inout);
+extern int esp_revoke(Scsi_Device* SDptr);
extern struct proc_dir_entry proc_scsi_esp;
@@ -421,6 +422,7 @@
proc_info: &esp_proc_info, \
name: "Sun ESP 100/100a/200", \
detect: esp_detect, \
+ revoke: esp_revoke, \
info: esp_info, \
command: esp_command, \
queuecommand: esp_queue, \
diff -ur kernel-source-2.2.14.orig/drivers/scsi/hosts.h kernel-source-2.2.14/drivers/scsi/hosts.h
--- kernel-source-2.2.14.orig/drivers/scsi/hosts.h Sun Mar 28 20:04:03 1999
+++ kernel-source-2.2.14/drivers/scsi/hosts.h Sat Mar 25 01:32:37 2000
@@ -95,6 +95,7 @@
* especially that scsi_malloc/scsi_free must not be called.
*/
int (* detect)(struct SHT *);
+ int (*revoke)(Scsi_Device *);
/* Used with loadable modules to unload the host structures. Note:
* there is a default action built into the modules code which may
diff -ur kernel-source-2.2.14.orig/drivers/scsi/scsi.c kernel-source-2.2.14/drivers/scsi/scsi.c
--- kernel-source-2.2.14.orig/drivers/scsi/scsi.c Tue Jan 4 19:12:21 2000
+++ kernel-source-2.2.14/drivers/scsi/scsi.c Sat Mar 25 01:25:47 2000
@@ -2492,6 +2492,8 @@
* Nobody is using this device any more.
* Free all of the command structures.
*/
+ if (HBA_ptr->hostt->revoke)
+ HBA_ptr->hostt->revoke(scd);
for(SCpnt=scd->device_queue; SCpnt; SCpnt = scd->device_queue)
{
scd->device_queue = SCpnt->next;