diff options
Diffstat (limited to 'drivers/md/raid10.c')
| -rw-r--r-- | drivers/md/raid10.c | 21 | 
1 files changed, 6 insertions, 15 deletions
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index e793ab6b3570..940f2f365461 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -914,7 +914,7 @@ static int raid10_congested(struct mddev *mddev, int bits)  	struct r10conf *conf = mddev->private;  	int i, ret = 0; -	if ((bits & (1 << BDI_async_congested)) && +	if ((bits & (1 << WB_async_congested)) &&  	    conf->pending_count >= max_queued_requests)  		return 1; @@ -2099,17 +2099,10 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)  		tbio->bi_rw = WRITE;  		tbio->bi_private = r10_bio;  		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; +		bio_copy_data(tbio, fbio); +  		d = r10_bio->devs[i].devnum;  		atomic_inc(&conf->mirrors[d].rdev->nr_pending);  		atomic_inc(&r10_bio->remaining); @@ -2124,17 +2117,14 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)  	 * that are active  	 */  	for (i = 0; i < conf->copies; i++) { -		int j, d; +		int d;  		tbio = r10_bio->devs[i].repl_bio;  		if (!tbio || !tbio->bi_end_io)  			continue;  		if (r10_bio->devs[i].bio->bi_end_io != end_sync_write  		    && r10_bio->devs[i].bio != fbio) -			for (j = 0; j < vcnt; j++) -				memcpy(page_address(tbio->bi_io_vec[j].bv_page), -				       page_address(fbio->bi_io_vec[j].bv_page), -				       PAGE_SIZE); +			bio_copy_data(tbio, fbio);  		d = r10_bio->devs[i].devnum;  		atomic_inc(&r10_bio->remaining);  		md_sync_acct(conf->mirrors[d].replacement->bdev, @@ -4156,6 +4146,7 @@ static int raid10_start_reshape(struct mddev *mddev)  	clear_bit(MD_RECOVERY_SYNC, &mddev->recovery);  	clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); +	clear_bit(MD_RECOVERY_DONE, &mddev->recovery);  	set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery);  	set_bit(MD_RECOVERY_RUNNING, &mddev->recovery);  |