From d95498ca34e13e8e3b58b7456ee17028348d79ff Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Tue, 18 May 2010 10:17:09 +1000 Subject: [PATCH] --- yaml --- r: 197512 b: refs/heads/master c: be6800a73aa2f3dc14744c3b80e676d189789f04 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/md/md.c | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 91f47c639647..318f352c54fd 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a8707c08f4f718bb0ed65499d3f43201f6e41455 +refs/heads/master: be6800a73aa2f3dc14744c3b80e676d189789f04 diff --git a/trunk/drivers/md/md.c b/trunk/drivers/md/md.c index 9ef21d9b8e27..26b3d2879d93 100644 --- a/trunk/drivers/md/md.c +++ b/trunk/drivers/md/md.c @@ -1070,10 +1070,13 @@ static int super_90_validate(mddev_t *mddev, mdk_rdev_t *rdev) mddev->bitmap_info.default_offset; } else if (mddev->pers == NULL) { - /* Insist on good event counter while assembling */ + /* Insist on good event counter while assembling, except + * for spares (which don't need an event count) */ ++ev1; - if (ev1 < mddev->events) - return -EINVAL; + if (sb->disks[rdev->desc_nr].state & ( + (1<events) + return -EINVAL; } else if (mddev->bitmap) { /* if adding to array with a bitmap, then we can accept an * older device ... but not too old. @@ -1469,10 +1472,14 @@ static int super_1_validate(mddev_t *mddev, mdk_rdev_t *rdev) } } else if (mddev->pers == NULL) { - /* Insist of good event counter while assembling */ + /* Insist of good event counter while assembling, except for + * spares (which don't need an event count) */ ++ev1; - if (ev1 < mddev->events) - return -EINVAL; + if (rdev->desc_nr >= 0 && + rdev->desc_nr < le32_to_cpu(sb->max_dev) && + le16_to_cpu(sb->dev_roles[rdev->desc_nr]) < 0xfffe) + if (ev1 < mddev->events) + return -EINVAL; } else if (mddev->bitmap) { /* If adding to array with a bitmap, then we can accept an * older device, but not too old.