]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Teach sysfs_add_disk() callers to use ->recovery_start versus 'insync' parameter
authorDan Williams <dan.j.williams@intel.com>
Mon, 21 Dec 2009 18:26:21 +0000 (11:26 -0700)
committerDan Williams <dan.j.williams@intel.com>
Mon, 21 Dec 2009 18:26:21 +0000 (11:26 -0700)
Also fixup 'in_sync' versus 'insync' typo.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Assemble.c
Manage.c
managemon.c
mdadm.h
super-ddf.c
super-intel.c
sysfs.c
util.c

index 014d644b42667a5755b2edb5736c15d9775f360b..560e2fe288e0ab2954adf91164fda232b8954228 100644 (file)
@@ -1286,7 +1286,7 @@ int assemble_container_content(struct supertype *st, int mdfd,
                sysfs_free(sra);
 
        for (dev = content->devs; dev; dev = dev->next)
-               if (sysfs_add_disk(content, dev, 1) == 0)
+               if (sysfs_add_disk(content, dev) == 0)
                        working++;
                else if (errno == EEXIST)
                        preexist++;
index fb9b9723bac28d0f9e8df72f2035729fe34a0004..6f0a6a203f1d28beb4c493d72f055a5494cebebe 100644 (file)
--- a/Manage.c
+++ b/Manage.c
@@ -696,7 +696,8 @@ int Manage_subdevs(char *devname, int fd,
                                tst->ss->getinfo_super(tst, &new_mdi);
                                new_mdi.disk.major = disc.major;
                                new_mdi.disk.minor = disc.minor;
-                               if (sysfs_add_disk(sra, &new_mdi, 0) != 0) {
+                               new_mdi.recovery_start = 0;
+                               if (sysfs_add_disk(sra, &new_mdi) != 0) {
                                        fprintf(stderr, Name ": add new device to external metadata"
                                                " failed for %s\n", dv->devname);
                                        close(container_fd);
index e3350778b9fcb0381b052588c8afac62221492fe..3a20e2b6e7263a1bf1e7ac3aa269f8d0c83475a3 100644 (file)
@@ -410,7 +410,7 @@ static void manage_member(struct mdstat_ent *mdstat,
                        newd = malloc(sizeof(*newd));
                        if (!newd)
                                continue;
-                       if (sysfs_add_disk(&newa->info, d, 0) < 0) {
+                       if (sysfs_add_disk(&newa->info, d) < 0) {
                                free(newd);
                                continue;
                        }
diff --git a/mdadm.h b/mdadm.h
index 9cf15c41b1b0c1a483a01d9f48bbc54b1e473a1b..af6d91b273aaa3d93491a5c27e36adcfbbdd264a 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -385,8 +385,7 @@ extern int sysfs_get_str(struct mdinfo *sra, struct mdinfo *dev,
                         char *name, char *val, int size);
 extern int sysfs_set_safemode(struct mdinfo *sra, unsigned long ms);
 extern int sysfs_set_array(struct mdinfo *info, int vers);
-extern int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd,
-                         int in_sync);
+extern int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd);
 extern int sysfs_disk_to_scsi_id(int fd, __u32 *id);
 extern int sysfs_unique_holder(int devnum, long rdev);
 extern int load_sys(char *path, char *buf);
index 8c3f4bebffe195cc7baea9c71ced1188f896c85c..14f83304bde10c8f4ddff2bc17d5f4eb1d08dce5 100644 (file)
@@ -2968,6 +2968,7 @@ static struct mdinfo *container_content_ddf(struct supertype *st)
                        dev->disk.minor = d->minor;
                        dev->disk.raid_disk = i;
                        dev->disk.state = (1<<MD_DISK_SYNC)|(1<<MD_DISK_ACTIVE);
+                       dev->recovery_start = MaxSector;
 
                        dev->events = __be32_to_cpu(ddf->primary.seq);
                        dev->data_offset = __be64_to_cpu(vc->lba_offset[i]);
@@ -3547,6 +3548,7 @@ static struct mdinfo *ddf_activate_spare(struct active_array *a,
                        di->disk.major = dl->major;
                        di->disk.minor = dl->minor;
                        di->disk.state = 0;
+                       di->recovery_start = 0;
                        di->data_offset = pos;
                        di->component_size = a->info.component_size;
                        di->container_member = dl->pdnum;
index 4bb199031f05771d5e5a16ee2c04fe0979458193..9f879c515b3a287d9a70d852f14f4efe63726b23 100644 (file)
@@ -3876,6 +3876,7 @@ static struct mdinfo *container_content_imsm(struct supertype *st)
                        info_d->disk.major = d->major;
                        info_d->disk.minor = d->minor;
                        info_d->disk.raid_disk = slot;
+                       info_d->recovery_start = MaxSector;
 
                        this->array.working_disks++;
 
@@ -4454,6 +4455,7 @@ static struct mdinfo *imsm_activate_spare(struct active_array *a,
                di->disk.major = dl->major;
                di->disk.minor = dl->minor;
                di->disk.state = 0;
+               di->recovery_start = 0;
                di->data_offset = __le32_to_cpu(map->pba_of_lba0);
                di->component_size = a->info.component_size;
                di->container_member = inst;
diff --git a/sysfs.c b/sysfs.c
index 35dfbd450bc9742ca25f16a72c7075bef4cfe858..8fdb52998409303e3874f84b6fe5a1eea8820aee 100644 (file)
--- a/sysfs.c
+++ b/sysfs.c
@@ -572,7 +572,7 @@ int sysfs_set_array(struct mdinfo *info, int vers)
        return rv;
 }
 
-int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd, int in_sync)
+int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd)
 {
        char dv[100];
        char nm[100];
@@ -598,11 +598,11 @@ int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd, int in_sync)
        rv = sysfs_set_num(sra, sd, "offset", sd->data_offset);
        rv |= sysfs_set_num(sra, sd, "size", (sd->component_size+1) / 2);
        if (sra->array.level != LEVEL_CONTAINER) {
-               if (in_sync)
+               if (sd->recovery_start == MaxSector)
                        /* This can correctly fail if array isn't started,
                         * yet, so just ignore status for now.
                         */
-                       sysfs_set_str(sra, sd, "state", "in_sync");
+                       sysfs_set_str(sra, sd, "state", "insync");
                rv |= sysfs_set_num(sra, sd, "slot", sd->disk.raid_disk);
        }
        return rv;
diff --git a/util.c b/util.c
index d49a4edd4a100ed0b6ecc303f2a3f003331ea3cf..05be64c6add692959d89e94ab00cd83963d2aa02 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1162,8 +1162,11 @@ int add_disk(int mdfd, struct supertype *st,
        int rv;
 #ifndef MDASSEMBLE
        if (st->ss->external) {
-               rv = sysfs_add_disk(sra, info,
-                                   info->disk.state & (1<<MD_DISK_SYNC));
+               if (info->disk.state & (1<<MD_DISK_SYNC))
+                       info->recovery_start = MaxSector;
+               else
+                       info->recovery_start = 0;
+               rv = sysfs_add_disk(sra, info);
                if (! rv) {
                        struct mdinfo *sd2;
                        for (sd2 = sra->devs; sd2; sd2=sd2->next)