1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-03 05:18:29 +03:00

pvmove: Clean-up iterator.

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.
This commit is contained in:
Jonathan Brassow 2014-06-19 10:52:09 -05:00
parent f16da6ef23
commit 3964a1a89f

View 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;
}
}