From b56a27c5cbd9cce5a0aa7d0c152d1bbdc40826c8 Mon Sep 17 00:00:00 2001 From: Jonathan E Brassow Date: Wed, 7 Mar 2012 19:09:47 +0000 Subject: [PATCH] --- yaml --- r: 288331 b: refs/heads/master c: 3aa3b2b2b1edb813dc5342d0108befc39541542d h: refs/heads/master i: 288329: c133e26685c4a579fd50c6925f5cec4382a67cfa 288327: 9d2c61fcc4d2c1a94c18ecc36114535422883754 v: v3 --- [refs] | 2 +- trunk/drivers/md/dm-raid.c | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 802f4e164173..5dc81ea5a9c8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: af63bcb817cf708f53bcae6edc2e3fb7dd7d8051 +refs/heads/master: 3aa3b2b2b1edb813dc5342d0108befc39541542d diff --git a/trunk/drivers/md/dm-raid.c b/trunk/drivers/md/dm-raid.c index 86cb7e5d83d5..f53bb389c18f 100644 --- a/trunk/drivers/md/dm-raid.c +++ b/trunk/drivers/md/dm-raid.c @@ -668,7 +668,14 @@ static int super_load(struct md_rdev *rdev, struct md_rdev *refdev) return ret; sb = page_address(rdev->sb_page); - if (sb->magic != cpu_to_le32(DM_RAID_MAGIC)) { + + /* + * Two cases that we want to write new superblocks and rebuild: + * 1) New device (no matching magic number) + * 2) Device specified for rebuild (!In_sync w/ offset == 0) + */ + if ((sb->magic != cpu_to_le32(DM_RAID_MAGIC)) || + (!test_bit(In_sync, &rdev->flags) && !rdev->recovery_offset)) { super_sync(rdev->mddev, rdev); set_bit(FirstUse, &rdev->flags); @@ -745,11 +752,8 @@ static int super_init_validation(struct mddev *mddev, struct md_rdev *rdev) */ rdev_for_each(r, t, mddev) { if (!test_bit(In_sync, &r->flags)) { - if (!test_bit(FirstUse, &r->flags)) - DMERR("Superblock area of " - "rebuild device %d should have been " - "cleared.", r->raid_disk); - set_bit(FirstUse, &r->flags); + DMINFO("Device %d specified for rebuild: " + "Clearing superblock", r->raid_disk); rebuilds++; } else if (test_bit(FirstUse, &r->flags)) new_devs++;