All of lore.kernel.org
 help / color / mirror / Atom feed
* Are these comments in scsi_host.h still true?
@ 2012-03-05 23:18 scameron
  2012-03-06 23:07 ` Mike Christie
  0 siblings, 1 reply; 2+ messages in thread
From: scameron @ 2012-03-05 23:18 UTC (permalink / raw)
  To: linux-scsi


Is this comment from include/scsi/scsi_host.h still true?

        /*
         * This is an error handling strategy routine.  You don't need to
         * define one of these if you don't want to - there is a default
         * routine that is present that should work in most cases.  For those
         * driver authors that have the inclination and ability to write their
         * own strategy routine, this is where it is specified.  Note - the
---->    * strategy routine is *ALWAYS* run in the context of the kernel eh
---->    * thread.  Thus you are guaranteed to *NOT* be in an interrupt
---->    * handler when you execute this, and you are also guaranteed to
---->    * *NOT* have any other commands being queued while you are in the
         * strategy routine. When you return from this function, operations
         * return to normal.
         *
         * See scsi_error.c scsi_unjam_host for additional comments about
         * what this function should and should not be attempting to do.
         *
         * Status: REQUIRED     (at least one of them)
         */

Also what about this, about scsi_unjam_host() from scsi_error.c?

 * Notes:
 *    When we come in here, we *know* that all commands on the bus have
 *    either completed, failed or timed out.  we also know that no further
 *    commands are being sent to the host, so things are relatively quiet
 *    and we have freedom to fiddle with things as we wish.

I'm not seeing what code makes sure those are true.

Thanks,

-- steve


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Are these comments in scsi_host.h still true?
  2012-03-05 23:18 Are these comments in scsi_host.h still true? scameron
@ 2012-03-06 23:07 ` Mike Christie
  0 siblings, 0 replies; 2+ messages in thread
From: Mike Christie @ 2012-03-06 23:07 UTC (permalink / raw)
  To: scameron; +Cc: linux-scsi

On 03/05/2012 05:18 PM, scameron@beardog.cce.hp.com wrote:
> 
> Is this comment from include/scsi/scsi_host.h still true?
> 
>         /*
>          * This is an error handling strategy routine.  You don't need to
>          * define one of these if you don't want to - there is a default
>          * routine that is present that should work in most cases.  For those
>          * driver authors that have the inclination and ability to write their
>          * own strategy routine, this is where it is specified.  Note - the
> ---->    * strategy routine is *ALWAYS* run in the context of the kernel eh
> ---->    * thread.  Thus you are guaranteed to *NOT* be in an interrupt
> ---->    * handler when you execute this, and you are also guaranteed to
> ---->    * *NOT* have any other commands being queued while you are in the
>          * strategy routine. When you return from this function, operations
>          * return to normal.
>          *
>          * See scsi_error.c scsi_unjam_host for additional comments about
>          * what this function should and should not be attempting to do.
>          *
>          * Status: REQUIRED     (at least one of them)
>          */
> 
> Also what about this, about scsi_unjam_host() from scsi_error.c?
> 
>  * Notes:
>  *    When we come in here, we *know* that all commands on the bus have
>  *    either completed, failed or timed out.  we also know that no further
>  *    commands are being sent to the host, so things are relatively quiet
>  *    and we have freedom to fiddle with things as we wish.
> 
> I'm not seeing what code makes sure those are true.
> 

For the strategy handler/unjam case this is true. See scsi_times_out ->
scsi_eh_scmd_add. That will set the host state so not new commands are
stated and will begin the process of making sure that commands are
either timedout or completed. See the host_busy and host_failed checks
in scsi_error.c. Those will prevent the scsi eh unjam stuff from
starting when commands not completed or timedout (host_busy is
incremented in scsi_request_fn when commands are queued).

However, some of your eh callbacks can be called while IO is still
running. If you did sg_reset /dev/sda for example, that calls
scsi_nonblockable_ioctl and that prevents new IOs from coming in
(scsi_reset_provider sets the tmf_in_progress flag which is checked in
scsi_host_queue_ready's scsi_host_in_recovery call). But in this path we
do not wait for all IO to timeout or complete like we do in the
unjam/strategy handler cases.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-03-06 23:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-05 23:18 Are these comments in scsi_host.h still true? scameron
2012-03-06 23:07 ` Mike Christie

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.