]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Document this...
authorNeil Brown <neilb@suse.de>
Mon, 18 Jul 2005 01:30:42 +0000 (01:30 +0000)
committerNeil Brown <neilb@suse.de>
Mon, 18 Jul 2005 01:30:42 +0000 (01:30 +0000)
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Assemble.c
Query.c
mdadm.h
super0.c
super1.c

index 5bf58ab1f108953261eed61e772663b29631ce61..89086e38a6dba3ba6c98225a0db48a723b1426e4 100644 (file)
@@ -473,6 +473,7 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
                if (!devices[j].uptodate)
                        continue;
                info.disk.number = i;
+               info.disk.raid_disk = i;
                info.disk.state = desired_state;
 
                if (devices[j].uptodate &&
@@ -526,7 +527,17 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
 
        /* Almost ready to actually *do* something */
        if (!old_linux) {
-               if (ioctl(mdfd, SET_ARRAY_INFO, NULL) != 0) {
+               int rv;
+               if ((vers % 100) >= 1) { /* can use different versions */
+                       mdu_array_info_t inf;
+                       memset(&inf, 0, sizeof(inf));
+                       inf.major_version = st->ss->major;
+                       inf.minor_version = st->minor_version;
+                       rv = ioctl(mdfd, SET_ARRAY_INFO, &inf);
+               } else 
+                       rv = ioctl(mdfd, SET_ARRAY_INFO, NULL);
+
+               if (rv) {
                        fprintf(stderr, Name ": SET_ARRAY_INFO failed for %s: %s\n",
                                mddev, strerror(errno));
                        return 1;
diff --git a/Query.c b/Query.c
index 4c2c7bff00ed9369182b4a0ac369bcbc7be3e2b9..d2bfb0524672cacab8ed31add6ca5480afbb376a 100644 (file)
--- a/Query.c
+++ b/Query.c
@@ -105,26 +105,31 @@ int Query(char *dev)
        if (superror == 0) {
                /* array might be active... */
                st->ss->getinfo_super(&info, super);
-               mddev = get_md_name(info.array.md_minor);
-               disc.number = info.disk.number;
-               activity = "undetected";
-               if (mddev && (fd = open(mddev, O_RDONLY))>=0) {
-                       if (md_get_version(fd) >= 9000 &&       
-                           ioctl(fd, GET_ARRAY_INFO, &array)>= 0) {
-                               if (ioctl(fd, GET_DISK_INFO, &disc) >= 0 &&
-                                   makedev((unsigned)disc.major,(unsigned)disc.minor) == stb.st_rdev)
-                                       activity = "active";
-                               else
-                                       activity = "mismatch";
+               if (st->ss->major == 0) {
+                       mddev = get_md_name(info.array.md_minor);
+                       disc.number = info.disk.number;
+                       activity = "undetected";
+                       if (mddev && (fd = open(mddev, O_RDONLY))>=0) {
+                               if (md_get_version(fd) >= 9000 &&       
+                                   ioctl(fd, GET_ARRAY_INFO, &array)>= 0) {
+                                       if (ioctl(fd, GET_DISK_INFO, &disc) >= 0 &&
+                                           makedev((unsigned)disc.major,(unsigned)disc.minor) == stb.st_rdev)
+                                               activity = "active";
+                                       else
+                                               activity = "mismatch";
+                               }
+                               close(fd);
                        }
-                       close(fd);
+               } else {
+                       activity = "unknown";
+                       mddev = "array";
                }
-               printf("%s: device %d in %d device %s %s md%d.  Use mdadm --examine for more detail.\n",
+               printf("%s: device %d in %d device %s %s %s.  Use mdadm --examine for more detail.\n",
                       dev, 
                       info.disk.number, info.array.raid_disks,
                       activity,
                       map_num(pers, info.array.level),
-                      info.array.md_minor);
+                      mddev);
        }
        return 0;
 }
diff --git a/mdadm.h b/mdadm.h
index 1451c33c7014ff825da5f9ec6b02aab6db3bf75c..ac3feb13a00da9e3b479d9ab2127855b80be0e26 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -73,7 +73,7 @@ struct mdinfo {
        mdu_array_info_t        array;
        mdu_disk_info_t         disk;
        __u64                   events;
-       unsigned int            uuid[4];
+       int                     uuid[4];
 };
 
 #define Name "mdadm"
index ada598aa2ed35849837b1c11b3bdd3399d79c177..7e1b58d9a143ea41408a029b9910bea66ad5dd3d 100644 (file)
--- a/super0.c
+++ b/super0.c
@@ -205,6 +205,7 @@ static void getinfo_super0(struct mdinfo *info, void *sbv)
        info->disk.major = sb->this_disk.major;
        info->disk.minor = sb->this_disk.minor;
        info->disk.raid_disk = sb->this_disk.raid_disk;
+       info->disk.number = sb->this_disk.number;
 
        info->events = md_event(sb);
 
index 31cf9a378769b9584dccbed83fb2752976ae364d..6bd5ceca05c997b3cc0076d52e31da3834204045 100644 (file)
--- a/super1.c
+++ b/super1.c
@@ -278,7 +278,7 @@ static void getinfo_super1(struct mdinfo *info, void *sbv)
 
        info->disk.major = 0;
        info->disk.minor = 0;
-
+       info->disk.number = __le32_to_cpu(sb->dev_number);
        if (__le32_to_cpu(sb->dev_number) >= __le32_to_cpu(sb->max_dev) ||
            __le32_to_cpu(sb->max_dev) > 512)
                role = 0xfffe;
@@ -303,7 +303,7 @@ static void getinfo_super1(struct mdinfo *info, void *sbv)
 
        for (i=0; i< __le32_to_cpu(sb->max_dev); i++) {
                role = __le16_to_cpu(sb->dev_roles[i]);
-               if (role == 0xFFFF || role < info->array.raid_disks)
+               if (/*role == 0xFFFF || */role < info->array.raid_disks)
                        working++;
        }