diff options
Diffstat (limited to 'drivers/md/dm-raid.c')
-rw-r--r-- | drivers/md/dm-raid.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c index 86cb7e5d83d5..787022c18187 100644 --- a/drivers/md/dm-raid.c +++ b/drivers/md/dm-raid.c | |||
@@ -668,7 +668,14 @@ static int super_load(struct md_rdev *rdev, struct md_rdev *refdev) | |||
668 | return ret; | 668 | return ret; |
669 | 669 | ||
670 | sb = page_address(rdev->sb_page); | 670 | sb = page_address(rdev->sb_page); |
671 | if (sb->magic != cpu_to_le32(DM_RAID_MAGIC)) { | 671 | |
672 | /* | ||
673 | * Two cases that we want to write new superblocks and rebuild: | ||
674 | * 1) New device (no matching magic number) | ||
675 | * 2) Device specified for rebuild (!In_sync w/ offset == 0) | ||
676 | */ | ||
677 | if ((sb->magic != cpu_to_le32(DM_RAID_MAGIC)) || | ||
678 | (!test_bit(In_sync, &rdev->flags) && !rdev->recovery_offset)) { | ||
672 | super_sync(rdev->mddev, rdev); | 679 | super_sync(rdev->mddev, rdev); |
673 | 680 | ||
674 | set_bit(FirstUse, &rdev->flags); | 681 | set_bit(FirstUse, &rdev->flags); |
@@ -745,11 +752,8 @@ static int super_init_validation(struct mddev *mddev, struct md_rdev *rdev) | |||
745 | */ | 752 | */ |
746 | rdev_for_each(r, t, mddev) { | 753 | rdev_for_each(r, t, mddev) { |
747 | if (!test_bit(In_sync, &r->flags)) { | 754 | if (!test_bit(In_sync, &r->flags)) { |
748 | if (!test_bit(FirstUse, &r->flags)) | 755 | DMINFO("Device %d specified for rebuild: " |
749 | DMERR("Superblock area of " | 756 | "Clearing superblock", r->raid_disk); |
750 | "rebuild device %d should have been " | ||
751 | "cleared.", r->raid_disk); | ||
752 | set_bit(FirstUse, &r->flags); | ||
753 | rebuilds++; | 757 | rebuilds++; |
754 | } else if (test_bit(FirstUse, &r->flags)) | 758 | } else if (test_bit(FirstUse, &r->flags)) |
755 | new_devs++; | 759 | new_devs++; |
@@ -971,6 +975,7 @@ static int raid_ctr(struct dm_target *ti, unsigned argc, char **argv) | |||
971 | 975 | ||
972 | INIT_WORK(&rs->md.event_work, do_table_event); | 976 | INIT_WORK(&rs->md.event_work, do_table_event); |
973 | ti->private = rs; | 977 | ti->private = rs; |
978 | ti->num_flush_requests = 1; | ||
974 | 979 | ||
975 | mutex_lock(&rs->md.reconfig_mutex); | 980 | mutex_lock(&rs->md.reconfig_mutex); |
976 | ret = md_run(&rs->md); | 981 | ret = md_run(&rs->md); |