|
@@ -2898,6 +2898,8 @@ static void handle_stripe5(struct stripe_head *sh)
|
|
|
|
|
|
for (i = conf->raid_disks; i--; ) {
|
|
|
set_bit(R5_Wantwrite, &sh->dev[i].flags);
|
|
|
+ set_bit(R5_LOCKED, &dev->flags);
|
|
|
+ s.locked++;
|
|
|
if (!test_and_set_bit(STRIPE_OP_IO, &sh->ops.pending))
|
|
|
sh->ops.count++;
|
|
|
}
|
|
@@ -2911,6 +2913,7 @@ static void handle_stripe5(struct stripe_head *sh)
|
|
|
conf->raid_disks);
|
|
|
s.locked += handle_write_operations5(sh, 1, 1);
|
|
|
} else if (s.expanded &&
|
|
|
+ s.locked == 0 &&
|
|
|
!test_bit(STRIPE_OP_POSTXOR, &sh->ops.pending)) {
|
|
|
clear_bit(STRIPE_EXPAND_READY, &sh->state);
|
|
|
atomic_dec(&conf->reshape_stripes);
|
|
@@ -4305,7 +4308,9 @@ static int run(mddev_t *mddev)
|
|
|
" disk %d\n", bdevname(rdev->bdev,b),
|
|
|
raid_disk);
|
|
|
working_disks++;
|
|
|
- }
|
|
|
+ } else
|
|
|
+ /* Cannot rely on bitmap to complete recovery */
|
|
|
+ conf->fullsync = 1;
|
|
|
}
|
|
|
|
|
|
/*
|