Re: [PATCH] block: fix bio_add_page for non trivial merge_bvec_fn case

From: Dmitry Monakhov
Date: Wed Jan 27 2010 - 16:11:50 EST


Dmitry Monakhov <dmonakhov@xxxxxxxxxx> writes:

> On Tue, Jan 26, 2010 at 4:29 PM, Jens Axboe <jens.axboe@xxxxxxxxxx> wrote:
>> On Tue, Jan 26 2010, Dmitry Monakhov wrote:
>>> Hi, year ago I've sent a patch which fix false bio merge rejects, but
>>> seems patch was missed. Currently the issue is still present.
>>>
>>
>>> From 92a97ef181e15caa94bd56a1ade5c337db599b79 Mon Sep 17 00:00:00 2001
>>> From: Dmitry Monakhov <dmonakhov@xxxxxxxxxx>
>>> Date: Tue, 26 Jan 2010 16:01:34 +0300
>>> Subject: [PATCH] [PATCH] block: fix bio_add_page for non trivial merge_bvec_fn case
>>>
>>> We have to properly decrease bi_size in order to merge_bvec_fn return
>>> right result. ÂOtherwise this result in false merge rejects for two
>>> absolutely valid bio_vecs. ÂThis may cause significant performance penalty
>>> for example Itanium: page_size == 16k, fs_block_size == 1k and block device
>>> is raid with small chunk_size.
>>>
>>> Signed-off-by: Dmitry Monakhov <dmonakhov@xxxxxxxxxx>
>>> ---
>>> Âfs/bio.c | Â Â3 ++-
>>> Â1 files changed, 2 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/fs/bio.c b/fs/bio.c
>>> index 76e6713..9f8e517 100644
>>> --- a/fs/bio.c
>>> +++ b/fs/bio.c
>>> @@ -548,7 +548,8 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page
>>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â struct bvec_merge_data bvm = {
>>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â .bi_bdev = bio->bi_bdev,
>>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â .bi_sector = bio->bi_sector,
>>> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â .bi_size = bio->bi_size,
>>> + Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â .bi_size = bio->bi_size -
>>> + Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â (prev->bv_len - len),
>>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â .bi_rw = bio->bi_rw,
>>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â };
>>
>> Hmm confused. why isn't this just bio->bi_size - len?
I've attached more descriptive version of the patch. Jens, please
clarify your opinion to the patch( do you like it or not?)
I don't want it miss again.