|
@@ -2552,8 +2552,10 @@ handle_failed_stripe(struct r5conf *conf, struct stripe_head *sh,
|
|
|
if (!test_bit(R5_Wantfill, &sh->dev[i].flags) &&
|
|
|
(!test_bit(R5_Insync, &sh->dev[i].flags) ||
|
|
|
test_bit(R5_ReadError, &sh->dev[i].flags))) {
|
|
|
+ spin_lock_irq(&sh->stripe_lock);
|
|
|
bi = sh->dev[i].toread;
|
|
|
sh->dev[i].toread = NULL;
|
|
|
+ spin_unlock_irq(&sh->stripe_lock);
|
|
|
if (test_and_clear_bit(R5_Overlap, &sh->dev[i].flags))
|
|
|
wake_up(&conf->wait_for_overlap);
|
|
|
if (bi) s->to_read--;
|