]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - super-ddf.c
imsm: validate multiple ppls during assemble
[thirdparty/mdadm.git] / super-ddf.c
index 9c82f4fa9bf2a94519bb1dae1db6cd18d9b1f494..d02a19a21010aae12cd4d76f5b1708e221e6664a 100644 (file)
@@ -670,8 +670,8 @@ static int layout_md2ddf(const mdu_array_info_t *array,
                        sec_elmnt_count = array->raid_disks / 2;
                        srl = DDF_2SPANNED;
                        prl = DDF_RAID1;
-               } else if (array->raid_disks % 3 == 0
-                          && array->layout == 0x103) {
+               } else if (array->raid_disks % 3 == 0 &&
+                          array->layout == 0x103) {
                        rlq = DDF_RAID1_MULTI;
                        prim_elmnt_count =  cpu_to_be16(3);
                        sec_elmnt_count = array->raid_disks / 3;
@@ -853,8 +853,8 @@ static void *load_section(int fd, struct ddf_super *super, void *buf,
        int dofree = (buf == NULL);
 
        if (check)
-               if (len != 2 && len != 8 && len != 32
-                   && len != 128 && len != 512)
+               if (len != 2 && len != 8 && len != 32 &&
+                   len != 128 && len != 512)
                        return NULL;
 
        if (len > 1024)
@@ -932,14 +932,13 @@ static int load_ddf_headers(int fd, struct ddf_super *super, char *devname)
        if (load_ddf_header(fd, be64_to_cpu(super->anchor.secondary_lba),
                            dsize >> 9,  2,
                            &super->secondary, &super->anchor)) {
-               if (super->active == NULL
-                   || (be32_to_cpu(super->primary.seq)
-                       < be32_to_cpu(super->secondary.seq) &&
-                       !super->secondary.openflag)
-                   || (be32_to_cpu(super->primary.seq)
-                       == be32_to_cpu(super->secondary.seq) &&
-                       super->primary.openflag && !super->secondary.openflag)
-                       )
+               if (super->active == NULL ||
+                   (be32_to_cpu(super->primary.seq)
+                    < be32_to_cpu(super->secondary.seq) &&
+                       !super->secondary.openflag) ||
+                   (be32_to_cpu(super->primary.seq) ==
+                    be32_to_cpu(super->secondary.seq) &&
+                       super->primary.openflag && !super->secondary.openflag))
                        super->active = &super->secondary;
        } else if (devname &&
                   be64_to_cpu(super->anchor.secondary_lba) != ~(__u64)0)
@@ -1884,8 +1883,8 @@ static struct vd_config *find_vdcr(struct ddf_super *ddf, unsigned int inst,
                nsec = n / be16_to_cpu(conf->prim_elmnt_count);
                if (conf->sec_elmnt_seq != nsec) {
                        for (ibvd = 1; ibvd < conf->sec_elmnt_count; ibvd++) {
-                               if (v->other_bvds[ibvd-1]->sec_elmnt_seq
-                                   == nsec)
+                               if (v->other_bvds[ibvd-1]->sec_elmnt_seq ==
+                                   nsec)
                                        break;
                        }
                        if (ibvd == conf->sec_elmnt_count)
@@ -2028,8 +2027,8 @@ static void getinfo_super_ddf(struct supertype *st, struct mdinfo *info, char *m
                               be32_to_cpu(ddf->phys->entries[e].refnum) == 0xffffffff)
                                e++;
                        if (i < info->array.raid_disks && e < max &&
-                           !(be16_to_cpu(ddf->phys->entries[e].state)
-                             DDF_Failed))
+                           !(be16_to_cpu(ddf->phys->entries[e].state) &
+                             DDF_Failed))
                                map[i] = 1;
                        else
                                map[i] = 0;
@@ -2114,11 +2113,10 @@ static void getinfo_super_ddf_bvd(struct supertype *st, struct mdinfo *info, cha
        info->resync_start = 0;
        info->reshape_active = 0;
        info->recovery_blocked = 0;
-       if (!(ddf->virt->entries[info->container_member].state
-             & DDF_state_inconsistent)  &&
-           (ddf->virt->entries[info->container_member].init_state
-            & DDF_initstate_mask)
-           == DDF_init_full)
+       if (!(ddf->virt->entries[info->container_member].state &
+             DDF_state_inconsistent) &&
+           (ddf->virt->entries[info->container_member].init_state &
+            DDF_initstate_mask) == DDF_init_full)
                info->resync_start = MaxSector;
 
        uuid_from_super_ddf(st, info->uuid);
@@ -2135,7 +2133,7 @@ static void getinfo_super_ddf_bvd(struct supertype *st, struct mdinfo *info, cha
        if (map)
                for (j = 0; j < map_disks; j++) {
                        map[j] = 0;
-                       if (j <  info->array.raid_disks) {
+                       if (j < info->array.raid_disks) {
                                int i = find_phys(ddf, vc->conf.phys_refnum[j]);
                                if (i >= 0 &&
                                    (be16_to_cpu(ddf->phys->entries[i].state)
@@ -3513,8 +3511,8 @@ static int validate_geometry_ddf_bvd(struct supertype *st,
                if (minsize == 0)
                        minsize = 8;
                for (dl = ddf->dlist; dl ; dl = dl->next) {
-                       if (find_space(ddf, dl, data_offset, &minsize)
-                           != INVALID_SECTORS)
+                       if (find_space(ddf, dl, data_offset, &minsize) !=
+                           INVALID_SECTORS)
                                dcnt++;
                }
                if (dcnt < raiddisks) {
@@ -3526,7 +3524,7 @@ static int validate_geometry_ddf_bvd(struct supertype *st,
                return 1;
        }
        /* This device must be a member of the set */
-       if (!stat_is_blkdev(dev, NULL))
+       if (!stat_is_blkdev(dev, &rdev))
                return 0;
        for (dl = ddf->dlist ; dl ; dl = dl->next) {
                if (dl->major == (int)major(rdev) &&
@@ -3557,7 +3555,7 @@ static int load_super_ddf_all(struct supertype *st, int fd,
        char nm[20];
        int dfd;
 
-       sra = sysfs_read(fd, 0, GET_LEVEL|GET_VERSION|GET_DEVS|GET_STATE);
+       sra = sysfs_read(fd, NULL, GET_LEVEL|GET_VERSION|GET_DEVS|GET_STATE);
        if (!sra)
                return 1;
        if (sra->array.major_version != -1 ||
@@ -3816,13 +3814,13 @@ static struct mdinfo *container_content_ddf(struct supertype *st, char *subarray
                        unsigned int iphys;
                        int stt;
 
-                       if (be32_to_cpu(ddf->phys->entries[pd].refnum)
-                           == 0xFFFFFFFF)
+                       if (be32_to_cpu(ddf->phys->entries[pd].refnum) ==
+                           0xffffffff)
                                continue;
 
                        stt = be16_to_cpu(ddf->phys->entries[pd].state);
-                       if ((stt & (DDF_Online|DDF_Failed|DDF_Rebuilding))
-                           != DDF_Online)
+                       if ((stt & (DDF_Online|DDF_Failed|DDF_Rebuilding)) !=
+                           DDF_Online)
                                continue;
 
                        i = get_pd_index_from_refnum(
@@ -4006,8 +4004,8 @@ static int compare_super_ddf(struct supertype *st, struct supertype *tst)
                        continue;
 
                if (posix_memalign((void **)&dl1, 512,
-                      sizeof(*dl1) + (first->max_part) * sizeof(dl1->vlist[0]))
-                   != 0) {
+                                  sizeof(*dl1) + (first->max_part) *
+                                  sizeof(dl1->vlist[0])) != 0) {
                        pr_err("could not allocate disk info buffer\n");
                        return 3;
                }
@@ -4207,8 +4205,8 @@ static int get_bvd_state(const struct ddf_super *ddf,
                if (pd < 0)
                        continue;
                st = be16_to_cpu(ddf->phys->entries[pd].state);
-               if ((st & (DDF_Online|DDF_Failed|DDF_Rebuilding))
-                   == DDF_Online) {
+               if ((st & (DDF_Online|DDF_Failed|DDF_Rebuilding)) ==
+                   DDF_Online) {
                        working++;
                        avail[i] = 1;
                }
@@ -4618,9 +4616,9 @@ static void ddf_remove_failed(struct ddf_super *ddf)
                    0xFFFFFFFF)
                        continue;
                if (be16_and(ddf->phys->entries[pdnum].state,
-                            cpu_to_be16(DDF_Failed))
-                   && be16_and(ddf->phys->entries[pdnum].state,
-                               cpu_to_be16(DDF_Transition))) {
+                            cpu_to_be16(DDF_Failed)) &&
+                   be16_and(ddf->phys->entries[pdnum].state,
+                            cpu_to_be16(DDF_Transition))) {
                        /* skip this one unless in dlist*/
                        for (dl = ddf->dlist; dl; dl = dl->next)
                                if (dl->pdnum == (int)pdnum)
@@ -5151,8 +5149,8 @@ static struct mdinfo *ddf_activate_spare(struct active_array *a,
                vc = (struct vd_config *)(mu->buf
                                          + i_sec * ddf->conf_rec_len * 512);
                for (dl = ddf->dlist; dl; dl = dl->next)
-                       if (dl->major == di->disk.major
-                           && dl->minor == di->disk.minor)
+                       if (dl->major == di->disk.major &&
+                           dl->minor == di->disk.minor)
                                break;
                if (!dl || dl->pdnum < 0) {
                        pr_err("BUG: can't find disk %d (%d/%d)\n",