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:
parent
855b16ce14
commit
0e5f39a5ac
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user