diff options
author | Peter Rajnoha <prajnoha@redhat.com> | 2015-08-20 16:14:04 +0200 |
---|---|---|
committer | Peter Rajnoha <prajnoha@redhat.com> | 2016-02-03 17:40:31 +0100 |
commit | 3226a6ae14d846d0e504498e822710a77ef7b19e (patch) | |
tree | 3ef54b6e017c04e8ff51d3c0d6417f9d39682048 | |
parent | 6464cb3a42e861a1c7ab80a99e29c4afff225eff (diff) | |
download | lvm2-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.h | 5 | ||||
-rw-r--r-- | lib/metadata/metadata.c | 26 |
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; |