From 96279ac1c0e15a748caa52982976d9d8916ab059 Mon Sep 17 00:00:00 2001 From: Zdenek Kabelac Date: Sun, 30 Oct 2011 22:01:39 +0000 Subject: [PATCH] Make detach_pool_message visible for tools Move there also vg_write and vg_commit. --- lib/metadata/lv_manip.c | 9 +++------ lib/metadata/metadata-exported.h | 2 ++ lib/metadata/metadata.h | 1 - lib/metadata/thin_manip.c | 15 +++++++++++---- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c index 374dc16c2..e28311d09 100644 --- a/lib/metadata/lv_manip.c +++ b/lib/metadata/lv_manip.c @@ -4221,13 +4221,10 @@ static struct logical_volume *_lv_create_an_lv(struct volume_group *vg, struct l } else if (seg_is_thin_volume(lp)) { /* FIXME: for now we may drop any queued thin messages * since we are sure everything was activated already */ - if (!detach_pool_messages(first_seg(first_seg(lv)->pool_lv))) - goto deactivate_and_revert_new_lv; - - if (!vg_write(vg) || !vg_commit(vg)) + if (!detach_pool_messages(first_seg(lv)->pool_lv)) { + stack; goto deactivate_and_revert_new_lv; - - backup(vg); + } } if (lp->snapshot) { diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h index 38ea0312e..a2615077c 100644 --- a/lib/metadata/metadata-exported.h +++ b/lib/metadata/metadata-exported.h @@ -558,6 +558,8 @@ int lv_rename(struct cmd_context *cmd, struct logical_volume *lv, uint64_t extents_from_size(struct cmd_context *cmd, uint64_t size, uint32_t extent_size); +int detach_pool_messages(struct logical_volume *pool_lv); + /* * Activation options */ diff --git a/lib/metadata/metadata.h b/lib/metadata/metadata.h index 87a200013..06e820ce3 100644 --- a/lib/metadata/metadata.h +++ b/lib/metadata/metadata.h @@ -461,7 +461,6 @@ int detach_pool_lv(struct lv_segment *seg); int attach_pool_message(struct lv_segment *seg, dm_thin_message_t type, struct logical_volume *lv, uint32_t delete_id, int read_only); -int detach_pool_messages(struct lv_segment *seg); int extend_pool(struct logical_volume *lv, const struct segment_type *segtype, struct alloc_handle *ah, uint32_t stripes, uint32_t stripe_size); diff --git a/lib/metadata/thin_manip.c b/lib/metadata/thin_manip.c index cbe585b74..c23538a76 100644 --- a/lib/metadata/thin_manip.c +++ b/lib/metadata/thin_manip.c @@ -149,15 +149,22 @@ int attach_pool_message(struct lv_segment *seg, dm_thin_message_t type, return 1; } -int detach_pool_messages(struct lv_segment *seg) +int detach_pool_messages(struct logical_volume *pool_lv) { - if (!lv_is_thin_pool(seg->lv)) { + if (!lv_is_thin_pool(pool_lv)) { log_error(INTERNAL_ERROR "LV %s is not a thin pool.", - seg->lv->name); + pool_lv->name); return 0; } - dm_list_init(&seg->thin_messages); + if (!dm_list_empty(&first_seg(pool_lv)->thin_messages)) { + dm_list_init(&first_seg(pool_lv)->thin_messages); + + if (!vg_write(pool_lv->vg) || !vg_commit(pool_lv->vg)) + return_0; + + backup(pool_lv->vg); + } return 1; } -- 2.43.5