ACK: [PATCH 1/1] UBUNTU: SAUCE: hv_storvsc: Account for in-transit packets in the RESET path
apw at canonical.com
Wed Apr 11 15:48:12 UTC 2012
On Wed, Apr 11, 2012 at 09:31:16AM -0600, Tim Gardner wrote:
> On 04/11/2012 08:56 AM, Andy Whitcroft wrote:
> > From: "K. Y. Srinivasan" <kys at microsoft.com>
> > Properly account for I/O in transit before returning from the RESET call.
> > In the absense of this patch we could have a situation where the host may
> > respond to a command that was issued prior to the issuance of the RESET
> > command at some arbitrary time after responding to the RESET command.
> > Currently, the host does not do anything with the RESET command and so
> > it is ok to wait for the in-transit I/O to be accounted for. If the host
> > side sematics changes, we will have to revisit this.
> > Signed-off-by: K. Y. Srinivasan <kys at microsoft.com>
> > BugLink: http://bugs.launchpad.net/bugs/978394
> > Signed-off-by: Andy Whitcroft <apw at canonical.com>
> > ---
> > drivers/scsi/storvsc_drv.c | 5 +++++
> > 1 file changed, 5 insertions(+)
> > diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
> > index 5848a97..af3383f 100644
> > --- a/drivers/scsi/storvsc_drv.c
> > +++ b/drivers/scsi/storvsc_drv.c
> > @@ -1223,7 +1223,12 @@ static int storvsc_host_reset_handler(struct scsi_cmnd *scmnd)
> > /*
> > * At this point, all outstanding requests in the adapter
> > * should have been flushed out and return to us
> > + * There is a potential race here where the host may be in
> > + * the process of responding when we return from here.
> > + * Just wait for all in-transit packets to be accounted for
> > + * before we return from here.
> > */
> > + storvsc_wait_to_drain(stor_device);
> > return SUCCESS;
> > }
> Unless the SCSI layer is throttling requests after a reset command, then
> I think this only makes the window smaller. AFAICT there is no locking
> that would prevent a new I/O request from being submitted right after
> the wait_to_drain event is signaled.
I believe we are throttled for the whole of this callback. We throttle,
call this reset handler, then unthrottle. So I think we are safe
against new requests.
More information about the kernel-team