Re: [PATCH 3/3] tcmu: remove cmd timeout code

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

 



On Thu, 2017-03-09 at 02:53 -0600, Mike Christie wrote:
> On 03/08/2017 10:22 PM, Nicholas A. Bellinger wrote:
> > On Wed, 2017-03-08 at 20:16 -0800, Nicholas A. Bellinger wrote:
> >> On Wed, 2017-03-08 at 12:02 -0600, Mike Christie wrote:
> > 
> > <SNIP>
> > 
> >>>
> >>> My tcmu-runner plan was:
> >>>
> >>> 1. For hung commands, we are going to add callouts to the backend module
> >>> for TMFs. target_core_tmr.c would call them during TMFs like ABORT_TASK
> >>> to have the backend perform the TMF. target_core_user would then call
> >>> into tcmu-runner and that would call into the userspace handler.
> >>>
> >>
> >> Mmmm.  This would mean TMRs would function very different between TCMU
> >> and non TCMU backends..
> 
> Do we ever want support for that? I actually started implementing
> support so lio backends like iblock could call into the initiator
> driver's error handlers:
> 
> http://www.spinics.net/lists/linux-scsi/msg97064.html
> 

Propagating target LUN_RESETs into LLD driver code, specifically in
cases where the LLD has a higher host reset timeout would certainly be
useful to reduce the overall end-to-end host-reset recovery time.

That said, I don't think the various pros/cons of this approach have
ever been verbalized on the list, so I'd like to give it some more
thought to understand what the downsides (if any) are.

> For tcmu, your idea below works nicely. I will work on it. Thanks.
> 

Ok, I'll post an updated patch to make target_complete_cmd() handle
SAM_STAT_BUSY + SAM_STAT_QUEUE_FULL as a v4.12 item.

> >>
> >> We've always had the assumption that once a TMR is processed, code
> >> blocks until the backend completes outstanding se_cmd(s) in question
> >> without an explicit cancellation trigger.
> >>
> >> One approach I've taken for a out-of-tree make_request_fn() based bio
> >> driver is return bios with -EAGAIN if a bio takes more than say 3
> >> seconds to complete, in order to signal to IBLOCK to propagate up a
> >> SAM_STAT_BUSY or SAM_STAT_QUEUE_FULL.  This ends up working quite well
> >> to keep initiators happy, and virtually eliminates spurious TMRs in host
> >> environments (like ESX for example) with a very low SCSI timeout. 
> >>
> >> Of course, this pushes alot of smarts into the driver below the backend,
> >> but in a distributed scale out backend where I/Os delays, et al. are a
> >> fact of life this is difficult to avoid.
> >>
> >> So that said, I'd prefer to have TCMU's user-space code return back I/Os
> >> that are expected to take a long time with SAM_STAT_BUSY or
> >> SAM_STAT_QUEUE_FULL (to reduce host queue_depth), instead of adding a
> >> explicit se_cmd cancellation mechanism in target-core into backend
> >> driver code.
> >>
> >> I'd be happy to post the target-core changes needed to do this, which
> >> where posted at one point but ended up not getting merged. 
> > 
> > Btw, here is the patch in question:
> > 
> > http://www.spinics.net/lists/target-devel/msg11835.html
> >
> --
> To unsubscribe from this list: send the line "unsubscribe target-devel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux