From: Rusty Russell <rusty@rustcorp.com.au>
To: James Bottomley <James.Bottomley@hansenpartnership.com>
Cc: Jens Axboe <jens.axboe@oracle.com>,
linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
linux-ide@vger.kernel.org, Tejun Heo <htejun@gmail.com>
Subject: Re: [PATCH 0/7] sg_ring: a ring of scatterlist arrays
Date: Thu, 10 Jan 2008 13:01:03 +1100 [thread overview]
Message-ID: <200801101301.03846.rusty@rustcorp.com.au> (raw)
In-Reply-To: <1199916637.3493.72.camel@localhost.localdomain>
On Thursday 10 January 2008 09:10:37 James Bottomley wrote:
> On Tue, 2008-01-08 at 11:39 +1100, Rusty Russell wrote:
> > On Tuesday 08 January 2008 02:48:23 James Bottomley wrote:
> > > We're always open to new APIs (or more powerful and expanded old ones).
> > > The way we've been doing the sg_chain conversion is to slide API layers
> > > into the drivers so sg_chain becomes a simple API flip when we turn it
> > > on. Unfortunately sg_ring doesn't quite fit nicely into this.
> >
> > Hi James,
> >
> > Well, it didn't touch any drivers. The only ones which needed
> > altering were those which wanted to use large scatter-gather lists. You
> > think of the subtlety of sg-chain conversion as a feature; it's a bug :)
>
> No, I think of the side effect of hiding scatterlist manipulations
> inside accessors as a feature because it insulates the drivers from the
> details of the implementation.
I completely disagree. Abstractions add complexity, and that costs. They
steal information from their users, and as they build up like sediment they
make debugging and understanding harder.
For example, an array is simple and well understood. An abstraction would
just buy confusion and YA thing to learn.
When a single array was no longer sufficient, I figured a linked-list of
arrays was the simplest replacement. Easy to understand and accepted
practice (tho rings are a bit exotic). Because the implementation is the
interface, authors can see what is legal.
More concretely, you're already regarding your abstractions as too expensive,
which is why sg_chain() doesn't handle chained sgs.
Result: you've got a complex implementation and a complex interface with a
complex abstraction.
> > sg_chains suck for manipulation, and AFAICT that's inherent. Here, take
> > a look at the sg_ring conversion of scsi_alloc_sgtable and
> > scsi_free_sgtable and you can see why I'm unhappy with the sg_chain code:
> [...]
>
> > Hope that clarifies,
>
> Actually, not really. If I want to continue the competition, I can just
> point out that your sg_ring code is bigger than those corresponding
> segments are after the sg_table conversion of scsi_lib.c ...
>
> However, this is pointless.
No, it's exactly the point. These details *matter*. The implementation
*matters*. sg_table moves this code out of scsi_lib (good!), but still
demonstrates how much of a PITA they are to manipulate.
As for being able to make arbitrary changes in future without hitting drivers:
this is the Kernel ABI pipe dream writ small.
OK, I give in with -ETIMEDOUT. I'll go away now and do something
productive :)
Cheers,
Rusty.
next prev parent reply other threads:[~2008-01-10 2:01 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-19 6:31 [PATCH 0/7] sg_ring: a ring of scatterlist arrays Rusty Russell
2007-12-19 6:33 ` [PATCH 1/7] sg_ring: introduce " Rusty Russell
2007-12-19 7:31 ` [PATCH 2/7] sg_ring: use in virtio Rusty Russell
2007-12-19 7:33 ` [PATCH 3/7] sg_ring: blk_rq_map_sg_ring as a counterpart to blk_rq_map_sg Rusty Russell
2007-12-19 7:34 ` [PATCH 4/7] sg_ring: dma_map_sg_ring() helper Rusty Russell
2007-12-19 7:36 ` [PATCH 5/7] sg_ring: Convert core scsi code to sg_ring Rusty Russell
2007-12-19 7:37 ` [PATCH 6/7] sg_ring: libata simplification Rusty Russell
2007-12-19 7:38 ` [PATCH 7/7] sg_ring: convert core ATA code to sg_ring Rusty Russell
2007-12-26 8:36 ` Tejun Heo
2007-12-26 17:12 ` James Bottomley
2007-12-27 0:24 ` Rusty Russell
2007-12-27 4:21 ` Tejun Heo
2008-01-05 15:31 ` [PATCH 0/7] sg_ring: a ring of scatterlist arrays James Bottomley
2008-01-07 4:38 ` Rusty Russell
2008-01-07 5:01 ` Tejun Heo
2008-01-07 5:28 ` Rusty Russell
2008-01-07 6:37 ` Tejun Heo
2008-01-07 8:34 ` Rusty Russell
2008-01-07 8:45 ` Tejun Heo
2008-01-07 12:17 ` Herbert Xu
2008-01-07 12:17 ` Herbert Xu
2008-01-07 15:48 ` James Bottomley
2008-01-08 0:39 ` Rusty Russell
2008-01-09 22:10 ` James Bottomley
2008-01-10 2:01 ` Rusty Russell [this message]
2008-01-10 15:27 ` James Bottomley
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=200801101301.03846.rusty@rustcorp.com.au \
--to=rusty@rustcorp.com.au \
--cc=James.Bottomley@hansenpartnership.com \
--cc=htejun@gmail.com \
--cc=jens.axboe@oracle.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 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.