Mike -- As far as I can tell, this patch was never accepted. Any idea when this will be resolved?
usb-storage is still waiting to implement proper device unplug... Matt On Mon, Mar 03, 2003 at 02:15:32PM -0800, Mike Anderson wrote: > I have added a scsi_set_host_offline which supplements > scsi_set_device_offline. host_lock should not be held on call of either > one of these functions. > > Currently scsi_set_host_offline is just setting > each sdev in my_devices offline, but could be expanded without changing > the api to the LLDD. > > I also added a for_each function. Currently scsi_set_host_offline is the > only user and could have included the functionality, but I thought there > may be possible re-use in the ~50 references to my_devices. The for_each > function also calls scsi_device_[get/put] which are not complete yet, > and would need to handle the selected policy of when a list entry is > removed from the list. > > I have only tested the interface using scsi_debug. > > -andmike > -- > Michael Anderson > [EMAIL PROTECTED] > > ===== > name: 00_scsi_set_host_offline-1.diff > version: 2003-03-03.12:59:06-0800 > against: scsi-misc-2.5 > > scsi.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ > scsi.h | 1 + > scsi_syms.c | 1 + > 3 files changed, 53 insertions(+) > > ===== > ===== drivers/scsi/scsi.c 1.97 vs edited ===== > --- 1.97/drivers/scsi/scsi.c Wed Feb 26 00:00:06 2003 > +++ edited/drivers/scsi/scsi.c Mon Mar 3 12:31:03 2003 > @@ -1300,6 +1300,38 @@ > } > > /** > + * scsi_host_for_each_device - call function for each host child device > + * @shost: struct Scsi_Host to interate over. > + * @data: void pointer argumnet passed to called function. > + * @fn: function to call for each device. > + * > + **/ > +static int scsi_host_for_each_device(struct Scsi_Host *shost, > + void * data, int (*fn)(struct scsi_device *, void *)) > +{ > + struct list_head *lh; > + struct scsi_device *sdev; > + unsigned long flags; > + int error = 0; > + > + spin_lock_irqsave(shost->host_lock, flags); > + for (lh = shost->my_devices.next; lh != &shost->my_devices;){ > + sdev = list_entry(lh, struct scsi_device, siblings); > + scsi_device_get(sdev); > + spin_unlock_irqrestore(shost->host_lock, flags); > + error = fn(sdev, data); > + spin_lock_irqsave(shost->host_lock, flags); > + lh = lh->next; > + scsi_device_put(sdev); > + if (error) > + break; > + } > + spin_unlock_irqrestore(shost->host_lock, flags); > + > + return error; > +} > + > +/** > * scsi_set_device_offline - set scsi_device offline > * @sdev: pointer to struct scsi_device to offline. > * > @@ -1338,6 +1370,25 @@ > } else { > /* FIXME: Send online state change hotplug event */ > } > +} > + > +/** > + * scsi_set_device_offline - wrapper. > + **/ > +static int __scsi_set_device_offline(struct scsi_device *sdev, void *data) > +{ > + scsi_set_device_offline(sdev); > + return 0; > +} > + > +/** > + * scsi_set_host_offline - set all scsi_devices on a host offline > + * @shost: pointer to struct Scsi_Host. > + * > + **/ > +void scsi_set_host_offline(struct Scsi_Host *shost) > +{ > + scsi_host_for_each_device(shost, NULL, __scsi_set_device_offline); > } > > /* > ===== drivers/scsi/scsi.h 1.65 vs edited ===== > --- 1.65/drivers/scsi/scsi.h Sun Feb 23 10:34:55 2003 > +++ edited/drivers/scsi/scsi.h Mon Mar 3 12:34:21 2003 > @@ -455,6 +455,7 @@ > extern void scsi_slave_detach(struct scsi_device *); > extern int scsi_device_get(struct scsi_device *); > extern void scsi_device_put(struct scsi_device *); > +extern void scsi_set_host_offline(struct Scsi_Host *); > extern void scsi_set_device_offline(struct scsi_device *); > extern void scsi_done(Scsi_Cmnd * SCpnt); > extern void scsi_finish_command(Scsi_Cmnd *); > ===== drivers/scsi/scsi_syms.c 1.29 vs edited ===== > --- 1.29/drivers/scsi/scsi_syms.c Sun Feb 23 10:36:05 2003 > +++ edited/drivers/scsi/scsi_syms.c Mon Mar 3 12:33:01 2003 > @@ -80,6 +80,7 @@ > EXPORT_SYMBOL(scsi_device_put); > EXPORT_SYMBOL(scsi_add_device); > EXPORT_SYMBOL(scsi_remove_device); > +EXPORT_SYMBOL(scsi_set_host_offline); > EXPORT_SYMBOL(scsi_set_device_offline); > > /* -- Matthew Dharm Home: [EMAIL PROTECTED] Maintainer, Linux USB Mass Storage Driver You are needink to look more evil. You likink very strong coffee? -- Pitr to Dust Puppy User Friendly, 10/16/1998
pgp00000.pgp
Description: PGP signature