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;