]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Use text_version in map_file rather than major.minor.
authorNeil Brown <neilb@suse.de>
Sat, 12 Jul 2008 10:27:37 +0000 (20:27 +1000)
committerNeil Brown <neilb@suse.de>
Sat, 12 Jul 2008 10:27:37 +0000 (20:27 +1000)
Incremental.c
mapfile.c
mdadm.h
super0.c
super1.c

index d3f93a67ac2d93a11e63d1e07011a971cfef5dd6..6ac67ac22ffbb40016d082d22d5b94fc2e141bf5 100644 (file)
@@ -412,8 +412,7 @@ int Incremental(char *devname, int verbose, int runstop,
        }
        /* 6/ Make sure /var/run/mdadm.map contains this array. */
        map_update(&map, devnum,
-                  info.array.major_version,
-                  info.array.minor_version,
+                  info.text_version,
                   info.uuid, chosen_name);
 
        /* 7/ Is there enough devices to possibly start the array? */
@@ -647,8 +646,8 @@ void RebuildMap(void)
                                path = map_dev(MD_MAJOR, md->devnum, 0);
                        else
                                path = map_dev(mdp, (-1-md->devnum)<< 6, 0);
-                       map_add(&map, md->devnum, st->ss->major,
-                               st->minor_version,
+                       map_add(&map, md->devnum,
+                               info.text_version,
                                info.uuid, path ? : "/unknown");
                        st->ss->free_super(st);
                        break;
index 746073d059c508685a3743af79b995af36b05d6a..cf2ca2bf8a5837ba28456fb7a9cd32938e4294b0 100644 (file)
--- a/mapfile.c
+++ b/mapfile.c
@@ -33,8 +33,8 @@
  * also allows the array device name to be easily found.
  *
  * The map file is line based with space separated fields.  The fields are:
- *  Device id  -  mdX or mdpX  where is a number.
- *  metadata   -  0.90 1.0 1.1 1.2
+ *  Device id  -  mdX or mdpX  where is a number.
+ *  metadata   -  0.90 1.0 1.1 1.2 ddf ...
  *  UUID       -  uuid of the array
  *  path       -  path where device created: /dev/md/home
  *
@@ -62,7 +62,7 @@ int map_write(struct map_ent *mel)
                        fprintf(f, "mdp%d ", -1-mel->devnum);
                else
                        fprintf(f, "md%d ", mel->devnum);
-               fprintf(f, "%d.%d ", mel->major, mel->minor);
+               fprintf(f, "%s ", mel->metadata);
                fprintf(f, "%08x:%08x:%08x:%08x ", mel->uuid[0],
                        mel->uuid[1], mel->uuid[2], mel->uuid[3]);
                fprintf(f, "%s\n", mel->path);
@@ -87,13 +87,12 @@ int map_write(struct map_ent *mel)
 }
 
 void map_add(struct map_ent **melp,
-           int devnum, int major, int minor, int uuid[4], char *path)
+           int devnum, char *metadata, int uuid[4], char *path)
 {
        struct map_ent *me = malloc(sizeof(*me));
 
        me->devnum = devnum;
-       me->major = major;
-       me->minor = minor;
+       strcpy(me->metadata, metadata);
        memcpy(me->uuid, uuid, 16);
        me->path = strdup(path);
        me->next = *melp;
@@ -105,7 +104,8 @@ void map_read(struct map_ent **melp)
        FILE *f;
        char buf[8192];
        char path[200];
-       int devnum, major, minor, uuid[4];
+       int devnum, uuid[4];
+       char metadata[30];
        char nam[4];
 
        *melp = NULL;
@@ -117,12 +117,12 @@ void map_read(struct map_ent **melp)
                return;
 
        while (fgets(buf, sizeof(buf), f)) {
-               if (sscanf(buf, " md%1[p]%d %d.%d %x:%x:%x:%x %200s",
-                          nam, &devnum, &major, &minor, uuid, uuid+1,
+               if (sscanf(buf, " md%1[p]%d %s %x:%x:%x:%x %200s",
+                          nam, &devnum, metadata, uuid, uuid+1,
                           uuid+2, uuid+3, path) == 9) {
                        if (nam[0] == 'p')
                                devnum = -1 - devnum;
-                       map_add(melp, devnum, major, minor, uuid, path);
+                       map_add(melp, devnum, metadata, uuid, path);
                }
        }
        fclose(f);
@@ -138,7 +138,7 @@ void map_free(struct map_ent *map)
        }
 }
 
-int map_update(struct map_ent **mpp, int devnum, int major, int minor,
+int map_update(struct map_ent **mpp, int devnum, char *metadata,
               int *uuid, char *path)
 {
        struct map_ent *map, *mp;
@@ -151,15 +151,14 @@ int map_update(struct map_ent **mpp, int devnum, int major, int minor,
 
        for (mp = map ; mp ; mp=mp->next)
                if (mp->devnum == devnum) {
-                       mp->major = major;
-                       mp->minor = minor;
+                       strcpy(mp->metadata, metadata);
                        memcpy(mp->uuid, uuid, 16);
                        free(mp->path);
                        mp->path = strdup(path);
                        break;
                }
        if (!mp)
-               map_add(&map, devnum, major, minor, uuid, path);
+               map_add(&map, devnum, metadata, uuid, path);
        *mpp = NULL;
        rv = map_write(map);
        map_free(map);
diff --git a/mdadm.h b/mdadm.h
index 75e66dfba2bf17be16b16c03f6c0add5957f7fce..041e53d69ccaf890cc4dd0425322963228ebb046 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -301,11 +301,11 @@ extern int mddev_busy(int devnum);
 struct map_ent {
        struct map_ent *next;
        int     devnum;
-       int     major,minor;
+       char    metadata[20];
        int     uuid[4];
        char    *path;
 };
-extern int map_update(struct map_ent **mpp, int devnum, int major, int minor,
+extern int map_update(struct map_ent **mpp, int devnum, char *metadata,
                      int uuid[4], char *path);
 extern struct map_ent *map_by_uuid(struct map_ent **map, int uuid[4]);
 extern void map_read(struct map_ent **melp);
@@ -313,7 +313,7 @@ extern int map_write(struct map_ent *mel);
 extern void map_delete(struct map_ent **mapp, int devnum);
 extern void map_free(struct map_ent *map);
 extern void map_add(struct map_ent **melp,
-                   int devnum, int major, int minor, int uuid[4], char *path);
+                   int devnum, char *metadata, int uuid[4], char *path);
 
 /* various details can be requested */
 #define        GET_LEVEL       1
index e8cc3f3f62a7b7ea218b5a2c6010cd3a85b91680..47b95ecf89ec300d5b652b1b5032a2242579877f 100644 (file)
--- a/super0.c
+++ b/super0.c
@@ -369,6 +369,8 @@ static void getinfo_super0(struct supertype *st, struct mdinfo *info)
        info->events = md_event(sb);
        info->data_offset = 0;
 
+       sprintf(info->text_version, "0.%d", sb->minor_version);
+
        uuid_from_super0(st, info->uuid);
 
        if (sb->minor_version > 90 && (sb->reshape_position+1) != 0) {
index bebd5f961f2e2d8079e57f5f07ceb8d468e90483..d2d8d9539162cca770327960267b481f9390322b 100644 (file)
--- a/super1.c
+++ b/super1.c
@@ -531,6 +531,7 @@ static void getinfo_super1(struct supertype *st, struct mdinfo *info)
                info->disk.raid_disk = role;
        }
        info->events = __le64_to_cpu(sb->events);
+       sprintf(info->text_version, "1.%d", st->minor_version);
 
        memcpy(info->uuid, sb->set_uuid, 16);