Re: [PATCH 09/10] Change table chaining layout

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Rusty Russell
Date: Thursday, October 25, 2007 - 4:54 am

On Thursday 25 October 2007 19:11:40 Jens Axboe wrote:

Well currently sg_chain() only joins "incomplete" (ie. unterminated) sg 
chains.  That works great for you, but it feels more like a special purpose 
to me.


It was suggested by analogy earlier in this thread, to use a two-level 
structure.

In this case I would have first renamed struct scatterlist to struct 
scatterelem.  Then struct scatterlist looks like:

	struct scatterlist {
		unsigned int num;
		struct scatterelem elems[0];
	};

We'd want a nice macro to declare them for the stack case:

#define DEFINE_SCATTERLIST(name, elems)		\
	struct {				\
		struct scatterlist sg;		\
		struct scatterelem elems[num];	\
	} name

Now we've tied the number and array together, we can introduce:

struct sg_multilist
{
	unsigned int num_scatterlists;
	struct scatterlist *sg_array[0];
};

And, of course, a common way to represent a one-sglist array:

#define DEFINE_SG_MULTI(name, num)			\
	struct {					\
		struct sg_multilist ml;			\
		struct scatterlist *sg_array;		\
		struct scatterlist sg;			\
		struct scatterelem elems[num];		\
	} name = { .ml = { 1 }, .sg_array = &name.sg }

Now simply replace all the places which expect a "struct scatterlist" 
with "struct sg_multilist" and we're done.

Using dangling structures is not as neat as using pointers, but it's very 
efficient.


I changed the sg_chain() function not to take one off the argument.  It made 
more sense when I wrote the virtblk code (here it's natural, since the num 
elements used + 1 == size of array).


Agreed, and it was the use of "prv_nents - 2" in that code which made me think 
the arg should be "num used" not "one past the num used".

