[lvm-devel] master - pools: move removal of _pmspare
Zdenek Kabelac
zkabelac at fedoraproject.org
Mon Oct 6 13:33:06 UTC 2014
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=cb273fe16423a2868c0bdde7c8e56cb21131338d
Commit: cb273fe16423a2868c0bdde7c8e56cb21131338d
Parent: 20803f2275d9eb08344c4882e62381cf23454eba
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Fri Oct 3 23:34:16 2014 +0200
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Mon Oct 6 15:18:06 2014 +0200
pools: move removal of _pmspare
Since _pmspare is internal volume move it to
lv_remove_single - so it's automatically removed with
last remove thin-pool.
lv_remove_with_dependencies() is not always used for pool removal.
---
WHATS_NEW | 1 +
lib/metadata/lv_manip.c | 43 +++++++++++++++++++++++--------------------
2 files changed, 24 insertions(+), 20 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 8341d8d..3d5f9c4 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.112 -
=====================================
+ Always remove spare LV with last removed pool volume.
Support lvconvert --splitcache and --uncache of cached LV.
Option --cache has also shortcut -H (i.e. lvcreate -H).
Refactor lvcreate code and better preserve --type argument.
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 25342d6..00f0fbc 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -5369,6 +5369,8 @@ int lv_remove_single(struct cmd_context *cmd, struct logical_volume *lv,
struct logical_volume *pool_lv = NULL;
struct lv_segment *cache_seg = NULL;
int ask_discard;
+ struct lv_list *lvl;
+ int is_last_pool;
vg = lv->vg;
@@ -5463,6 +5465,27 @@ int lv_remove_single(struct cmd_context *cmd, struct logical_volume *lv,
return_0;
}
+ if (lv_is_pool(lv) && lv->vg->pool_metadata_spare_lv) {
+ /* When removing last pool, also remove the spare */
+ is_last_pool = 1;
+ dm_list_iterate_items(lvl, &lv->vg->lvs)
+ if (lv_is_pool(lvl->lv) &&
+ lvl->lv != lv) {
+ is_last_pool = 0;
+ break;
+ }
+ if (is_last_pool) {
+ /* This is purely internal LV volume, no question */
+ if (!deactivate_lv(cmd, lv->vg->pool_metadata_spare_lv)) {
+ log_error("Unable to deactivate logical volume %s",
+ display_lvname(lv->vg->pool_metadata_spare_lv));
+ return 0;
+ }
+ if (!lv_remove(lv->vg->pool_metadata_spare_lv))
+ return_0;
+ }
+ }
+
if (lv_is_cache_pool(lv)) {
/* Cache pool removal drops cache layer
* If the cache pool is not linked, we can simply remove it. */
@@ -5580,10 +5603,8 @@ int lv_remove_with_dependencies(struct cmd_context *cmd, struct logical_volume *
{
dm_percent_t snap_percent;
struct dm_list *snh, *snht;
- struct lv_list *lvl;
struct lvinfo info;
struct logical_volume *origin;
- int is_last_pool;
if (lv_is_cow(lv)) {
/*
@@ -5661,24 +5682,6 @@ int lv_remove_with_dependencies(struct cmd_context *cmd, struct logical_volume *
!_lv_remove_segs_using_this_lv(cmd, lv, force, level, "pool"))
return_0;
- if ((lv_is_thin_pool(lv) || lv_is_cache_pool(lv)) &&
- lv->vg->pool_metadata_spare_lv) {
- /* When removing last pool, also remove the spare */
- is_last_pool = 1;
- dm_list_iterate_items(lvl, &lv->vg->lvs)
- if ((lv_is_thin_pool(lvl->lv) ||
- lv_is_cache_pool(lvl->lv)) &&
- lvl->lv != lv) {
- is_last_pool = 0;
- break;
- }
-
- if (is_last_pool &&
- !lv_remove_with_dependencies(cmd, lv->vg->pool_metadata_spare_lv,
- DONT_PROMPT, level + 1))
- return_0;
- }
-
if (lv_is_pool_metadata_spare(lv) &&
(force == PROMPT) &&
(yes_no_prompt("Removal of pool metadata spare logical volume"
More information about the lvm-devel
mailing list