]> sourceware.org Git - lvm2.git/commitdiff
pools: move removal of _pmspare
authorZdenek Kabelac <zkabelac@redhat.com>
Fri, 3 Oct 2014 21:34:16 +0000 (23:34 +0200)
committerZdenek Kabelac <zkabelac@redhat.com>
Mon, 6 Oct 2014 13:18:06 +0000 (15:18 +0200)
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
lib/metadata/lv_manip.c

index 8341d8d24b76aa7b457db3d8f34cba8df7cfddd3..3d5f9c4234aa2ff3fde7c1085d99b311d715196b 100644 (file)
--- 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.
index 25342d6a28020f3b1909eb91d084710f9e1581b8..00f0fbc72477e63ad0157907c0de340b1588654c 100644 (file)
@@ -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"
This page took 0.05826 seconds and 5 git commands to generate.