From: Dan Williams Date: Sun, 10 Aug 2008 03:28:24 +0000 (-0700) Subject: imsm: ensure 'usable' remains clear until the disk is in_sync X-Git-Tag: mdadm-3.0-devel1~71 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=19859edc2d484a0fc05befa924a57cf576ab65bd;hp=d23fe9472d47e136a56fec17d072dab41e88e505;p=thirdparty%2Fmdadm.git imsm: ensure 'usable' remains clear until the disk is in_sync Signed-off-by: Dan Williams --- diff --git a/super-intel.c b/super-intel.c index 632ddd9a..b8beb8eb 100644 --- a/super-intel.c +++ b/super-intel.c @@ -2203,6 +2203,12 @@ static void imsm_set_disk(struct active_array *a, int n, int state) new_failure = 1; super->updates_pending++; } + /* check if in_sync */ + if ((state & DS_INSYNC) && !(status & USABLE_DISK)) { + status |= USABLE_DISK; + disk->status = __cpu_to_le32(status); + super->updates_pending++; + } /* the number of failures have changed, count up 'failed' to determine * degraded / failed status @@ -2511,7 +2517,7 @@ static void imsm_process_update(struct supertype *st, disk = &dl->disk; status = __le32_to_cpu(disk->status); status |= CONFIGURED_DISK; - status &= ~SPARE_DISK; + status &= ~(SPARE_DISK | USABLE_DISK); disk->status = __cpu_to_le32(status); /* count arrays using the victim in the metadata */