All of lore.kernel.org
 help / color / mirror / Atom feed
From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: Tejun Heo <tj@kernel.org>
Cc: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
	bharrosh@panasas.com, axboe@kernel.dk,
	linux-kernel@vger.kernel.org, jeff@garzik.org,
	linux-ide@vger.kernel.org, linux-scsi@vger.kernel.org,
	bzolnier@gmail.com, petkovbb@googlemail.com,
	sshtylyov@ru.mvista.com, mike.miller@hp.com, Eric.Moore@lsi.com,
	stern@rowland.harvard.edu, zaitcev@redhat.com,
	Geert.Uytterhoeven@sonycom.com, sfr@canb.auug.org.au,
	grant.likely@secretlab.ca, paul.clements@steeleye.com,
	tim@cyberelk.net, jeremy@xensource.com, adrian@mcmen.demon.co.uk,
	oakad@yahoo.com, dwmw2@infradead.org, schwidefsky@de.ibm.com,
	ballabio_dario@emc.com, davem@davemloft.net,
	rusty@rustcorp.com.au, Markus.Lidel@shadowconnect.com,
	dgilbert@interlog.com, djwong@us.ibm.com
Subject: Re: [PATCH 03/11] block: add rq->resid_len
Date: Tue, 12 May 2009 09:08:49 -0500	[thread overview]
Message-ID: <1242137329.3308.6.camel@mulgrave.int.hansenpartnership.com> (raw)
In-Reply-To: <4A09115D.3080009@kernel.org>

On Tue, 2009-05-12 at 15:04 +0900, Tejun Heo wrote:
> Hello, James.
> 
> James Bottomley wrote:
> >> * Not well defined.  What does it mean really?  It can't indicate
> >>   successful partial transfer.  If the request partially succeeded,
> >>   the required behavior is to successfully complete the request
> >>   partially with residual count and then fail the latter part when
> >>   issued again.  If the failure applies to the whole request but
> >>   location information is useful, it should be carried in the sense
> >>   data.
> > 
> > The definition is the amount of data transfer requested less the actual
> > that went over the wire ... that's certainly a well defined quantity;
> > although, one could argue about what this means in the device.
> > Certainly I agree that just because the data was transferred to or from
> > the device is no guarantee that the device did anything with it (or
> > transferred it accurately).
> 
> I think it's more like how many bytes are valid where the validity is
> defined as the number of meaningful bytes on dev -> host commands and
> the number of bytes the device actually consumed on the other
> direction.  Please note that this is different from the number of
> bytes transferred due to padding or under other error conditions.

For failed commands we don't have that information.  All we know is how
many bytes were actually transferred (because the HBA keeps a count), so
it's the actual transfer count we use to construct the residual.  No
imputation of validity or otherwise.  It just says I transferred this
amount, based on the error make of it what you will.

> >> * What about corner values?  What does 0 or full resid count on
> >>   failure mean?
> > 
> > 0 means everything transferred, full residual means nothing did.
> 
> Yeap, I was wondering about the combination 0 resid count + failure.
> What would it mean?  All bytes are valid but the command failed?

Well, there are certain SCSI conditions called deferred errors and the
like where we return Check Condition but everything's OK, redisual count
should be zero, same goes for recovered errors ... there are actually
lots of things we can get back as an "error" which means I'm warning you
of something, but the transfer was OK.  Likewise we get unit attentions
(essentialy AENs) which mean I'm telling you something before you start,
so please try again.  Here residual would be the full transfer.   Also,
we have the nasty USB case where no error return but an actual residual
tells you something really went wrong.

> >> * Different layers of failing.  In SG_IO interface, a request may fail
> >>   with -EIO way before it reaches block layer.  Residual count can't
> >>   be set to any meaningful value in these cases.  We can set it to
> >>   full count for these fast fail paths, but do we really wanna go
> >>   there?  Another problem is when a driver is missing SG_IO
> >>   capability.  Who's responsible for setting resid count in that case?
> >>   How is upper layer gonna determine a SG_IO failed because lower
> >>   level driver didn't support it or it genuinely failed?
> > 
> > Well, I prefer the concept of transfer length, which would be
> > initialised to zero ... however, residuals should be initialised to
> > the actual transfer count.
> > 
> >> I think it's just silly to give any meaning to resid count when the
> >> request fails.  It's best to leave the field unmodified or just
> >> declare it undefined.
> > 
> > It's current behaviour.  Technically that makes it part of the SG_IO
> > ABI ... although it could be deprecated if someone can verify there are
> > no current users.
> 
> The behavior wasn't guaranteed before the change in paths including
> SG_IO fast fail one.  libata and ide have been and are completely
> funky about residual counts anyway so I highly doubt anyone has been
> depending on it.
> 
> There's nothing wrong with keeping the original behavior in itself but
> to me it looks like it would be a bad precedence when no one should
> depend on the behavior.

OK, that's what we'll do then, thanks.

James

  reply	other threads:[~2009-05-12 14:08 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-04  7:58 [GIT PATCH] block,scsi,ide: unify sector and data_len, take#2 Tejun Heo
2009-05-04  7:58 ` Tejun Heo
2009-05-04  7:58 ` [PATCH 01/11] nbd: don't clear rq->sector and nr_sectors unnecessarily Tejun Heo
2009-05-04  7:58   ` Tejun Heo
2009-05-04  7:58 ` [PATCH 02/11] ide-tape: don't initialize rq->sector for rw requests Tejun Heo
2009-05-04  7:58   ` Tejun Heo
2009-05-04  7:58 ` [PATCH 03/11] block: add rq->resid_len Tejun Heo
2009-05-04  7:58   ` Tejun Heo
2009-05-04 12:08   ` Sergei Shtylyov
2009-05-05  3:41     ` Tejun Heo
2009-05-07 10:23   ` FUJITA Tomonori
2009-05-10 14:07   ` Boaz Harrosh
2009-05-10 23:48     ` Tejun Heo
2009-05-11  5:49       ` FUJITA Tomonori
2009-05-11 14:18         ` James Bottomley
2009-05-11 15:03           ` FUJITA Tomonori
2009-05-11 15:13             ` James Bottomley
2009-05-11 23:47               ` FUJITA Tomonori
2009-05-12  0:19           ` Tejun Heo
2009-05-12  3:43             ` James Bottomley
2009-05-12  6:04               ` Tejun Heo
2009-05-12 14:08                 ` James Bottomley [this message]
2009-05-12 14:34                   ` Alan Stern
2009-05-12 14:34                     ` Alan Stern
2009-05-12 15:17                   ` Tejun Heo
2009-05-12 15:45                     ` James Bottomley
2009-05-13  6:30                       ` Tejun Heo
2009-05-11 11:31       ` Boaz Harrosh
2009-05-11 14:59         ` FUJITA Tomonori
2009-05-12  8:58           ` Boaz Harrosh
2009-05-12 15:00             ` FUJITA Tomonori
2009-05-12 15:08               ` Boaz Harrosh
2009-05-12 15:16               ` FUJITA Tomonori
2009-05-12  0:27         ` Tejun Heo
2009-05-12  8:46           ` Boaz Harrosh
2009-05-12  9:07             ` Tejun Heo
2009-05-12  9:10               ` Tejun Heo
2009-05-12  9:52               ` Boaz Harrosh
2009-05-12 10:06                 ` Tejun Heo
2009-05-12 11:08                   ` Boaz Harrosh
2009-05-12 15:20                     ` Tejun Heo
2009-05-12 15:53                       ` Boaz Harrosh
2009-05-04  7:58 ` [PATCH 04/11] block: implement blk_rq_pos/[cur_]sectors() and convert obvious ones Tejun Heo
2009-05-04  7:58   ` Tejun Heo
2009-05-04 13:45   ` Sergei Shtylyov
2009-05-05  3:42     ` Tejun Heo
2009-05-04  7:58 ` [PATCH 05/11] block: convert to pos and nr_sectors accessors Tejun Heo
2009-05-04  7:58   ` Tejun Heo
2009-05-04 19:48   ` Adrian McMenamin
2009-05-05  3:42     ` Tejun Heo
2009-05-04  7:58 ` [PATCH 06/11] ide: convert to rq " Tejun Heo
2009-05-04  7:58   ` Tejun Heo
2009-05-04  7:58 ` [PATCH 07/11] block: drop request->hard_* and *nr_sectors Tejun Heo
2009-05-04  7:58   ` Tejun Heo
2009-05-04  7:58 ` [PATCH 08/11] block: cleanup rq->data_len usages Tejun Heo
2009-05-04  7:58   ` Tejun Heo
2009-05-04 14:41   ` Sergei Shtylyov
2009-05-11 12:02   ` Boaz Harrosh
2009-05-04  7:58 ` [PATCH 09/11] ide: " Tejun Heo
2009-05-04  7:58   ` Tejun Heo
2009-05-04  7:58 ` [PATCH 10/11] block: hide request sector and data_len Tejun Heo
2009-05-04  7:58   ` Tejun Heo
2009-05-04  7:58 ` [PATCH 11/11] block: blk_rq_[cur_]_{sectors|bytes}() usage cleanup Tejun Heo
2009-05-04  7:58   ` Tejun Heo
2009-05-05  3:59 ` [GIT PATCH] block,scsi,ide: unify sector and data_len, take#2 Tejun Heo
2009-05-05  3:59   ` Tejun Heo
2009-05-07  2:48   ` Tejun Heo
2009-05-07  2:48     ` Tejun Heo
2009-05-07 10:23 ` FUJITA Tomonori
2009-05-08  2:06   ` FUJITA Tomonori
2009-05-08  9:11     ` Tejun Heo
2009-05-11 12:06 ` Boaz Harrosh
2009-05-12  0:49   ` Tejun Heo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1242137329.3308.6.camel@mulgrave.int.hansenpartnership.com \
    --to=james.bottomley@hansenpartnership.com \
    --cc=Eric.Moore@lsi.com \
    --cc=Geert.Uytterhoeven@sonycom.com \
    --cc=Markus.Lidel@shadowconnect.com \
    --cc=adrian@mcmen.demon.co.uk \
    --cc=axboe@kernel.dk \
    --cc=ballabio_dario@emc.com \
    --cc=bharrosh@panasas.com \
    --cc=bzolnier@gmail.com \
    --cc=davem@davemloft.net \
    --cc=dgilbert@interlog.com \
    --cc=djwong@us.ibm.com \
    --cc=dwmw2@infradead.org \
    --cc=fujita.tomonori@lab.ntt.co.jp \
    --cc=grant.likely@secretlab.ca \
    --cc=jeff@garzik.org \
    --cc=jeremy@xensource.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=mike.miller@hp.com \
    --cc=oakad@yahoo.com \
    --cc=paul.clements@steeleye.com \
    --cc=petkovbb@googlemail.com \
    --cc=rusty@rustcorp.com.au \
    --cc=schwidefsky@de.ibm.com \
    --cc=sfr@canb.auug.org.au \
    --cc=sshtylyov@ru.mvista.com \
    --cc=stern@rowland.harvard.edu \
    --cc=tim@cyberelk.net \
    --cc=tj@kernel.org \
    --cc=zaitcev@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.