aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/raid10.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2015-05-07 02:34:20 -0400
committerNeilBrown <neilb@suse.de>2015-06-16 19:59:57 -0400
commitc31df25f20e35add6a453328c61eca15434fae18 (patch)
tree8d1d16c7ed67de46d22b6c959444b28c571eeb55 /drivers/md/raid10.c
parent0f57d86787d8b1076ea8f9cbdddda2a46d534a27 (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.c18
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,