mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
lvconvert: move _pmspare handling before conversion
This commit is contained in:
parent
8698f9dce6
commit
ad73f571b8
@ -3356,6 +3356,23 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Before starting a real conversion, prepare _pmspare volume.
|
||||||
|
* If there is already one presend in a VG, make sure the size is right
|
||||||
|
*/
|
||||||
|
if (!handle_pool_metadata_spare(vg, metadata_lv->le_count, use_pvh, pool_metadata_spare)) {
|
||||||
|
log_error("Failed to set up spare metadata LV for pool.");
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* After _pmspare handling is finished there are unwritten VG metadata
|
||||||
|
* that will get written with the next mda update.
|
||||||
|
* If there is any failure and such new metadata would not be written,
|
||||||
|
* a user is then left with 'regular' volume he can normally 'lvremove'.
|
||||||
|
* If there was _pmspare already existing, the size of such LV is already changed
|
||||||
|
* and is committed to disk. A user may only remove such volume and create a new one.
|
||||||
|
*/
|
||||||
|
|
||||||
if (to_thin) {
|
if (to_thin) {
|
||||||
/*
|
/*
|
||||||
* pool_lv is not yet a pool, when returned, pool_lv contains
|
* pool_lv is not yet a pool, when returned, pool_lv contains
|
||||||
@ -3492,18 +3509,6 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|||||||
(to_cachepool) ? "cache" : "thin",
|
(to_cachepool) ? "cache" : "thin",
|
||||||
(to_thin) ? "volume" : "pool");
|
(to_thin) ? "volume" : "pool");
|
||||||
|
|
||||||
/*
|
|
||||||
* FIXME handle_pool_metadata_spare() calls vg_write() vg_commit()
|
|
||||||
* after creating a new lvolN, but then lvolN is renamed and hidden as
|
|
||||||
* [lvolN_pmspare] without any further vg_write(). So, there's an extra
|
|
||||||
* vg_write and vg_commit required here to cover the renaming/hiding.
|
|
||||||
*/
|
|
||||||
if (!handle_pool_metadata_spare(vg, metadata_lv->le_count, use_pvh, pool_metadata_spare) ||
|
|
||||||
!vg_write(vg) || !vg_commit(vg)) {
|
|
||||||
log_error("Failed to set up spare metadata LV for thin pool.");
|
|
||||||
end_error = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (activate_pool && !activate_lv(cmd, pool_lv)) {
|
if (activate_pool && !activate_lv(cmd, pool_lv)) {
|
||||||
log_error("Failed to activate pool logical volume %s.", display_lvname(pool_lv));
|
log_error("Failed to activate pool logical volume %s.", display_lvname(pool_lv));
|
||||||
end_error = 1;
|
end_error = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user