All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ming Lei <tom.leiming@gmail.com>
To: Shaohua Li <shli@kernel.org>, Jens Axboe <axboe@fb.com>,
	linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org,
	linux-block@vger.kernel.org,
	Christoph Hellwig <hch@infradead.org>, NeilBrown <neilb@suse.com>
Cc: Ming Lei <tom.leiming@gmail.com>
Subject: [PATCH 14/17] md: raid10: avoid direct access to bvec table in sync_request_write()
Date: Thu, 16 Feb 2017 19:45:44 +0800	[thread overview]
Message-ID: <1487245547-24384-15-git-send-email-tom.leiming@gmail.com> (raw)
In-Reply-To: <1487245547-24384-1-git-send-email-tom.leiming@gmail.com>

The cost is 256bytes(8*16*2) stack space, and just use the bio
helper to retrieve pages from bio.

Signed-off-by: Ming Lei <tom.leiming@gmail.com>
---
 drivers/md/raid10.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 5c698f3d3083..69fe2a3cef89 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -2036,6 +2036,8 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
 	int i, first;
 	struct bio *tbio, *fbio;
 	int vcnt;
+	struct bio_vec *bvl;
+	struct page *fbio_pages[RESYNC_PAGES], *tbio_pages[RESYNC_PAGES];
 
 	atomic_set(&r10_bio->remaining, 1);
 
@@ -2052,6 +2054,10 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
 	fbio->bi_iter.bi_size = r10_bio->sectors << 9;
 	fbio->bi_iter.bi_idx = 0;
 
+	/* the bio has been filled up in raid10_sync_request */
+	bio_for_each_segment_all(bvl, fbio, i)
+		fbio_pages[i] = bvl->bv_page;
+
 	vcnt = (r10_bio->sectors + (PAGE_SIZE >> 9) - 1) >> (PAGE_SHIFT - 9);
 	/* now find blocks with errors */
 	for (i=0 ; i < conf->copies ; i++) {
@@ -2072,12 +2078,17 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
 			 * All vec entries are PAGE_SIZE;
 			 */
 			int sectors = r10_bio->sectors;
+
+			/* the bio has been filled up in raid10_sync_request */
+			bio_for_each_segment_all(bvl, tbio, j)
+				tbio_pages[j] = bvl->bv_page;
+
 			for (j = 0; j < vcnt; j++) {
 				int len = PAGE_SIZE;
 				if (sectors < (len / 512))
 					len = sectors * 512;
-				if (memcmp(page_address(fbio->bi_io_vec[j].bv_page),
-					   page_address(tbio->bi_io_vec[j].bv_page),
+				if (memcmp(page_address(fbio_pages[j]),
+					   page_address(tbio_pages[j]),
 					   len))
 					break;
 				sectors -= len/512;
-- 
2.7.4

  parent reply	other threads:[~2017-02-16 11:45 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-16 11:45 [PATCH 00/17] md: cleanup on direct access to bvec table Ming Lei
2017-02-16 11:45 ` [PATCH 01/17] block: introduce bio_segments_all() Ming Lei
2017-02-16 11:45 ` [PATCH 02/17] block: introduce bio_remove_last_page() Ming Lei
2017-02-16 12:08   ` Johannes Thumshirn
2017-02-16 12:08     ` Johannes Thumshirn
2017-02-16 13:30     ` Ming Lei
2017-02-16 13:30       ` Ming Lei
2017-02-16 13:40       ` Johannes Thumshirn
2017-02-16 13:40         ` Johannes Thumshirn
2017-02-16 13:59         ` Ming Lei
2017-02-16 13:59           ` Ming Lei
2017-02-16 14:10           ` Johannes Thumshirn
2017-02-16 14:10             ` Johannes Thumshirn
2017-02-16 11:45 ` [PATCH 03/17] md: raid1/raid10: use bio_remove_last_page() Ming Lei
2017-02-16 11:45 ` [PATCH 04/17] md: introduce helpers for dealing with fetch/store preallocated pages in bio Ming Lei
2017-02-16 11:45 ` [PATCH 05/17] md: raid1/raid10: use the introduced helpers Ming Lei
2017-02-16 11:45 ` [PATCH 06/17] md: raid1/raid10: borrow .bi_error as pre-allocated page index Ming Lei
2017-02-16 11:45 ` [PATCH 07/17] md: raid1/raid10: don't use .bi_vcnt to check if all pages are added Ming Lei
2017-02-16 11:45 ` [PATCH 08/17] md: raid1: simplify r1buf_pool_free() Ming Lei
2017-02-16 11:45 ` [PATCH 09/17] md: raid1/raid10: use bio helper in *_pool_free Ming Lei
2017-02-16 11:45 ` [PATCH 10/17] md: raid1: remove direct access to bvec table in fix_sync_read_error Ming Lei
2017-02-16 11:45 ` [PATCH 11/17] md: raid1: use bio helper in process_checks() Ming Lei
2017-02-16 11:45 ` [PATCH 12/17] md: raid1: avoid direct access to bvec table " Ming Lei
2017-02-17  8:33   ` kbuild test robot
2017-02-17  8:33     ` kbuild test robot
2017-02-17  8:33     ` kbuild test robot
2017-02-16 11:45 ` [PATCH 13/17] md: raid1: use bio_segments_all() Ming Lei
2017-02-16 12:35   ` Johannes Thumshirn
2017-02-16 12:35     ` Johannes Thumshirn
2017-02-16 13:32     ` Ming Lei
2017-02-16 13:32       ` Ming Lei
2017-02-16 13:34       ` Johannes Thumshirn
2017-02-16 13:34         ` Johannes Thumshirn
2017-02-16 13:38         ` Ming Lei
2017-02-16 13:38           ` Ming Lei
2017-02-16 11:45 ` Ming Lei [this message]
2017-02-16 11:45 ` [PATCH 15/17] md: raid10: avoid direct access to bvec table in fix_recovery_read_error Ming Lei
2017-02-16 11:45 ` [PATCH 16/17] md: raid10: avoid direct access to bvec table in reshape_request Ming Lei
2017-02-16 11:45 ` [PATCH 17/17] md: raid10: avoid direct access to bvec table in handle_reshape_read_error Ming Lei
2017-02-16 22:16 ` [PATCH 00/17] md: cleanup on direct access to bvec table Shaohua Li
2017-02-17  1:25   ` Ming Lei
2017-02-17  1:25     ` Ming Lei
2017-02-17  4:16     ` Shaohua Li
2017-02-17  4:16       ` Shaohua Li

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=1487245547-24384-15-git-send-email-tom.leiming@gmail.com \
    --to=tom.leiming@gmail.com \
    --cc=axboe@fb.com \
    --cc=hch@infradead.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-raid@vger.kernel.org \
    --cc=neilb@suse.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.