1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-22 17:35:59 +03:00

snapshot: use single merging sequence

The resume of 'released' 'COW' should preceed the resume of origin.
The fact we need to do the sequence differently for merge was
cause by bugs fixed in 2 previous commits - so we no longer need
to recognize 'merging' and we should always go with single
sequence.

The importance of this order is - to properly remove  '-real' device
from origin LV. When COW is activated as 2nd. '-real' device is
kept in table as it cannot be removed during 1st. resume of origin,
and later activation of COW LV no longer builds tree associated
with origin LV.
This commit is contained in:
Zdenek Kabelac 2019-10-25 23:29:16 +02:00
parent 855b16ce14
commit 0e5f39a5ac

View File

@ -286,7 +286,6 @@ int vg_add_snapshot(struct logical_volume *origin,
int vg_remove_snapshot(struct logical_volume *cow) int vg_remove_snapshot(struct logical_volume *cow)
{ {
int merging_snapshot = 0;
struct logical_volume *origin = origin_from_cow(cow); struct logical_volume *origin = origin_from_cow(cow);
int is_origin_active = lv_is_active(origin); int is_origin_active = lv_is_active(origin);
@ -315,17 +314,6 @@ int vg_remove_snapshot(struct logical_volume *cow)
* preload origin IFF "snapshot-merge" target is active * preload origin IFF "snapshot-merge" target is active
* - IMPORTANT: avoids preload if inactivate merge is pending * - IMPORTANT: avoids preload if inactivate merge is pending
*/ */
if (lv_has_target_type(origin->vg->vgmem, origin, NULL,
TARGET_NAME_SNAPSHOT_MERGE)) {
/*
* preload origin to:
* - allow proper release of -cow
* - avoid allocations with other devices suspended
* when transitioning from "snapshot-merge" to
* "snapshot-origin after a merge completes.
*/
merging_snapshot = 1;
}
} }
if (!lv_remove(cow->snapshot->lv)) { if (!lv_remove(cow->snapshot->lv)) {
@ -356,7 +344,7 @@ int vg_remove_snapshot(struct logical_volume *cow)
* the LV lock on cluster has to be grabbed, so use * the LV lock on cluster has to be grabbed, so use
* activate_lv() which resumes suspend cow device. * activate_lv() which resumes suspend cow device.
*/ */
if (!merging_snapshot && !activate_lv(cow->vg->cmd, cow)) { if (!activate_lv(cow->vg->cmd, cow)) {
log_error("Failed to activate %s.", cow->name); log_error("Failed to activate %s.", cow->name);
return 0; return 0;
} }
@ -365,11 +353,6 @@ int vg_remove_snapshot(struct logical_volume *cow)
log_error("Failed to resume %s.", origin->name); log_error("Failed to resume %s.", origin->name);
return 0; return 0;
} }
if (merging_snapshot && !activate_lv(cow->vg->cmd, cow)) {
log_error("Failed to activate %s.", cow->name);
return 0;
}
} }
return 1; return 1;