Re: [PATCH 0/2] Putting bio_list into struct request?

From: Jens Axboe
Date: Sun Apr 19 2009 - 13:45:25 EST


On Sun, Apr 19 2009, Jeff Garzik wrote:
>
> Now that we have bio_list in include/linux/bio.h, I wanted to see what
> would happen when I replaced rq->{bio,biotail} with rq->bio_list.
>
> Personally, I think the result is more readable, and indicates to all
> users that rq->bio is really a list (even if a list with one entry).
> Also, it highlights some bio users in downstream drivers, and hopefully
> serves to increase the amount of bio-related review in those drivers.

Well, I disagree, but perhaps I'm just used to it... Plus the patch
actually adds more lines than it deletes, and the resulting code is
larger. I think that's a pretty good hint not to use helpers, at least
for core code. It's more important in drivers, where we want
easy-to-use and understand helpers, since it minimizes bugs in code
written by people who may not be intimate with the block layer etc.

> The first patch is a straightforward replacement, with no code or
> behavior changes (any such is a bug in the patch...):
>
> - null/not-null tests become bio_list_empty()
> - rq->bio becomes rq->bio_list.head
> - rq->biotail becomes rq->bio_list.tail
> - in a few cases, bio_list_xxx functions are called
> as appropriate
>
> The second patch are fixes to what I believe are minor bugs in the
> bio-list-aware block core. Even if patch #1 is not accepted, these
> fixes are likely needed regardless. Typically the bugs are of the type
> "we forgot to update rq->biotail".

It's not bugs, as soon as you clear ->bio there's no list to begin with.
->biotail is only ever used for back merging checks. If we didn't do
back merging, we would not need to access the tail element ever. I
suspect the reason why the resulting code is larger is exactly because
it's not a 1:1 transition. When we do a back merge, we don't have to
check of ->tail is set. It always is.

--
Jens Axboe

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