Re: Are these comments in scsi_host.h still true?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 03/05/2012 05:18 PM, scameron@xxxxxxxxxxxxxxxxxx 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.
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux