public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: Tejun Heo <htejun@gmail.com>
Cc: Jens Axboe <jens.axboe@oracle.com>,
	Mike Galbraith <efault@gmx.de>,
	Andrew Morton <akpm@linux-foundation.org>,
	LKML <linux-kernel@vger.kernel.org>,
	linux-ide@vger.kernel.org, linux-scsi@vger.kernel.org,
	Jeff Garzik <jgarzik@pobox.com>
Subject: Re: [PATCH] block: fix residual byte count handling
Date: Sat, 01 Mar 2008 09:19:53 -0600	[thread overview]
Message-ID: <1204384793.4003.102.camel@localhost.localdomain> (raw)
In-Reply-To: <47C8F4FC.1040505@gmail.com>


On Sat, 2008-03-01 at 15:17 +0900, Tejun Heo wrote:
> Hello, Jens, James.
> 
> Jens Axboe wrote:
> >> With the original patch, I have to run through the whole of libsas and
> >> scsi_transport_sas doing
> >>
> >> s/data_len/raw_data_len/
> >>
> >> With your update it looks like I have to run through them all doing
> >>
> >> s/data_len/data_len - extra_len/
> 
> blk_rq_raw_data_len() should do.

I know we *could* sweep through all the block drivers altering them; my
point is that I don't think we *should*.  Fundamentally, every driver
that cares is assuming req->data_len is the length of the request that
came down.  The fact that it got padded is irrelevant (and actually
detrimental) to most of them as the SMP driver illustrates.

We use a high dma_alignment not because we care about padding, but
because we want to avoid scatter gather.  So we care about alignment of
the start of the buffer (to avoid sg), but fundamentally, we need to
know what its true length (not its padded length) is.  The true length
feeds into the smp frame size and is checked by the interfaces, which is
why the changes caused an SMP failure.

Just for the principle of least surprise, can we not keep req->data_len
what it has always been, namely the true data length of the request and
express the fact that we've padded it by req->extra_len or something, so
we don't have to do all of these driver changes.

> >> which is even worse.  Can't we put things back to a point where data_len
> >> means exactly that and extra_len means how much we have spare on the
> >> end, so you know you can DMA up to data_len + extra_len if need be?
> >>
> >> That way we don't have to sweep through every block driver altering the
> >> way it uses data_len.
> 
> If SMP is broken because it needs start address alignment but not
> padding to align the size, what should be done is to make that exact
> requirement visible to the block layer.  Say,
> blk_queue_dma_start_alignment() or maybe change
> blk_queue_dma_alignment() such that it only indicates start address
> alignment and add blk_queue_dma_size_alignment() for drivers which
> require size to be aligned too.  I think those are few.

But this is true of *every* current user of the block layer apart from
IDE ... we all care about alignment not padding.  Any current user that
actually cares about padding will be doing their own adjustments, so
they need changing anyway.

We can frame that with a different API, but blk_queue_dma_alignment()
better be the common case (start but not pad alignment).

> I think the decision which value rq->data_len represents comes down to
> which size is used more in low level drivers because no matter which way
> we choose we'll have to update some of the drivers which expects the
> other thing from rq->data_len.

Right, and currently, apart from IDE, they all want it to mean the true
data length.

> blk_rq_raw_data_len() is needed iff a driver needs dummy buffers
> attached at the end and still needs to know the original request size
> which isn't the common case.

I think it *is* the common case.

> > Fully agree. The reason why I think it's so ugly is that you have to
> > keep these two seperate variables in sync. The burning was just one bug,
> > there will be others...
> 
> The posted modification isn't too bad as the maintenance of the two
> variables is at places where the nasty things happen.  I think what
> rq->data_len should represent when seen from LLDs is more important and
> please note that if SMP is broken because it simply doesn't require
> 512byte size alignment, it's a different issue.

But we still have to find all the bugs this causes in all the block
drivers ... that's my biggest concern right now.

> As long as both raw_data_len and data_len are accessible, I'm okay
> either way.  My biggest reluctance is against breaking sum(sg) ==
> rq->data_len.  I think this can lead to much more subtle problems such
> as programming the controller w/ wrong bytes count and wrapped-around
> resid calculation.

OK, so can we go back to data_len being the true value and add an
extra_len for drivers who want to know where the padding lies?

James



  reply	other threads:[~2008-03-01 15:19 UTC|newest]

Thread overview: 104+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1203583379.6244.27.camel@homer.simson.net>
     [not found] ` <20080222073228.GZ23197@kernel.dk>
     [not found]   ` <1203752563.5225.4.camel@homer.simson.net>
     [not found]     ` <1203839683.17463.9.camel@homer.simson.net>
     [not found]       ` <1204019283.8731.11.camel@homer.simson.net>
     [not found]         ` <1204033003.11828.22.camel@homer.simson.net>
2008-02-26 23:08           ` regression: CD burning (k3b) went broke Andrew Morton
2008-02-27  0:46             ` Jeff Garzik
2008-02-27  2:58               ` Mike Galbraith
2008-02-27  2:24             ` Mike Galbraith
2008-02-27  6:00               ` Mike Galbraith
2008-02-27  7:07                 ` Mike Galbraith
2008-02-28  7:43                   ` Tejun Heo
2008-02-28  8:20                     ` Mike Galbraith
2008-02-28  8:50                       ` [PATCH] block: fix residual byte count handling Tejun Heo
2008-02-28 15:35                         ` Jens Axboe
2008-02-28 15:46                           ` Tejun Heo
2008-02-29 16:47                             ` James Bottomley
2008-02-29 20:11                               ` Jens Axboe
2008-03-01  6:17                                 ` Tejun Heo
2008-03-01 15:19                                   ` James Bottomley [this message]
2008-03-02 14:52                                   ` FUJITA Tomonori
2008-03-02 18:46                                     ` Mike Christie
2008-03-03  3:27                                       ` Mike Galbraith
2008-03-03  2:40                                     ` Tejun Heo
2008-03-03  3:59                                       ` FUJITA Tomonori
2008-03-03  4:09                                         ` Tejun Heo
2008-03-03  6:08                                           ` [PATCH 1/2] " Tejun Heo
2008-03-03  6:10                                             ` [PATCH] block: separate out padding from alignment Tejun Heo
2008-03-03 18:27                                               ` James Bottomley
2008-03-03  8:26                                           ` [PATCH] block: fix residual byte count handling FUJITA Tomonori
2008-03-03  9:21                                             ` Tejun Heo
2008-03-03 12:17                                               ` FUJITA Tomonori
2008-03-03 13:38                                                 ` Tejun Heo
2008-03-03 13:50                                                   ` FUJITA Tomonori
2008-03-03 13:55                                                     ` Tejun Heo
2008-03-03 14:01                                                       ` FUJITA Tomonori
2008-03-03 14:22                                                         ` Tejun Heo
2008-03-03 14:52                                                           ` FUJITA Tomonori
2008-03-03 22:44                                                             ` Tejun Heo
2008-03-04  2:11                                                               ` FUJITA Tomonori
2008-03-04  2:32                                                                 ` Tejun Heo
2008-03-04  8:53                                                                   ` FUJITA Tomonori
2008-03-04  8:59                                                                     ` Jens Axboe
2008-03-04  9:06                                                                       ` FUJITA Tomonori
2008-03-04  9:22                                                                         ` FUJITA Tomonori
2008-03-04  9:30                                                                           ` Tejun Heo
2008-03-04  9:35                                                                           ` Jens Axboe
2008-03-04  9:40                                                                             ` Tejun Heo
2008-03-04  9:46                                                                               ` Jens Axboe
2008-03-04 12:37                                                                             ` Mike Galbraith
2008-03-04 12:39                                                                               ` Jens Axboe
2008-03-04 12:43                                                                                 ` Mike Galbraith
2008-03-04 12:58                                                                                   ` Mike Galbraith
2008-03-04 13:03                                                                                     ` Jens Axboe
2008-03-04 14:25                                                                                       ` Mike Galbraith
2008-03-04 18:17                                                                                         ` Jens Axboe
2008-03-04 18:29                                                                                           ` Jens Axboe
2008-03-04 18:35                                                                                           ` Mike Galbraith
2008-03-04 18:45                                                                                             ` Jens Axboe
2008-03-04 18:49                                                                                               ` Mike Galbraith
2008-03-04 18:54                                                                                                 ` Jens Axboe
2008-03-04 19:26                                                                                                   ` Mike Galbraith
2008-03-04 19:28                                                                                                     ` Jens Axboe
2008-03-04 16:04                                                                                 ` James Bottomley
2008-03-04 18:46                                                                                   ` Jens Axboe
2008-03-04 17:34                                                                                 ` walt
2008-03-04 17:59                                                                                   ` Tejun Heo
2008-03-04 19:18                                                                                     ` walt
2008-03-04 19:42                                                                                   ` Kiyoshi Ueda
2008-03-04 12:40                                                                               ` Tejun Heo
2008-03-04 12:45                                                                                 ` Mike Galbraith
2008-03-04 13:30                                                                                 ` FUJITA Tomonori
2008-03-04 13:50                                                                                   ` Tejun Heo
2008-03-04 16:17                                                                                     ` Tejun Heo
2008-03-04 16:42                                                                                       ` Tejun Heo
2008-03-04 18:26                                                                                         ` Boaz Harrosh
2008-03-04 18:35                                                                                           ` Tejun Heo
2008-03-04 18:27                                                                                         ` James Bottomley
2008-03-04 18:33                                                                                           ` Tejun Heo
2008-03-04 18:45                                                                                         ` Mike Galbraith
2008-03-04 19:25                                                                                           ` Jens Axboe
2008-03-04 19:33                                                                                             ` Mike Galbraith
2008-03-04 19:34                                                                                               ` Jens Axboe
2008-03-04 19:19                                                                                         ` FUJITA Tomonori
2008-03-04 23:33                                                                                           ` Tejun Heo
2008-03-04 23:54                                                                                             ` Tejun Heo
2008-03-05  0:26                                                                                             ` FUJITA Tomonori
2008-03-05  0:44                                                                                               ` Tejun Heo
2008-03-06  4:56                                                                                                 ` FUJITA Tomonori
2008-03-06  5:02                                                                                                   ` Tejun Heo
2008-03-05 10:16                                                                                               ` [PATCH] blk: missing add of padded bytes to io completion byte count Boaz Harrosh
2008-03-05 12:28                                                                                                 ` Mike Galbraith
2008-03-05 12:33                                                                                                 ` Jens Axboe
2008-03-05 12:46                                                                                                   ` Boaz Harrosh
2008-03-05 12:48                                                                                                     ` Jens Axboe
2008-03-05 13:45                                                                                                       ` Tejun Heo
2008-03-05 13:51                                                                                                         ` Jens Axboe
2008-03-05 14:08                                                                                                           ` Tejun Heo
2008-03-05 15:21                                                                                                           ` James Bottomley
2008-03-06  4:41                                                                                                             ` FUJITA Tomonori
2008-03-06 13:41                                                                                                               ` Jens Axboe
2008-03-07  0:07                                                                                                                 ` Tejun Heo
2008-03-07 15:07                                                                                                                   ` FUJITA Tomonori
2008-03-08  1:06                                                                                                                     ` Tejun Heo
2008-03-20 12:54                                                                                                                 ` FUJITA Tomonori
2008-03-05 14:46                                                                                                         ` Boaz Harrosh
2008-03-05 15:11                                                                                                           ` Tejun Heo
2008-03-06  5:02                                                                                                 ` FUJITA Tomonori
2008-03-04  9:29                                                                       ` [PATCH] block: fix residual byte count handling 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=1204384793.4003.102.camel@localhost.localdomain \
    --to=james.bottomley@hansenpartnership.com \
    --cc=akpm@linux-foundation.org \
    --cc=efault@gmx.de \
    --cc=htejun@gmail.com \
    --cc=jens.axboe@oracle.com \
    --cc=jgarzik@pobox.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox