diff --git a/tools/vgmerge.c b/tools/vgmerge.c index adb00a0f6..6b403bf42 100644 --- a/tools/vgmerge.c +++ b/tools/vgmerge.c @@ -151,13 +151,13 @@ static int _vgmerge_single(struct cmd_context *cmd, const char *vg_name_to, vg_from->name, vg_to->name); r = ECMD_PROCESSED; bad: - if (lock_vg_from_first) { - unlock_and_free_vg(cmd, vg_to, vg_name_to); - unlock_and_free_vg(cmd, vg_from, vg_name_from); - } else { - unlock_and_free_vg(cmd, vg_from, vg_name_from); - unlock_and_free_vg(cmd, vg_to, vg_name_to); - } + /* + * Note: as vg_to is referencing moved elements from vg_from + * the order of free_vg calls is mandatory. + */ + unlock_and_free_vg(cmd, vg_to, vg_name_to); + unlock_and_free_vg(cmd, vg_from, vg_name_from); + return r; } diff --git a/tools/vgsplit.c b/tools/vgsplit.c index b97db97b1..b0494a0d5 100644 --- a/tools/vgsplit.c +++ b/tools/vgsplit.c @@ -487,12 +487,12 @@ int vgsplit(struct cmd_context *cmd, int argc, char **argv) r = ECMD_PROCESSED; bad: - if (lock_vg_from_first) { - unlock_and_free_vg(cmd, vg_to, vg_name_to); - unlock_and_free_vg(cmd, vg_from, vg_name_from); - } else { - unlock_and_free_vg(cmd, vg_from, vg_name_from); - unlock_and_free_vg(cmd, vg_to, vg_name_to); - } + /* + * Note: as vg_to is referencing moved elements from vg_from + * the order of free_vg calls is mandatory. + */ + unlock_and_free_vg(cmd, vg_to, vg_name_to); + unlock_and_free_vg(cmd, vg_from, vg_name_from); + return r; }