From 424f396e428573b3e1a9e0aa0252ba452f36ec76 Mon Sep 17 00:00:00 2001 From: Dave Wysochanski Date: Sun, 26 Jul 2009 20:58:11 +0000 Subject: [PATCH] Add lvm_lv_is_active and lvm_lv_is_suspended. Return whether an LV is active in the kernel (live table) or suspended (table suspend). Author: Dave Wysochanski --- liblvm/.exported_symbols | 2 ++ liblvm/lvm.h | 18 ++++++++++++++++++ liblvm/lvm_lv.c | 19 +++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/liblvm/.exported_symbols b/liblvm/.exported_symbols index 6708154d0..991142304 100644 --- a/liblvm/.exported_symbols +++ b/liblvm/.exported_symbols @@ -17,6 +17,8 @@ lvm_lv_deactivate lvm_lv_get_uuid lvm_lv_get_name lvm_lv_get_size +lvm_lv_is_active +lvm_lv_is_suspended lvm_vg_create lvm_vg_extend lvm_vg_set_extent_size diff --git a/liblvm/lvm.h b/liblvm/lvm.h index 13c723d27..c2fef96a6 100644 --- a/liblvm/lvm.h +++ b/liblvm/lvm.h @@ -516,6 +516,24 @@ char *lvm_lv_get_name(const lv_t *lv); */ uint64_t lvm_lv_get_size(const lv_t *lv); +/** + * Get the current activation state of a logical volume. + * + * \param lv + * Logical volume handle. + * \return 1 if the LV is active in the kernel, 0 if not + */ +uint64_t lvm_lv_is_active(const lv_t *lv); + +/** + * Get the current suspended state of a logical volume. + * + * \param lv + * Logical volume handle. + * \return 1 if the LV is suspended in the kernel, 0 if not + */ +uint64_t lvm_lv_is_suspended(const lv_t *lv); + /************************** physical volume handling ************************/ /** diff --git a/liblvm/lvm_lv.c b/liblvm/lvm_lv.c index 78057afe8..a2436ed44 100644 --- a/liblvm/lvm_lv.c +++ b/liblvm/lvm_lv.c @@ -19,6 +19,7 @@ #include "defaults.h" #include "segtype.h" #include "locking.h" +#include "activate.h" #include @@ -49,6 +50,24 @@ char *lvm_lv_get_name(const lv_t *lv) return name; } +uint64_t lvm_lv_is_active(const lv_t *lv) +{ + struct lvinfo info; + if (lv_info(lv->vg->cmd, lv, &info, 1, 0) && + info.exists && info.live_table) + return 1; + return 0; +} + +uint64_t lvm_lv_is_suspended(const lv_t *lv) +{ + struct lvinfo info; + if (lv_info(lv->vg->cmd, lv, &info, 1, 0) && + info.exists && info.suspended) + return 1; + return 0; +} + /* Set defaults for non-segment specific LV parameters */ static void _lv_set_default_params(struct lvcreate_params *lp, vg_t *vg, const char *lvname, -- 2.43.5