Cheers,
Rusty.
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 00/10] SG updates, Jens Axboe, (Mon Oct 22, 11:10 am)
[PATCH 03/10] [SG] Update crypto/ to sg helpers, Jens Axboe, (Mon Oct 22, 11:10 am)
[PATCH 04/10] [SG] Update drivers to use sg helpers, Jens Axboe, (Mon Oct 22, 11:10 am)
[PATCH 05/10] [SG] Update fs/ to use sg helpers, Jens Axboe, (Mon Oct 22, 11:10 am)
[PATCH 06/10] [SG] Update net/ to use sg helpers, Jens Axboe, (Mon Oct 22, 11:11 am)
[PATCH 07/10] [SG] Update swiotlb to use sg helpers, Jens Axboe, (Mon Oct 22, 11:11 am)
[PATCH 08/10] [SG] Update arch/ to use sg helpers, Jens Axboe, (Mon Oct 22, 11:11 am)
[PATCH 09/10] Change table chaining layout, Jens Axboe, (Mon Oct 22, 11:11 am)
[PATCH 10/10] Add CONFIG_DEBUG_SG sg validation, Jens Axboe, (Mon Oct 22, 11:11 am)
Re: [PATCH 09/10] Change table chaining layout, Geert Uytterhoeven, (Mon Oct 22, 12:39 pm)
Re: [PATCH 09/10] Change table chaining layout, Linus Torvalds, (Mon Oct 22, 12:49 pm)
Re: [PATCH 09/10] Change table chaining layout, Jens Axboe, (Mon Oct 22, 12:52 pm)
Re: [PATCH 09/10] Change table chaining layout, Alan Cox, (Mon Oct 22, 1:16 pm)
Re: [PATCH 09/10] Change table chaining layout, Matt Mackall, (Mon Oct 22, 1:38 pm)
Re: [PATCH 09/10] Change table chaining layout, Linus Torvalds, (Mon Oct 22, 1:44 pm)
Re: [PATCH 08/10] [SG] Update arch/ to use sg helpers, Benny Halevy, (Mon Oct 22, 2:10 pm)
Re: [PATCH 09/10] Change table chaining layout, Benny Halevy, (Mon Oct 22, 2:16 pm)
Re: [PATCH 09/10] Change table chaining layout, Jeff Garzik, (Mon Oct 22, 2:21 pm)
Re: [PATCH 09/10] Change table chaining layout, Alan Cox, (Mon Oct 22, 2:43 pm)
Re: [PATCH 09/10] Change table chaining layout, Matt Mackall, (Mon Oct 22, 2:47 pm)
Re: [PATCH 09/10] Change table chaining layout, Linus Torvalds, (Mon Oct 22, 2:47 pm)
Re: [PATCH 09/10] Change table chaining layout, Alan Cox, (Mon Oct 22, 3:52 pm)
Re: [PATCH 09/10] Change table chaining layout, Matt Mackall, (Mon Oct 22, 4:46 pm)
Re: [PATCH 09/10] Change table chaining layout, David Miller, (Mon Oct 22, 5:07 pm)
Re: [PATCH 09/10] Change table chaining layout, Jeff Garzik, (Mon Oct 22, 5:11 pm)
powerpc: Fix fallout from sg_page() changes, Olof Johansson, (Mon Oct 22, 9:09 pm)
IB/ehca: Fix sg_page() fallout, Olof Johansson, (Mon Oct 22, 9:31 pm)
Re: IB/ehca: Fix sg_page() fallout, Jens Axboe, (Mon Oct 22, 10:05 pm)
Re: [PATCH 02/10] [SG] Update block layer to use sg helpers, Heiko Carstens, (Mon Oct 22, 10:13 pm)
[PATCH] fix ll_rw_blk.c build on s390, Heiko Carstens, (Mon Oct 22, 10:42 pm)
[PATCH] net: fix xfrm build - missing scatterlist.h include, Heiko Carstens, (Mon Oct 22, 10:44 pm)
Re: IB/ehca: Fix sg_page() fallout, Olof Johansson, (Mon Oct 22, 10:54 pm)
Re: [PATCH 04/10] [SG] Update drivers to use sg helpers, Heiko Carstens, (Mon Oct 22, 11:28 pm)
Re: IB/ehca: Fix sg_page() fallout, Jens Axboe, (Tue Oct 23, 12:12 am)
Re: powerpc: Fix fallout from sg_page() changes, Jens Axboe, (Tue Oct 23, 12:13 am)
Re: [PATCH 04/10] [SG] Update drivers to use sg helpers, Heiko Carstens, (Tue Oct 23, 12:16 am)
Re: [PATCH 09/10] Change table chaining layout, Geert Uytterhoeven, (Tue Oct 23, 12:18 am)
Re: [PATCH 08/10] [SG] Update arch/ to use sg helpers, Jens Axboe, (Tue Oct 23, 12:26 am)
Re: [PATCH 09/10] Change table chaining layout, Boaz Harrosh, (Tue Oct 23, 2:29 am)
Re: [PATCH 09/10] Change table chaining layout, Jens Axboe, (Tue Oct 23, 2:41 am)
Re: [PATCH 09/10] Change table chaining layout, Boaz Harrosh, (Tue Oct 23, 2:50 am)
Re: [PATCH 09/10] Change table chaining layout, Jens Axboe, (Tue Oct 23, 2:55 am)
Re: [PATCH 09/10] Change table chaining layout, Boaz Harrosh, (Tue Oct 23, 3:23 am)
Re: [PATCH 09/10] Change table chaining layout, Jens Axboe, (Tue Oct 23, 3:29 am)
Re: [PATCH 09/10] Change table chaining layout, Ingo Molnar, (Tue Oct 23, 3:33 am)
Re: [PATCH 06/10] [SG] Update net/ to use sg helpers, Christian Borntraeger, (Tue Oct 23, 3:44 am)
Re: [PATCH 06/10] [SG] Update net/ to use sg helpers, Jens Axboe, (Tue Oct 23, 3:45 am)
Re: [PATCH 09/10] Change table chaining layout, Jens Axboe, (Tue Oct 23, 3:56 am)
Re: [PATCH 09/10] Change table chaining layout, Ingo Molnar, (Tue Oct 23, 4:27 am)
[PATCH][SG] fix typo in ps3rom.c, Arnd Bergmann, (Tue Oct 23, 7:48 am)
Re: [PATCH 09/10] Change table chaining layout, Linus Torvalds, (Tue Oct 23, 8:22 am)
Re: [PATCH 09/10] Change table chaining layout, Boaz Harrosh, (Tue Oct 23, 10:08 am)
Re: [PATCH 09/10] Change table chaining layout, Jens Axboe, (Tue Oct 23, 11:33 am)
Re: [PATCH 09/10] Change table chaining layout, Geert Uytterhoeven, (Tue Oct 23, 12:23 pm)
Re: [PATCH 09/10] Change table chaining layout, Andi Kleen, (Tue Oct 23, 12:56 pm)
Re: [PATCH 09/10] Change table chaining layout, Jens Axboe, (Tue Oct 23, 1:20 pm)
Re: [PATCH 09/10] Change table chaining layout, Andi Kleen, (Tue Oct 23, 1:57 pm)
Re: [PATCH 09/10] Change table chaining layout, Jens Axboe, (Tue Oct 23, 2:44 pm)
Re: [PATCH 09/10] Change table chaining layout, Jens Axboe, (Tue Oct 23, 2:46 pm)
Re: [PATCH 09/10] Change table chaining layout, Jens Axboe, (Tue Oct 23, 11:56 pm)
Re: [PATCH 09/10] Change table chaining layout, Jens Axboe, (Wed Oct 24, 1:05 am)
Re: [PATCH 09/10] Change table chaining layout, Geert Uytterhoeven, (Wed Oct 24, 2:03 am)
Re: [PATCH 09/10] Change table chaining layout, Jens Axboe, (Wed Oct 24, 2:12 am)
Re: [PATCH 09/10] Change table chaining layout, Olivier Galibert, (Wed Oct 24, 6:35 am)
Re: [PATCH 09/10] Change table chaining layout, Jens Axboe, (Wed Oct 24, 6:38 am)
Re: [PATCH 09/10] Change table chaining layout, Olivier Galibert, (Wed Oct 24, 6:45 am)
Re: [PATCH 09/10] Change table chaining layout, Linus Torvalds, (Wed Oct 24, 8:16 am)
Re: [PATCH 09/10] Change table chaining layout, Rusty Russell, (Thu Oct 25, 1:40 am)
Re: [PATCH 09/10] Change table chaining layout, Jens Axboe, (Thu Oct 25, 2:11 am)
Re: [PATCH 09/10] Change table chaining layout, Rusty Russell, (Thu Oct 25, 4:54 am)
Re: [PATCH 09/10] Change table chaining layout, Linus Torvalds, (Thu Oct 25, 8:40 am)
Re: [PATCH 09/10] Change table chaining layout, Benny Halevy, (Thu Oct 25, 9:03 am)
Re: [PATCH 09/10] Change table chaining layout, Rusty Russell, (Thu Oct 25, 5:03 pm)
Re: [PATCH 09/10] Change table chaining layout, Paul Mackerras, (Thu Oct 25, 10:01 pm)
Re: [PATCH 09/10] Change table chaining layout, Linus Torvalds, (Fri Oct 26, 7:52 am)
Re: [PATCH 09/10] Change table chaining layout, Jens Axboe, (Fri Oct 26, 10:28 am)
[RFC PATCH 1/2] sg_ring instead of scatterlist chaining, Rusty Russell, (Sun Nov 4, 11:11 pm)