diff options
| -rw-r--r-- | drivers/md/raid5.c | 12 | 
1 files changed, 8 insertions, 4 deletions
| diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 472aedfb07cf..318bdae9b56c 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -3159,10 +3159,14 @@ static void handle_stripe(struct stripe_head *sh)  	/* check if the array has lost more than max_degraded devices and,  	 * if so, some requests might need to be failed.  	 */ -	if (s.failed > conf->max_degraded && s.to_read+s.to_write+s.written) -		handle_failed_stripe(conf, sh, &s, disks, &s.return_bi); -	if (s.failed > conf->max_degraded && s.syncing) -		handle_failed_sync(conf, sh, &s); +	if (s.failed > conf->max_degraded) { +		sh->check_state = 0; +		sh->reconstruct_state = 0; +		if (s.to_read+s.to_write+s.written) +			handle_failed_stripe(conf, sh, &s, disks, &s.return_bi); +		if (s.syncing) +			handle_failed_sync(conf, sh, &s); +	}  	/*  	 * might be able to return some write requests if the parity blocks | 
