summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Rajnoha <prajnoha@redhat.com>2015-08-20 16:14:04 +0200
committerPeter Rajnoha <prajnoha@redhat.com>2016-02-03 17:40:31 +0100
commit3226a6ae14d846d0e504498e822710a77ef7b19e (patch)
tree3ef54b6e017c04e8ff51d3c0d6417f9d39682048
parent6464cb3a42e861a1c7ab80a99e29c4afff225eff (diff)
downloadlvm2-3226a6ae14d846d0e504498e822710a77ef7b19e.tar.gz
metadata: add find_dead_glv fn
The find_dead_glv is a helper function that looks up dead LV in struct volume_group's dead_lvs list and returns it if found.
-rw-r--r--lib/metadata/metadata-exported.h5
-rw-r--r--lib/metadata/metadata.c26
2 files changed, 31 insertions, 0 deletions
diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
index 5ae28f432..55c0cbe86 100644
--- a/lib/metadata/metadata-exported.h
+++ b/lib/metadata/metadata-exported.h
@@ -990,6 +990,11 @@ struct lv_list *find_lv_in_vg(const struct volume_group *vg,
/* FIXME Merge these functions with ones above */
struct logical_volume *find_lv(const struct volume_group *vg,
const char *lv_name);
+
+struct generic_logical_volume *find_dead_glv(const struct volume_group *vg,
+ const char *dead_lv_name,
+ struct glv_list **glvl_found);
+
struct physical_volume *find_pv_by_name(struct cmd_context *cmd,
const char *pv_name,
int allow_orphan, int allow_unformatted);
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index d8bad0c3e..054173f37 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -2031,6 +2031,32 @@ struct logical_volume *find_lv(const struct volume_group *vg,
return lvl ? lvl->lv : NULL;
}
+struct generic_logical_volume *find_dead_glv(const struct volume_group *vg,
+ const char *dead_lv_name,
+ struct glv_list **glvl_found)
+{
+ struct glv_list *glvl;
+ const char *ptr;
+
+ /* Use last component */
+ if ((ptr = strrchr(dead_lv_name, '/')))
+ ptr++;
+ else
+ ptr = dead_lv_name;
+
+ dm_list_iterate_items(glvl, &vg->dead_lvs) {
+ if (!strcmp(glvl->glv->dead->dname, ptr)) {
+ if (glvl_found)
+ *glvl_found = glvl;
+ return glvl->glv;
+ }
+ }
+
+ if (glvl_found)
+ *glvl_found = NULL;
+ return NULL;
+}
+
struct physical_volume *find_pv(struct volume_group *vg, struct device *dev)
{
struct pv_list *pvl;