From 2c028990b4658b30444f07e6bfdb1e9055f26885 Mon Sep 17 00:00:00 2001 From: Jonathan Earl Brassow Date: Tue, 13 Jul 2010 22:04:36 +0000 Subject: [PATCH] Fix reversal of LV list before performing a split mirror. When splitting off mirror images from a mirror, we always take LVs from the end of a list. For example, if the mirror sub-devices are lv_mimage_[012], we should select lv_mimage_2 if splitting off one image. However, lv_mimage_0 was being selected instead. The problem came from calling '_move_removable_mimages_to_end' when it was unnecessary to do so. When the user /does/ specify specific devices to be removed, this function properly moved the appropriate LVs to the end of the list for extraction. However, if the user /doesn't/ give any specific PVs, the function should do nothing. '_move_removable_mimages_to_end' was keying off of whether 'removable_pvs' was NULL or not and this value was improperly being populated with the set of all available PVs. This was causing '_move_removable_mimages_to_end' to completely reverse the list, which in turn caused us to extract the hithertofore front-of-the-list LVs. --- tools/lvconvert.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/lvconvert.c b/tools/lvconvert.c index 77ddce809..03ecb01df 100644 --- a/tools/lvconvert.c +++ b/tools/lvconvert.c @@ -1002,7 +1002,7 @@ static int _lvconvert_mirrors_aux(struct cmd_context *cmd, lv->le_count, lp->region_size); - if (!operable_pvs) + if (!operable_pvs && !lp->keep_mimages) operable_pvs = lp->pvh; seg = first_seg(lv); -- 2.43.5