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

Attachment: pgp00000.pgp
Description: PGP signature

Reply via email to