From: Ming Lei <tom.leiming@gmail.com>
To: Shaohua Li <shli@kernel.org>
Cc: Jens Axboe <axboe@fb.com>,
"open list:SOFTWARE RAID (Multiple Disks) SUPPORT"
<linux-raid@vger.kernel.org>,
linux-block <linux-block@vger.kernel.org>,
Christoph Hellwig <hch@infradead.org>
Subject: Re: [PATCH v2 09/13] md: raid1: use bio_segments_all()
Date: Fri, 3 Mar 2017 14:22:30 +0800 [thread overview]
Message-ID: <CACVXFVNRhekBMAnVN9co-jdkP=+5S+28CyFr9Z_nsJVmdxPxSg@mail.gmail.com> (raw)
In-Reply-To: <CACVXFVP1gNEsUFdh1eKW9d01azis2+GMNO_kZjN8_ZQEbe8BxQ@mail.gmail.com>
On Fri, Mar 3, 2017 at 10:20 AM, Ming Lei <tom.leiming@gmail.com> wrote:
> On Thu, Mar 2, 2017 at 3:52 PM, Shaohua Li <shli@kernel.org> wrote:
>> On Thu, Mar 02, 2017 at 10:34:25AM +0800, Ming Lei wrote:
>>> Hi Shaohua,
>>>
>>> On Wed, Mar 1, 2017 at 7:42 AM, Shaohua Li <shli@kernel.org> wrote:
>>> > On Tue, Feb 28, 2017 at 11:41:39PM +0800, Ming Lei wrote:
>>> >> Use this helper, instead of direct access to .bi_vcnt.
>>> >
>>> > what We really need to do for the behind IO is:
>>> > - allocate memory and copy bio data to the memory
>>> > - let behind bio do IO against the memory
>>> >
>>> > The behind bio doesn't need to have the exactly same bio_vec setting. If we
>>> > just track the new memory, we don't need use the bio_segments_all and access
>>> > bio_vec too.
>>>
>>> But we need to figure out how many vecs(each vec store one page) to be
>>> allocated for the cloned/behind bio, and that is the only value of
>>> bio_segments_all() here. Or you have idea to avoid that?
>>
>> As I said, the behind bio doesn't need to have the exactly same bio_vec
>> setting. We just allocate memory and copy original bio data to the memory,
>> then do IO against the new memory. The behind bio
>> segments == (bio->bi_iter.bi_size + PAGE_SIZE - 1) >> PAGE_SHIFT
>
> The equation isn't always correct, especially when bvec includes just
> part of page, and it is quite often in case of mkfs, in which one bvec often
> includes 512byte buffer.
Think it further, your idea could be workable and more clean, but the change
can be a bit big, looks we need to switch handling write behind into
the following way:
1) replace bio_clone_bioset_partial() with bio_allocate(nr_vecs), and 'nr_vecs'
is computed with your equation;
2) allocate 'nr_vecs' pages once and share them among all created bio in 1)
3) for each created bio, add each page into the bio via bio_add_page()
4) only for the 1st created bio, call bio_copy_data() to copy data from
master bio.
Let me know if you are OK with the above implementaion.
Thanks,
Ming Lei
next prev parent reply other threads:[~2017-03-03 6:22 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-28 15:41 [PATCH v2 00/14] md: cleanup on direct access to bvec table Ming Lei
2017-02-28 15:41 ` [PATCH v2 01/13] block: introduce bio_segments_all() Ming Lei
2017-02-28 15:41 ` [PATCH v2 02/13] md: raid1/raid10: don't handle failure of bio_add_page() Ming Lei
2017-02-28 15:41 ` [PATCH v2 03/13] md: move two macros into md.h Ming Lei
2017-02-28 15:41 ` [PATCH v2 04/13] md: prepare for managing resync I/O pages in clean way Ming Lei
2017-02-28 23:30 ` Shaohua Li
2017-03-02 2:09 ` Ming Lei
2017-03-02 17:55 ` Shaohua Li
2017-03-03 1:54 ` Ming Lei
2017-02-28 15:41 ` [PATCH v2 05/13] md: raid1: simplify r1buf_pool_free() Ming Lei
2017-02-28 23:31 ` Shaohua Li
2017-03-02 2:11 ` Ming Lei
2017-03-02 17:49 ` Shaohua Li
2017-03-03 1:57 ` Ming Lei
2017-02-28 15:41 ` [PATCH v2 06/13] md: raid1: don't use bio's vec table to manage resync pages Ming Lei
2017-02-28 23:37 ` Shaohua Li
2017-03-02 2:25 ` Ming Lei
2017-03-02 17:48 ` Shaohua Li
2017-03-03 2:11 ` Ming Lei
2017-03-03 17:38 ` Shaohua Li
2017-02-28 15:41 ` [PATCH v2 07/13] md: raid1: retrieve page from pre-allocated resync page array Ming Lei
2017-02-28 15:41 ` [PATCH v2 08/13] md: raid1: use bio helper in process_checks() Ming Lei
2017-02-28 23:39 ` Shaohua Li
2017-02-28 15:41 ` [PATCH v2 09/13] md: raid1: use bio_segments_all() Ming Lei
2017-02-28 23:42 ` Shaohua Li
2017-03-02 2:34 ` Ming Lei
2017-03-02 7:52 ` Shaohua Li
2017-03-03 2:20 ` Ming Lei
2017-03-03 6:22 ` Ming Lei [this message]
2017-03-03 17:12 ` Shaohua Li
2017-02-28 15:41 ` [PATCH v2 10/13] md: raid10: refactor code of read reshape's .bi_end_io Ming Lei
2017-02-28 15:41 ` [PATCH v2 11/13] md: raid10: don't use bio's vec table to manage resync pages Ming Lei
2017-02-28 23:43 ` Shaohua Li
2017-02-28 15:41 ` [PATCH v2 12/13] md: raid10: retrieve page from preallocated resync page array Ming Lei
2017-02-28 15:41 ` [PATCH v2 13/13] md: raid10: avoid direct access to bvec table in handle_reshape_read_error Ming Lei
2017-02-28 23:46 ` Shaohua Li
2017-03-02 2:37 ` Ming Lei
2017-03-02 7:47 ` Shaohua Li
2017-03-03 2:30 ` Ming Lei
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='CACVXFVNRhekBMAnVN9co-jdkP=+5S+28CyFr9Z_nsJVmdxPxSg@mail.gmail.com' \
--to=tom.leiming@gmail.com \
--cc=axboe@fb.com \
--cc=hch@infradead.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-raid@vger.kernel.org \
--cc=shli@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).