diff options
Diffstat (limited to 'drivers/md/raid5.c')
| -rw-r--r-- | drivers/md/raid5.c | 15 | 
1 files changed, 6 insertions, 9 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 2ceb338b094b..0fc2748aaf95 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -3381,9 +3381,8 @@ handle_failed_stripe(struct r5conf *conf, struct stripe_head *sh,  			sh->dev[i].sector + STRIPE_SECTORS) {  			struct bio *nextbi = r5_next_bio(bi, sh->dev[i].sector); -			bi->bi_status = BLK_STS_IOERR;  			md_write_end(conf->mddev); -			bio_endio(bi); +			bio_io_error(bi);  			bi = nextbi;  		}  		if (bitmap_end) @@ -3403,9 +3402,8 @@ handle_failed_stripe(struct r5conf *conf, struct stripe_head *sh,  		       sh->dev[i].sector + STRIPE_SECTORS) {  			struct bio *bi2 = r5_next_bio(bi, sh->dev[i].sector); -			bi->bi_status = BLK_STS_IOERR;  			md_write_end(conf->mddev); -			bio_endio(bi); +			bio_io_error(bi);  			bi = bi2;  		} @@ -3429,8 +3427,7 @@ handle_failed_stripe(struct r5conf *conf, struct stripe_head *sh,  				struct bio *nextbi =  					r5_next_bio(bi, sh->dev[i].sector); -				bi->bi_status = BLK_STS_IOERR; -				bio_endio(bi); +				bio_io_error(bi);  				bi = nextbi;  			}  		} @@ -6237,6 +6234,8 @@ static void raid5_do_work(struct work_struct *work)  	pr_debug("%d stripes handled\n", handled);  	spin_unlock_irq(&conf->device_lock); + +	async_tx_issue_pending_all();  	blk_finish_plug(&plug);  	pr_debug("--- raid5worker inactive\n"); @@ -7951,12 +7950,10 @@ static void end_reshape(struct r5conf *conf)  {  	if (!test_bit(MD_RECOVERY_INTR, &conf->mddev->recovery)) { -		struct md_rdev *rdev;  		spin_lock_irq(&conf->device_lock);  		conf->previous_raid_disks = conf->raid_disks; -		rdev_for_each(rdev, conf->mddev) -			rdev->data_offset = rdev->new_data_offset; +		md_finish_reshape(conf->mddev);  		smp_wmb();  		conf->reshape_progress = MaxSector;  		conf->mddev->reshape_position = MaxSector;  | 
