Re: PATCH for 2.3.29: block device setup cleanup.

Martin Dalecki (dalecki@cs.net.pl)
Sun, 05 Dec 1999 14:48:55 +0100


This is a multi-part message in MIME format.
--------------62BF11F0A51AC4AD42047D81
Content-Type: text/plain; charset=iso-8859-2
Content-Transfer-Encoding: 7bit

Andries.Brouwer@cwi.nl wrote:
>
> > I hope you understand my intentions a bit better now?
>
> Yes, I see what you want.
> But I am unhappy with your work. Look again at
>
> > - read_ahead[MAJOR(dev)] = arg;
> > + blk_dev[MAJOR(dev)].read_ahead = arg;
>
> If the final goal is
>
> dev->majordev->read_ahead = arg;
>
> or so, then it seems to me you do not make progress.
> On the other hand, if you do
>
> - read_ahead[MAJOR(dev)] = arg;
> + READ_AHEAD(dev) = arg;
>
> then you can have today
>
> #define READ_AHEAD(x) read_ahead[MAJOR(x)]
>
> and tomorrow
>
> #define READ_AHEAD(x) (x)->majordev->read_ahead
>
> (And this may be further hidden inside functions get_read_ahead()
> and set_read_ahead(), so that generic versions of such functions
> can be replaced by more interesting ones for certain devices, etc.)
>
> Such changes are real progress, because (i) they generate the same
> code as we have today, so no errors can be introduced, not even
> any inefficiencies, and (ii) using a 1-line change this READ_AHEAD()
> suddenly gets its new meaning.
>
> It is this same mechanism that allows one today to switch between
>
> #define MINOR(x) ((x) & MINORMASK)
>
> and
>
> #define MINOR(x) ((x)->minor)
>
> In other words, your current approach requires changes all over
> the place to reach an intermediate stage, and then again changes
> all over for the final work. While the version I would suggest
> requires a change only once, and people running the kernel with
> one set of defines can coexist with people running the kernel
> with another set of defines.
>
> This allows one to play with several possible ways to setup
> device structs for free, without having to do major editing.

You miss several points:

1. One can't get over without any intermediate state just simple for
the sake of code testing and overall stability.

2. What you are proposing is just a way to make the linux source base
contain different operating systems.

3. I don't actually like the above overencapsulation of the interface,
since
this does hide the actuall semantics from the "user", read driver
developer.

4. Making new features an "option" is the best way to not encourage
anybody
to switch to a new interface.

5. It's not this level of the interface which is going to change.
Wherever possible I'm going to pass the pointer to the blk_dev_struct
instead of kdev_t to functions which don't really need the full
device
information. Ideally I'm going to have just a lookup and allocation
of a blk_dev_struct on kernel entry based on the kdev_t number passed
from the user space. Thereafter only a pointer to this struct should
revolve
around inside the kernel. This way one will not have to do the double
derefference you get by just changing the content
of the kdev_t. Look at this at cutting the tree from the bottom
(blk_dev)
instead of starting from the top piece by piece (changing kdev_t in
first place.)

6. At least you can use my patches as a documentation about what and
where needs to
get changed.

BTW. If you have doubts whatever there isn't any simplification, then
please have a look at the attached newer patch version.
There I had been able, by carfully analyzing the actual usage and
supposed semantics,
to eliminate tons of per minor arrays in blk_dev_struct, which where
previously
there and which where used only as arrays of equal per-major constants.
This ammounts for significan conde simiplification (one doesn't need to
administer dynamically allocated arrays, and yes there where leaks
previously there)
as well as a quite significant dynamic space usage lowerage. As well as
of course
less confusion inside the drivers about what those values should
contain.
(It took quite time for me before I guessed correctly the semantics of
blk_size and
blksize_size, in esp. the second is a wonderfull name.)

As of the space saving lets see. I have 5 disks in my homebox. And about
6 different
partitions on them (some are mounted only on demand).
So 6*4*3*256 = 18k bytes. OK this isint going to make anybody jail, but
it's not
an negligable amount ;-).

> And Linus might accept such a change even during code-freeze
> times since the generated code remains the same.
>
> Andries

I doubt this stuff will be finished soon. However the attached patch
could
very well just get in as it is.

The next thing I'm going to do is to really look where one could pass
blk_dev_struct pointer
instead of kdev_t on the hardware related part (mainly ll_rw_block).

--
	Marcin Dalecki
--------------62BF11F0A51AC4AD42047D81
Content-Type: application/x-gzip;
 name="diff-3.gz"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="diff-3.gz"

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 39xlESQR8wAA --------------62BF11F0A51AC4AD42047D81--

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/