1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-02-24 17:57:48 +03:00

Thin genering update_pool_lv function

Function to trigger pool message passing via resume,
or resize of the pool itself independently on other thins.
This commit is contained in:
Zdenek Kabelac 2011-11-03 14:53:58 +00:00
parent a0c4e85c48
commit 73b7bf961b
2 changed files with 42 additions and 0 deletions

View File

@ -560,6 +560,8 @@ uint64_t extents_from_size(struct cmd_context *cmd, uint64_t size,
int detach_pool_messages(struct logical_volume *pool_lv);
int update_pool_lv(struct logical_volume *lv, int activate);
/*
* Activation options
*/

View File

@ -317,3 +317,43 @@ int extend_pool(struct logical_volume *pool_lv, const struct segment_type *segty
return 1;
}
int update_pool_lv(struct logical_volume *lv, int activate)
{
if (!lv_is_thin_pool(lv)) {
log_error(INTERNAL_ERROR "Updated LV %s is not pool.", lv->name);
return 0;
}
if (activate) {
/* If the pool was not yet activated, do it */
if (!lv_is_active(lv) &&
!activate_lv_excl(lv->vg->cmd, lv)) {
log_error("Failed to activate %s.", lv->name);
return 0;
}
/* If already active, do suspend resume
*
* TODO: Support pool resume without suspend,
* since the real suspend is not needed here
*/
else if (!suspend_lv(lv->vg->cmd, lv)) {
log_error("Failed to suspend %s.", lv->name);
return 0;
} else if (!resume_lv(lv->vg->cmd, lv)) {
log_error("Failed to resume %s.", lv->name);
return 0;
}
}
if (!dm_list_empty(&first_seg(lv)->thin_messages)) {
dm_list_init(&first_seg(lv)->thin_messages);
if (!vg_write(lv->vg) || !vg_commit(lv->vg))
return_0;
backup(lv->vg);
}
return 1;
}