]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Merge branch 'master' into scratch-3.0
authorNeilBrown <neilb@suse.de>
Sun, 2 Nov 2008 20:20:54 +0000 (07:20 +1100)
committerNeilBrown <neilb@suse.de>
Sun, 2 Nov 2008 20:20:54 +0000 (07:20 +1100)
1  2 
mapfile.c

diff --combined mapfile.c
index 955a1f98a243c1844b22a65d50909b42c9708c30,f616f159a670c4b0a153027f012771b1fffffc62..14b6df4cae765ab49182680c47a8d2c865f10ef0
+++ b/mapfile.c
@@@ -33,8 -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
   *
@@@ -53,7 -53,7 +53,7 @@@ int map_write(struct map_ent *mel
        f = fopen("/var/run/mdadm/map.new", "w");
        if (!f) {
                f = fopen("/var/run/mdadm.map.new", "w");
-               subdir = 1;
+               subdir = 0;
        }
        if (!f)
                return 0;
@@@ -62,7 -62,7 +62,7 @@@
                        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);
  }
  
  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;
@@@ -104,8 -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;
                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,
 -                         uuid+2, uuid+3, path) == 9) {
 -                      if (nam[0] == 'p')
 +              if (sscanf(buf, " %3[mdp]%d %s %x:%x:%x:%x %200s",
 +                         nam, &devnum, metadata, uuid, uuid+1,
 +                         uuid+2, uuid+3, path) == 8) {
 +                      if (strncmp(nam, "md", 2) != 0)
 +                              continue;
 +                      if (nam[2] == 'p')
                                devnum = -1 - devnum;
 -                      map_add(melp, devnum, major, minor, uuid, path);
 +                      map_add(melp, devnum, metadata, uuid, path);
                }
        }
        fclose(f);
@@@ -140,7 -138,7 +140,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;
  
        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);