]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Create: report failure if array cannot be started.
authorNeilBrown <neilb@suse.de>
Wed, 1 Dec 2010 00:03:28 +0000 (11:03 +1100)
committerNeilBrown <neilb@suse.de>
Thu, 10 Mar 2011 06:20:07 +0000 (17:20 +1100)
We weren't checking the result of writing 'active' to array_state

Signed-off-by: NeilBrown <neilb@suse.de>
Create.c
tests/10ddf-create

index daf64d7074ca5d4809a8290091a9af2b00eac68d..ba3b99b6087bac6c1a813631f0dc81888779a8a5 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -888,20 +888,27 @@ int Create(struct supertype *st, char *mddev,
                wait_for(chosen_name, mdfd);
        } else if (runstop == 1 || subdevs >= raiddisks) {
                if (st->ss->external) {
+                       int err;
                        switch(level) {
                        case LEVEL_LINEAR:
                        case LEVEL_MULTIPATH:
                        case 0:
-                               sysfs_set_str(&info, NULL, "array_state",
-                                             "active");
+                               err = sysfs_set_str(&info, NULL, "array_state",
+                                                   "active");
                                need_mdmon = 0;
                                break;
                        default:
-                               sysfs_set_str(&info, NULL, "array_state",
-                                             "readonly");
+                               err = sysfs_set_str(&info, NULL, "array_state",
+                                                   "readonly");
                                break;
                        }
                        sysfs_set_safemode(&info, safe_mode_delay);
+                       if (err) {
+                               fprintf(stderr, Name ": failed to"
+                                       " activate array.\n");
+                               ioctl(mdfd, STOP_ARRAY, NULL);
+                               goto abort;
+                       }
                } else {
                        /* param is not actually used */
                        mdu_param_t param;
index 12c38208cd37b6bd9f516742128ab7864126ecdd..58ca2646e2b31c06230c1235d9e87ce016251dfa 100644 (file)
@@ -7,6 +7,7 @@
 #
 # add some data, tear down the array, reassemble
 # and make sure it is still there.
+set -e
 
 mdadm -CR /dev/md/ddf0 -e ddf -n 5 $dev8 $dev9 $dev10 $dev11 $dev12
 mdadm -CR r0 -l0 -n5 /dev/md/ddf0 -z 5000