]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Assemble.c
mdadm: Fixup more broken logical operator formatting
[thirdparty/mdadm.git] / Assemble.c
index d6beb23da9c5218adbea829522a6eea6776cae1b..afc6d9ca100e57dcd49a29af363da97517133e28 100644 (file)
@@ -149,6 +149,7 @@ static int select_devices(struct mddev_dev *devlist,
        struct mdinfo *content = NULL;
        int report_mismatch = ((inargv && c->verbose >= 0) || c->verbose > 0);
        struct domainlist *domains = NULL;
+       dev_t rdev;
 
        tmpdev = devlist; num_devs = 0;
        while (tmpdev) {
@@ -169,7 +170,6 @@ static int select_devices(struct mddev_dev *devlist,
             tmpdev = tmpdev ? tmpdev->next : NULL) {
                char *devname = tmpdev->devname;
                int dfd;
-               struct stat stb;
                struct supertype *tst;
                struct dev_policy *pol = NULL;
                int found_container = 0;
@@ -204,14 +204,7 @@ static int select_devices(struct mddev_dev *devlist,
                                pr_err("cannot open device %s: %s\n",
                                       devname, strerror(errno));
                        tmpdev->used = 2;
-               } else if (fstat(dfd, &stb)< 0) {
-                       /* Impossible! */
-                       pr_err("fstat failed for %s: %s\n",
-                              devname, strerror(errno));
-                       tmpdev->used = 2;
-               } else if ((stb.st_mode & S_IFMT) != S_IFBLK) {
-                       pr_err("%s is not a block device.\n",
-                              devname);
+               } else if (!fstat_is_blkdev(dfd, devname, &rdev)) {
                        tmpdev->used = 2;
                } else if (must_be_container(dfd)) {
                        if (st) {
@@ -227,14 +220,15 @@ static int select_devices(struct mddev_dev *devlist,
                                        pr_err("not a recognisable container: %s\n",
                                               devname);
                                tmpdev->used = 2;
-                       } else if (!tst->ss->load_container
-                                  || tst->ss->load_container(tst, dfd, NULL)) {
+                       } else if (!tst->ss->load_container ||
+                                  tst->ss->load_container(tst, dfd, NULL)) {
                                if (report_mismatch)
                                        pr_err("no correct container type: %s\n",
                                               devname);
                                tmpdev->used = 2;
                        } else if (auto_assem &&
-                                  !conf_test_metadata(tst->ss->name, (pol = devid_policy(stb.st_rdev)),
+                                  !conf_test_metadata(tst->ss->name,
+                                                      (pol = devid_policy(rdev)),
                                                       tst->ss->match_home(tst, c->homehost) == 1)) {
                                if (report_mismatch)
                                        pr_err("%s has metadata type %s for which auto-assembly is disabled\n",
@@ -261,7 +255,8 @@ static int select_devices(struct mddev_dev *devlist,
                                               tst->ss->name, devname);
                                tmpdev->used = 2;
                        } else if (auto_assem && st == NULL &&
-                                  !conf_test_metadata(tst->ss->name, (pol = devid_policy(stb.st_rdev)),
+                                  !conf_test_metadata(tst->ss->name,
+                                                      (pol = devid_policy(rdev)),
                                                       tst->ss->match_home(tst, c->homehost) == 1)) {
                                if (report_mismatch)
                                        pr_err("%s has metadata type %s for which auto-assembly is disabled\n",
@@ -484,7 +479,7 @@ static int select_devices(struct mddev_dev *devlist,
                /* Collect domain information from members only */
                if (tmpdev && tmpdev->used == 1) {
                        if (!pol)
-                               pol = devid_policy(stb.st_rdev);
+                               pol = devid_policy(rdev);
                        domain_merge(&domains, pol, tst?tst->ss->name:NULL);
                }
                dev_policy_free(pol);
@@ -517,15 +512,12 @@ static int select_devices(struct mddev_dev *devlist,
 
        /* Now reject spares that don't match domains of identified members */
        for (tmpdev = devlist; tmpdev; tmpdev = tmpdev->next) {
-               struct stat stb;
                if (tmpdev->used != 3)
                        continue;
-               if (stat(tmpdev->devname, &stb)< 0) {
-                       pr_err("fstat failed for %s: %s\n",
-                              tmpdev->devname, strerror(errno));
+               if (!stat_is_blkdev(tmpdev->devname, &rdev)) {
                        tmpdev->used = 2;
                } else {
-                       struct dev_policy *pol = devid_policy(stb.st_rdev);
+                       struct dev_policy *pol = devid_policy(rdev);
                        int dt = domain_test(domains, pol, NULL);
                        if (inargv && dt != 0)
                                /* take this spare as domains match
@@ -761,12 +753,12 @@ static int load_devices(struct devs *devices, char *devmap,
                                bestcnt = newbestcnt;
                        }
                        if (best[i] >=0 &&
-                           devices[best[i]].i.events
-                           == devices[devcnt].i.events
-                           && (devices[best[i]].i.disk.minor
-                               != devices[devcnt].i.disk.minor)
-                           && st->ss == &super0
-                           && content->array.level != LEVEL_MULTIPATH) {
+                           devices[best[i]].i.events ==
+                           devices[devcnt].i.events &&
+                           (devices[best[i]].i.disk.minor
+                            != devices[devcnt].i.disk.minor) &&
+                           st->ss == &super0 &&
+                           content->array.level != LEVEL_MULTIPATH) {
                                /* two different devices with identical superblock.
                                 * Could be a mis-detection caused by overlapping
                                 * partitions.  fail-safe.
@@ -784,9 +776,8 @@ static int load_devices(struct devs *devices, char *devmap,
                                *stp = st;
                                return -1;
                        }
-                       if (best[i] == -1
-                           || (devices[best[i]].i.events
-                               < devices[devcnt].i.events))
+                       if (best[i] == -1 || (devices[best[i]].i.events
+                                             < devices[devcnt].i.events))
                                best[i] = devcnt;
                }
                devcnt++;
@@ -809,14 +800,11 @@ static int force_array(struct mdinfo *content,
        int okcnt = 0;
        while (!enough(content->array.level, content->array.raid_disks,
                       content->array.layout, 1,
-                      avail)
-              ||
+                      avail) ||
               (content->reshape_active && content->delta_disks > 0 &&
                !enough(content->array.level, (content->array.raid_disks
                                               - content->delta_disks),
-                       content->new_layout, 1,
-                       avail)
-                      )) {
+                       content->new_layout, 1, avail))) {
                /* Choose the newest best drive which is
                 * not up-to-date, update the superblock
                 * and add it.
@@ -1311,8 +1299,8 @@ int Assemble(struct supertype *st, char *mddev,
        int mdfd;
        int clean;
        int auto_assem = (mddev == NULL && !ident->uuid_set &&
-                         ident->super_minor == UnSet && ident->name[0] == 0
-                         && (ident->container == NULL || ident->member == NULL));
+                         ident->super_minor == UnSet && ident->name[0] == 0 &&
+                         (ident->container == NULL || ident->member == NULL));
        struct devs *devices;
        char *devmap;
        int *best = NULL; /* indexed by raid_disk */
@@ -1478,7 +1466,7 @@ try_again:
                        name = strchr(name, ':')+1;
 
                mdfd = create_mddev(mddev, name, ident->autof, trustworthy,
-                                   chosen_name);
+                                   chosen_name, 0);
        }
        if (mdfd < 0) {
                st->ss->free_super(st);