[lvm-devel] master - vgremove: Use process_each_lv_in_vg.
Alasdair Kergon
agk at fedoraproject.org
Tue Oct 7 15:46:19 UTC 2014
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=f3bb1c018f7b6e38f0351a9994760bae7d9f00e3
Commit: f3bb1c018f7b6e38f0351a9994760bae7d9f00e3
Parent: d623034e62a5fe0ba541e6d1e543f43ae90a834f
Author: Alasdair G Kergon <agk at redhat.com>
AuthorDate: Tue Oct 7 16:45:45 2014 +0100
Committer: Alasdair G Kergon <agk at redhat.com>
CommitterDate: Tue Oct 7 16:45:45 2014 +0100
vgremove: Use process_each_lv_in_vg.
---
WHATS_NEW | 1 +
lib/metadata/metadata-exported.h | 5 -----
lib/metadata/metadata.c | 16 ----------------
tools/lvremove.c | 17 -----------------
tools/toollib.c | 23 ++++++++++++++++++++++-
tools/toollib.h | 11 ++++++-----
tools/tools.h | 1 +
tools/vgdisplay.c | 2 +-
tools/vgremove.c | 8 ++++++--
9 files changed, 37 insertions(+), 47 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index fa4ff65..8511a45 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.112 -
=====================================
+ Change vgremove to use process_each_lv_in_vg.
Introduce WARN_ flags to control some metadata warning messages.
Use process_each_pv in vgreduce.
Refactor process_each_pv in toollib.
diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
index ae9996d..0d8db7d 100644
--- a/lib/metadata/metadata-exported.h
+++ b/lib/metadata/metadata-exported.h
@@ -661,11 +661,6 @@ int vg_split_mdas(struct cmd_context *cmd, struct volume_group *vg_from,
void add_pvl_to_vgs(struct volume_group *vg, struct pv_list *pvl);
void del_pvl_from_vgs(struct volume_group *vg, struct pv_list *pvl);
-/* FIXME: refactor / unexport when lvremove liblvm refactoring dones */
-int remove_lvs_in_vg(struct cmd_context *cmd,
- struct volume_group *vg,
- force_t force);
-
/*
* free_pv_fid() must be called on every struct physical_volume allocated
* by pv_create, pv_read, find_pv_by_name or to free it when no longer required.
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index 5c154bd..9308cb7 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -518,22 +518,6 @@ int vg_rename(struct cmd_context *cmd, struct volume_group *vg,
return 1;
}
-int remove_lvs_in_vg(struct cmd_context *cmd,
- struct volume_group *vg,
- force_t force)
-{
- struct dm_list *lst;
- struct lv_list *lvl;
-
- while ((lst = dm_list_first(&vg->lvs))) {
- lvl = dm_list_item(lst, struct lv_list);
- if (!lv_remove_with_dependencies(cmd, lvl->lv, force, 0))
- return_0;
- }
-
- return 1;
-}
-
int vg_remove_check(struct volume_group *vg)
{
unsigned lv_count;
diff --git a/tools/lvremove.c b/tools/lvremove.c
index 7d2fec1..1005218 100644
--- a/tools/lvremove.c
+++ b/tools/lvremove.c
@@ -15,23 +15,6 @@
#include "tools.h"
-static int lvremove_single(struct cmd_context *cmd, struct logical_volume *lv,
- void *handle __attribute__((unused)))
-{
- /*
- * Single force is equivalent to sinle --yes
- * Even multiple --yes are equivalent to single --force
- * When we require -ff it cannot be replaces with -f -y
- */
- force_t force = (force_t) arg_count(cmd, force_ARG)
- ? : (arg_is_set(cmd, yes_ARG) ? DONT_PROMPT : PROMPT);
-
- if (!lv_remove_with_dependencies(cmd, lv, force, 0))
- return_ECMD_FAILED;
-
- return ECMD_PROCESSED;
-}
-
int lvremove(struct cmd_context *cmd, int argc, char **argv)
{
if (!argc) {
diff --git a/tools/toollib.c b/tools/toollib.c
index 3b1b00f..8b92968 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -1569,6 +1569,7 @@ int process_each_vg(struct cmd_context *cmd, int argc, char **argv,
int process_each_lv_in_vg(struct cmd_context *cmd, struct volume_group *vg,
struct dm_list *arg_lvnames, const struct dm_list *tags_in,
+ int stop_on_error,
void *handle, process_single_lv_fn_t process_single_lv)
{
int ret_max = ECMD_PROCESSED;
@@ -1640,6 +1641,9 @@ int process_each_lv_in_vg(struct cmd_context *cmd, struct volume_group *vg,
if (ret > ret_max)
ret_max = ret;
+
+ if (stop_on_error && ret != ECMD_PROCESSED)
+ return ret_max;
}
if (lvargs_supplied) {
@@ -1826,7 +1830,7 @@ static int _process_lv_vgnameid_list(struct cmd_context *cmd, uint32_t flags,
continue;
}
- ret = process_each_lv_in_vg(cmd, vg, &lvnames, tags_arg,
+ ret = process_each_lv_in_vg(cmd, vg, &lvnames, tags_arg, 0,
handle, process_single_lv);
unlock_and_release_vg(cmd, vg, vg_name);
@@ -2254,3 +2258,20 @@ int process_each_pv_in_vg(struct cmd_context *cmd, struct volume_group *vg,
return ret_max;
}
+
+int lvremove_single(struct cmd_context *cmd, struct logical_volume *lv,
+ void *handle __attribute__((unused)))
+{
+ /*
+ * Single force is equivalent to single --yes
+ * Even multiple --yes are equivalent to single --force
+ * When we require -ff it cannot be replaced with -f -y
+ */
+ force_t force = (force_t) arg_count(cmd, force_ARG)
+ ? : (arg_is_set(cmd, yes_ARG) ? DONT_PROMPT : PROMPT);
+
+ if (!lv_remove_with_dependencies(cmd, lv, force, 0))
+ return_ECMD_FAILED;
+
+ return ECMD_PROCESSED;
+}
diff --git a/tools/toollib.h b/tools/toollib.h
index 5b42f28..037b7d7 100644
--- a/tools/toollib.h
+++ b/tools/toollib.h
@@ -74,11 +74,9 @@ int process_each_pv_in_vg(struct cmd_context *cmd, struct volume_group *vg,
void *handle, process_single_pv_fn_t process_single_pv);
-int process_each_lv_in_vg(struct cmd_context *cmd,
- struct volume_group *vg,
- struct dm_list *arg_lvnames,
- const struct dm_list *tagsl,
- void *handle,
+int process_each_lv_in_vg(struct cmd_context *cmd, struct volume_group *vg,
+ struct dm_list *arg_lvnames, const struct dm_list *tagsl,
+ int stop_on_error, void *handle,
process_single_lv_fn_t process_single_lv);
const char *extract_vgname(struct cmd_context *cmd, const char *lv_name);
@@ -135,4 +133,7 @@ int get_and_validate_major_minor(const struct cmd_context *cmd,
int validate_lvname_param(struct cmd_context *cmd, const char **vg_name,
const char **lv_name);
+int lvremove_single(struct cmd_context *cmd, struct logical_volume *lv,
+ void *handle __attribute__((unused)));
+
#endif
diff --git a/tools/tools.h b/tools/tools.h
index 134e584..5fa1ab6 100644
--- a/tools/tools.h
+++ b/tools/tools.h
@@ -177,4 +177,5 @@ int mirror_remove_missing(struct cmd_context *cmd,
int vgchange_activate(struct cmd_context *cmd, struct volume_group *vg,
activation_change_t activate);
+
#endif
diff --git a/tools/vgdisplay.c b/tools/vgdisplay.c
index 95a5ebd..6e068aa 100644
--- a/tools/vgdisplay.c
+++ b/tools/vgdisplay.c
@@ -39,7 +39,7 @@ static int vgdisplay_single(struct cmd_context *cmd, const char *vg_name,
if (arg_count(cmd, verbose_ARG)) {
vgdisplay_extents(vg);
- process_each_lv_in_vg(cmd, vg, NULL, NULL, NULL,
+ process_each_lv_in_vg(cmd, vg, NULL, NULL, 0, NULL,
(process_single_lv_fn_t)lvdisplay_full);
log_print("--- Physical volumes ---");
diff --git a/tools/vgremove.c b/tools/vgremove.c
index 0bbca76..1dce41f 100644
--- a/tools/vgremove.c
+++ b/tools/vgremove.c
@@ -27,6 +27,7 @@ static int vgremove_single(struct cmd_context *cmd, const char *vg_name,
force_t force = (force_t) arg_count(cmd, force_ARG)
? : (arg_is_set(cmd, yes_ARG) ? DONT_PROMPT : PROMPT);
unsigned lv_count, missing;
+ int ret;
if (!vg_check_status(vg, EXPORTED_VG))
return_ECMD_FAILED;
@@ -46,8 +47,11 @@ static int vgremove_single(struct cmd_context *cmd, const char *vg_name,
return ECMD_FAILED;
}
}
- if (!remove_lvs_in_vg(cmd, vg, force))
- return_ECMD_FAILED;
+ if ((ret = process_each_lv_in_vg(cmd, vg, NULL, NULL, 1, NULL,
+ (process_single_lv_fn_t)lvremove_single)) != ECMD_PROCESSED) {
+ stack;
+ return ret;
+ }
}
if (!force && !vg_remove_check(vg))
More information about the lvm-devel
mailing list