]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Assemble: merge 'member' test into ident_matches.
authorNeilBrown <neilb@suse.de>
Mon, 22 Nov 2010 09:58:05 +0000 (20:58 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 22 Nov 2010 09:58:05 +0000 (20:58 +1100)
This is a more sensible place for it, gathering all the tests
together.

Signed-off-by: NeilBrown <neilb@suse.de>
Assemble.c

index 6602a0906fc91a493c0fa05ce37e259c9f29b47c..21c3f131297c8b0ac3fb32ba7c6bcf1aa00354bc 100644 (file)
@@ -112,6 +112,21 @@ static int ident_matches(struct mddev_ident *ident,
                                devname);
                return 0;
        }
+       if (ident->member && ident->member[0]) {
+               /* content->text_version must match */
+               char *s = strchr(content->text_version+1, '/');
+               if (s == NULL) {
+                       if (devname)
+                               fprintf(stderr, Name ": %s is not a container and one is required.\n",
+                                       devname);
+                       return 0;
+               } else if (strcmp(ident->member, s+1) != 0) {
+                       if (devname)
+                               fprintf(stderr, Name ": skipping wrong member %s is %s\n",
+                                       content->text_version, devname);
+                       return 0;
+               }
+       }
        return 1;
 }
                         
@@ -417,19 +432,6 @@ int Assemble(struct supertype *st, char *mddev,
                                                content->text_version,
                                                devname);
                                skip = 1;
-                       } else if (ident->member && ident->member[0]) {
-                               char *s = strchr(content->text_version+1, '/');
-                               if (s == NULL) {
-                                       fprintf(stderr, Name ": badly formatted version: %s\n",
-                                               content->text_version);
-                                       skip = 1;
-                               } else if (strcmp(ident->member, s+1) != 0) {
-                                       if (report_missmatch)
-                                               fprintf(stderr,
-                                                       Name ": skipping wrong member %s\n",
-                                                       content->text_version);
-                                       skip = 1;
-                               }
                        }
                        if (skip) {
                                content = content->next;
@@ -457,15 +459,6 @@ int Assemble(struct supertype *st, char *mddev,
                        break;
                }
 
-               if (ident->container || ident->member) {
-                       /* No chance of this matching if we don't have
-                        * a container */
-                       if (report_missmatch)
-                               fprintf(stderr, Name "%s is not a container, and one is required.\n",
-                                       devname);
-                       goto loop;
-               }
-
                if (!ident_matches(ident, content, tst,
                                   homehost, update,
                                   report_missmatch ? devname : NULL))