diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2015-05-07 02:34:20 -0400 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2015-06-16 19:59:57 -0400 |
commit | c31df25f20e35add6a453328c61eca15434fae18 (patch) | |
tree | 8d1d16c7ed67de46d22b6c959444b28c571eeb55 /drivers/md/raid10.c | |
parent | 0f57d86787d8b1076ea8f9cbdddda2a46d534a27 (diff) |
md/raid10: make sync_request_write() call bio_copy_data()
Refactor sync_request_write() of md/raid10 to use bio_copy_data()
instead of open coding bio_vec iterations.
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Neil Brown <neilb@suse.de>
Cc: linux-raid@vger.kernel.org
Reviewed-by: Christoph Hellwig <hch@lst.de>
Acked-by: NeilBrown <neilb@suse.de>
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
[dpark: add more description in commit message]
Signed-off-by: Dongsu Park <dpark@posteo.net>
Signed-off-by: Ming Lin <mlin@kernel.org>
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/raid10.c')
-rw-r--r-- | drivers/md/raid10.c | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index f55c3f35b746..03f460a1de60 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c | |||
@@ -2099,17 +2099,10 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio) | |||
2099 | tbio->bi_rw = WRITE; | 2099 | tbio->bi_rw = WRITE; |
2100 | tbio->bi_private = r10_bio; | 2100 | tbio->bi_private = r10_bio; |
2101 | tbio->bi_iter.bi_sector = r10_bio->devs[i].addr; | 2101 | tbio->bi_iter.bi_sector = r10_bio->devs[i].addr; |
2102 | |||
2103 | for (j=0; j < vcnt ; j++) { | ||
2104 | tbio->bi_io_vec[j].bv_offset = 0; | ||
2105 | tbio->bi_io_vec[j].bv_len = PAGE_SIZE; | ||
2106 | |||
2107 | memcpy(page_address(tbio->bi_io_vec[j].bv_page), | ||
2108 | page_address(fbio->bi_io_vec[j].bv_page), | ||
2109 | PAGE_SIZE); | ||
2110 | } | ||
2111 | tbio->bi_end_io = end_sync_write; | 2102 | tbio->bi_end_io = end_sync_write; |
2112 | 2103 | ||
2104 | bio_copy_data(tbio, fbio); | ||
2105 | |||
2113 | d = r10_bio->devs[i].devnum; | 2106 | d = r10_bio->devs[i].devnum; |
2114 | atomic_inc(&conf->mirrors[d].rdev->nr_pending); | 2107 | atomic_inc(&conf->mirrors[d].rdev->nr_pending); |
2115 | atomic_inc(&r10_bio->remaining); | 2108 | atomic_inc(&r10_bio->remaining); |
@@ -2124,17 +2117,14 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio) | |||
2124 | * that are active | 2117 | * that are active |
2125 | */ | 2118 | */ |
2126 | for (i = 0; i < conf->copies; i++) { | 2119 | for (i = 0; i < conf->copies; i++) { |
2127 | int j, d; | 2120 | int d; |
2128 | 2121 | ||
2129 | tbio = r10_bio->devs[i].repl_bio; | 2122 | tbio = r10_bio->devs[i].repl_bio; |
2130 | if (!tbio || !tbio->bi_end_io) | 2123 | if (!tbio || !tbio->bi_end_io) |
2131 | continue; | 2124 | continue; |
2132 | if (r10_bio->devs[i].bio->bi_end_io != end_sync_write | 2125 | if (r10_bio->devs[i].bio->bi_end_io != end_sync_write |
2133 | && r10_bio->devs[i].bio != fbio) | 2126 | && r10_bio->devs[i].bio != fbio) |
2134 | for (j = 0; j < vcnt; j++) | 2127 | bio_copy_data(tbio, fbio); |
2135 | memcpy(page_address(tbio->bi_io_vec[j].bv_page), | ||
2136 | page_address(fbio->bi_io_vec[j].bv_page), | ||
2137 | PAGE_SIZE); | ||
2138 | d = r10_bio->devs[i].devnum; | 2128 | d = r10_bio->devs[i].devnum; |
2139 | atomic_inc(&r10_bio->remaining); | 2129 | atomic_inc(&r10_bio->remaining); |
2140 | md_sync_acct(conf->mirrors[d].replacement->bdev, | 2130 | md_sync_acct(conf->mirrors[d].replacement->bdev, |