|
@@ -4620,15 +4620,15 @@ static void break_stripe_batch_list(struct stripe_head *head_sh,
|
|
|
|
|
|
sh->check_state = head_sh->check_state;
|
|
sh->check_state = head_sh->check_state;
|
|
sh->reconstruct_state = head_sh->reconstruct_state;
|
|
sh->reconstruct_state = head_sh->reconstruct_state;
|
|
|
|
+ spin_lock_irq(&sh->stripe_lock);
|
|
|
|
+ sh->batch_head = NULL;
|
|
|
|
+ spin_unlock_irq(&sh->stripe_lock);
|
|
for (i = 0; i < sh->disks; i++) {
|
|
for (i = 0; i < sh->disks; i++) {
|
|
if (test_and_clear_bit(R5_Overlap, &sh->dev[i].flags))
|
|
if (test_and_clear_bit(R5_Overlap, &sh->dev[i].flags))
|
|
do_wakeup = 1;
|
|
do_wakeup = 1;
|
|
sh->dev[i].flags = head_sh->dev[i].flags &
|
|
sh->dev[i].flags = head_sh->dev[i].flags &
|
|
(~((1 << R5_WriteError) | (1 << R5_Overlap)));
|
|
(~((1 << R5_WriteError) | (1 << R5_Overlap)));
|
|
}
|
|
}
|
|
- spin_lock_irq(&sh->stripe_lock);
|
|
|
|
- sh->batch_head = NULL;
|
|
|
|
- spin_unlock_irq(&sh->stripe_lock);
|
|
|
|
if (handle_flags == 0 ||
|
|
if (handle_flags == 0 ||
|
|
sh->state & handle_flags)
|
|
sh->state & handle_flags)
|
|
set_bit(STRIPE_HANDLE, &sh->state);
|
|
set_bit(STRIPE_HANDLE, &sh->state);
|