linux-raid.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

  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).