forked from luck/tmp_suning_uos_patched
Merge branch 'for-2.6.26' of git://neil.brown.name/md
* 'for-2.6.26' of git://neil.brown.name/md: Fix error paths if md_probe fails. Don't acknowlege that stripe-expand is complete until it really is. Ensure interrupted recovery completed properly (v1 metadata plus bitmap)
This commit is contained in:
commit
c6b96d195a
|
@ -3897,8 +3897,10 @@ static void autorun_devices(int part)
|
|||
|
||||
md_probe(dev, NULL, NULL);
|
||||
mddev = mddev_find(dev);
|
||||
if (!mddev) {
|
||||
printk(KERN_ERR
|
||||
if (!mddev || !mddev->gendisk) {
|
||||
if (mddev)
|
||||
mddev_put(mddev);
|
||||
printk(KERN_ERR
|
||||
"md: cannot allocate memory for md drive.\n");
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -2137,6 +2137,8 @@ static int run(mddev_t *mddev)
|
|||
!test_bit(In_sync, &disk->rdev->flags)) {
|
||||
disk->head_position = 0;
|
||||
mddev->degraded++;
|
||||
if (disk->rdev)
|
||||
conf->fullsync = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue
Block a user