Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c31df25f authored by Kent Overstreet's avatar Kent Overstreet Committed by NeilBrown
Browse files

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: default avatarChristoph Hellwig <hch@lst.de>
Acked-by: default avatarNeilBrown <neilb@suse.de>
Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
[dpark: add more description in commit message]
Signed-off-by: default avatarDongsu Park <dpark@posteo.net>
Signed-off-by: default avatarMing Lin <mlin@kernel.org>
Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent 0f57d867
Loading
Loading
Loading
Loading
+4 −14
Original line number Original line Diff line number Diff line
@@ -2099,17 +2099,10 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
		tbio->bi_rw = WRITE;
		tbio->bi_rw = WRITE;
		tbio->bi_private = r10_bio;
		tbio->bi_private = r10_bio;
		tbio->bi_iter.bi_sector = r10_bio->devs[i].addr;
		tbio->bi_iter.bi_sector = r10_bio->devs[i].addr;

		for (j=0; j < vcnt ; j++) {
			tbio->bi_io_vec[j].bv_offset = 0;
			tbio->bi_io_vec[j].bv_len = PAGE_SIZE;

			memcpy(page_address(tbio->bi_io_vec[j].bv_page),
			       page_address(fbio->bi_io_vec[j].bv_page),
			       PAGE_SIZE);
		}
		tbio->bi_end_io = end_sync_write;
		tbio->bi_end_io = end_sync_write;


		bio_copy_data(tbio, fbio);

		d = r10_bio->devs[i].devnum;
		d = r10_bio->devs[i].devnum;
		atomic_inc(&conf->mirrors[d].rdev->nr_pending);
		atomic_inc(&conf->mirrors[d].rdev->nr_pending);
		atomic_inc(&r10_bio->remaining);
		atomic_inc(&r10_bio->remaining);
@@ -2124,17 +2117,14 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
	 * that are active
	 * that are active
	 */
	 */
	for (i = 0; i < conf->copies; i++) {
	for (i = 0; i < conf->copies; i++) {
		int j, d;
		int d;


		tbio = r10_bio->devs[i].repl_bio;
		tbio = r10_bio->devs[i].repl_bio;
		if (!tbio || !tbio->bi_end_io)
		if (!tbio || !tbio->bi_end_io)
			continue;
			continue;
		if (r10_bio->devs[i].bio->bi_end_io != end_sync_write
		if (r10_bio->devs[i].bio->bi_end_io != end_sync_write
		    && r10_bio->devs[i].bio != fbio)
		    && r10_bio->devs[i].bio != fbio)
			for (j = 0; j < vcnt; j++)
			bio_copy_data(tbio, fbio);
				memcpy(page_address(tbio->bi_io_vec[j].bv_page),
				       page_address(fbio->bi_io_vec[j].bv_page),
				       PAGE_SIZE);
		d = r10_bio->devs[i].devnum;
		d = r10_bio->devs[i].devnum;
		atomic_inc(&r10_bio->remaining);
		atomic_inc(&r10_bio->remaining);
		md_sync_acct(conf->mirrors[d].replacement->bdev,
		md_sync_acct(conf->mirrors[d].replacement->bdev,