diff options
author | Dave Wysochanski <dwysocha@redhat.com> | 2010-02-24 18:16:26 +0000 |
---|---|---|
committer | Dave Wysochanski <dwysocha@redhat.com> | 2010-02-24 18:16:26 +0000 |
commit | a6ca9ac0bc97e260f59134e8baa9cdefa577fbb4 (patch) | |
tree | bec5674b451f21e5f529e4bf80d4300e9acf5686 /liblvm | |
parent | a8ab58677074d4e112e3dc3a2eb10b964a457a99 (diff) | |
download | lvm2-a6ca9ac0bc97e260f59134e8baa9cdefa577fbb4.tar.gz lvm2-a6ca9ac0bc97e260f59134e8baa9cdefa577fbb4.tar.xz lvm2-a6ca9ac0bc97e260f59134e8baa9cdefa577fbb4.zip |
Add lvm_lv_get_tags(), lvm_lv_add_tag(), and lvm_lv_remove_tag().
Add lvm2app functions to manage LV tags.
For lvm_lv_get_tags(), we return a list of tags, similar to other
functions that return lists. An empty list is returned if there
are no tags. NULL is returned if there is a problem obtaining
the list of tags.
Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
Diffstat (limited to 'liblvm')
-rw-r--r-- | liblvm/.exported_symbols | 3 | ||||
-rw-r--r-- | liblvm/lvm2app.h | 48 | ||||
-rw-r--r-- | liblvm/lvm_lv.c | 35 |
3 files changed, 86 insertions, 0 deletions
diff --git a/liblvm/.exported_symbols b/liblvm/.exported_symbols index 74312489..9b61d452 100644 --- a/liblvm/.exported_symbols +++ b/liblvm/.exported_symbols @@ -26,6 +26,9 @@ lvm_lv_get_name lvm_lv_get_size lvm_lv_is_active lvm_lv_is_suspended +lvm_lv_add_tag +lvm_lv_remove_tag +lvm_lv_get_tags lvm_vg_create lvm_vg_extend lvm_vg_reduce diff --git a/liblvm/lvm2app.h b/liblvm/lvm2app.h index 41ce18c9..e0523012 100644 --- a/liblvm/lvm2app.h +++ b/liblvm/lvm2app.h @@ -835,6 +835,54 @@ uint64_t lvm_lv_is_active(const lv_t lv); uint64_t lvm_lv_is_suspended(const lv_t lv); /** + * Add/remove a tag to/from a LV. + * + * These functions require calling lvm_vg_write to commit the change to disk. + * After successfully adding/removing a tag, use lvm_vg_write to commit the + * new VG to disk. Upon failure, retry the operation or release the VG handle + * with lvm_vg_close. + * + * \param lv + * Logical volume handle. + * + * \param tag + * Tag to add/remove to/from LV. + * + * \return + * 0 (success) or -1 (failure). + */ +int lvm_lv_add_tag(lv_t lv, const char *tag); +int lvm_lv_remove_tag(lv_t lv, const char *tag); + +/** + * Return the list of logical volume tags. + * + * The memory allocated for the list is tied to the vg_t handle and will be + * released when lvm_vg_close is called. + * + * To process the list, use the dm_list iterator functions. For example: + * lv_t lv; + * struct dm_list *tags; + * struct lvm_str_list *strl; + * + * tags = lvm_lv_get_tags(lv); + * dm_list_iterate_items(strl, tags) { + * tag = strl->str; + * // do something with tag + * } + * + * + * \return + * A list with entries of type struct lvm_str_list, containing the + * tag strings attached to volume group. + * If no tags are attached to the LV, an empty list is returned + * (check with dm_list_empty()). + * If there is a problem obtaining the list of tags, NULL is returned. + */ +struct dm_list *lvm_lv_get_tags(const lv_t lv); + + +/** * Resize logical volume to new_size bytes. * * NOTE: This function is currently not implemented. diff --git a/liblvm/lvm_lv.c b/liblvm/lvm_lv.c index 7a37d2c8..86175aeb 100644 --- a/liblvm/lvm_lv.c +++ b/liblvm/lvm_lv.c @@ -20,9 +20,19 @@ #include "segtype.h" #include "locking.h" #include "activate.h" +#include "lvm_misc.h" #include <string.h> +static int _lv_check_handle(const lv_t lv, const int vg_writeable) +{ + if (!lv || !lv->vg || vg_read_error(lv->vg)) + return -1; + if (vg_writeable && !vg_check_write_mode(lv->vg)) + return -1; + return 0; +} + /* FIXME: have lib/report/report.c _disp function call lv_size()? */ uint64_t lvm_lv_get_size(const lv_t lv) { @@ -68,6 +78,31 @@ uint64_t lvm_lv_is_suspended(const lv_t lv) return 0; } +int lvm_lv_add_tag(lv_t lv, const char *tag) +{ + if (_lv_check_handle(lv, 1)) + return -1; + if (!lv_change_tag(lv, tag, 1)) + return -1; + return 0; +} + + +int lvm_lv_remove_tag(lv_t lv, const char *tag) +{ + if (_lv_check_handle(lv, 1)) + return -1; + if (!lv_change_tag(lv, tag, 0)) + return -1; + return 0; +} + + +struct dm_list *lvm_lv_get_tags(const lv_t lv) +{ + return tag_list_copy(lv->vg->vgmem, &lv->tags); +} + /* Set defaults for non-segment specific LV parameters */ static void _lv_set_default_params(struct lvcreate_params *lp, vg_t vg, const char *lvname, |