]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Query.c
mdadm: add map_num_s()
[thirdparty/mdadm.git] / Query.c
diff --git a/Query.c b/Query.c
index b761c470b268702d6191f93a2507588c8b68f126..adcd231e051b19fa5fb5b418d5af6f2980a53dc5 100644 (file)
--- a/Query.c
+++ b/Query.c
@@ -38,7 +38,6 @@ int Query(char *dev)
        int level, raid_disks, spare_disks;
        struct mdinfo info;
        struct mdinfo *sra;
-       mdu_array_info_t array;
        struct supertype *st = NULL;
        unsigned long long larray_size;
        struct stat stb;
@@ -65,8 +64,13 @@ int Query(char *dev)
                raid_disks = sra->array.raid_disks;
                spare_disks = sra->array.spare_disks;
        } else {
+               mdu_array_info_t array;
+
                if (md_get_array_info(fd, &array) < 0) {
                        ioctlerr = errno;
+                       level = -1;
+                       raid_disks = -1;
+                       spare_disks = -1;
                } else {
                        level = array.level;
                        raid_disks = array.raid_disks;
@@ -81,16 +85,15 @@ int Query(char *dev)
 
        if (ioctlerr == ENODEV)
                printf("%s: is an md device which is not active\n", dev);
+       else if (ioctlerr && major(stb.st_rdev) != MD_MAJOR)
+               printf("%s: is not an md array\n", dev);
        else if (ioctlerr)
                printf("%s: is an md device, but gives \"%s\" when queried\n",
                       dev, strerror(ioctlerr));
-       else if (staterr)
-               printf("%s: is not a valid md device, returning %s\n",
-                      dev, strerror(ioctlerr));
        else {
                printf("%s: %s %s %d devices, %d spare%s. Use mdadm --detail for more detail.\n",
                       dev, human_size_brief(larray_size,IEC),
-                      map_num(pers, level), raid_disks,
+                      map_num_s(pers, level), raid_disks,
                       spare_disks, spare_disks == 1 ? "" : "s");
        }
        st = guess_super(fd);
@@ -111,7 +114,7 @@ int Query(char *dev)
                        disc.number = info.disk.number;
                        activity = "undetected";
                        if (mddev && (fd = open(mddev, O_RDONLY))>=0) {
-                               if (md_get_array_info(fd, &array) >= 0) {
+                               if (md_array_active(fd)) {
                                        if (md_get_disk_info(fd, &disc) >= 0 &&
                                            makedev((unsigned)disc.major,(unsigned)disc.minor) == stb.st_rdev)
                                                activity = "active";
@@ -128,7 +131,7 @@ int Query(char *dev)
                       dev,
                       info.disk.number, info.array.raid_disks,
                       activity,
-                      map_num(pers, info.array.level),
+                      map_num_s(pers, info.array.level),
                       mddev);
                if (st->ss == &super0)
                        put_md_name(mddev);