]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Monitor.c
mdadm/clustermd_tests: add test case to test grow_resize cluster-raid10
[thirdparty/mdadm.git] / Monitor.c
index 497e3642507be147536d7743c0b8d0f11e350156..c7c05d27f093b7af6508599118f973f5347bc708 100644 (file)
--- a/Monitor.c
+++ b/Monitor.c
@@ -466,7 +466,7 @@ static int check_array(struct state *st, struct mdstat_ent *mdstat,
        int new_array = 0;
        int retval;
        int is_container = 0;
-       unsigned long array_only_flags = 0;
+       unsigned long redundancy_only_flags = 0;
 
        if (test)
                alert("TestMessage", dev, NULL, ainfo);
@@ -504,11 +504,11 @@ static int check_array(struct state *st, struct mdstat_ent *mdstat,
        if (md_get_array_info(fd, &array) < 0)
                goto disappeared;
 
-       if (!is_container)
-               array_only_flags |= GET_MISMATCH;
+       if (!is_container && map_name(pers, mse->level) > 0)
+               redundancy_only_flags |= GET_MISMATCH;
 
        sra = sysfs_read(-1, st->devnm, GET_LEVEL | GET_DISKS | GET_DEVS |
-                       GET_STATE | array_only_flags);
+                       GET_STATE | redundancy_only_flags);
 
        if (!sra)
                goto disappeared;
@@ -1058,7 +1058,7 @@ int Wait(char *dev)
 static char *clean_states[] = {
        "clear", "inactive", "readonly", "read-auto", "clean", NULL };
 
-int WaitClean(char *dev, int sock, int verbose)
+int WaitClean(char *dev, int verbose)
 {
        int fd;
        struct mdinfo *mdi;
@@ -1125,15 +1125,16 @@ int WaitClean(char *dev, int sock, int verbose)
                }
                if (rv < 0)
                        rv = 1;
-               else if (fping_monitor(sock) == 0 ||
-                        ping_monitor(mdi->text_version) == 0) {
+               else if (ping_monitor(mdi->text_version) == 0) {
                        /* we need to ping to close the window between array
                         * state transitioning to clean and the metadata being
                         * marked clean
                         */
                        rv = 0;
-               } else
+               } else {
                        rv = 1;
+                       pr_err("Error connecting monitor with %s\n", dev);
+               }
                if (rv && verbose)
                        pr_err("Error waiting for %s to be clean\n", dev);