]> sourceware.org Git - lvm2.git/commitdiff
pvmove: Clean-up iterator.
authorJonathan Brassow <jbrassow@redhat.com>
Thu, 19 Jun 2014 15:52:09 +0000 (10:52 -0500)
committerJonathan Brassow <jbrassow@redhat.com>
Thu, 19 Jun 2014 15:52:09 +0000 (10:52 -0500)
In 'find_pvmove_lv', separate the code that searches the atomic
pvmove LVs from the code that searches the normal pvmove LVs.  This
cleans up the segment iterator code a bit.

lib/metadata/mirror.c

index ca0c2a16be51e654905ef1f82c473412e3b33f1d..484b1f18740f9ca4e8a85bd73b1fc2ea6442bd0a 100644 (file)
@@ -1559,14 +1559,29 @@ struct logical_volume *find_pvmove_lv(struct volume_group *vg,
                if (!(lv->status & lv_type))
                        continue;
 
-               /* Check segment origins point to pvname */
+               /*
+                * If this is an atomic pvmove, the first
+                * segment will be a mirror containing
+                * mimages (i.e. AREA_LVs)
+                */
+               if (seg_type(first_seg(lv), 0) == AREA_LV) {
+                       seg = first_seg(lv);            /* the mirror segment */
+                       seg = first_seg(seg_lv(seg, 0)); /* mimage_0 segment0 */
+                       if (seg_dev(seg, 0) != dev)
+                               continue;
+                       return lv;
+               }
+
+               /*
+                * If this is a normal pvmove, check all the segments'
+                * first areas for the requested device
+                */
                dm_list_iterate_items(seg, &lv->segments) {
-                       if (seg_type(seg, 0) == AREA_LV) /* Atomic pvmove */
-                               seg = first_seg(seg_lv(seg, 0));
-                       if (seg_type(seg, 0) != AREA_PV) /* Segment pvmove */
+                       if (seg_type(seg, 0) != AREA_PV)
                                continue;
                        if (seg_dev(seg, 0) != dev)
                                continue;
+
                        return lv;
                }
        }
This page took 0.0358000000000001 seconds and 5 git commands to generate.