|
@@ -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
|