1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-03 05:18:29 +03:00

Add lvm_vg_get_tags(), lvm_vg_add_tag(), and lvm_vg_remove_tag().

Add lvm2app functions to manage VG tags.
For lvm_vg_get_tags(), we return a list of tags, similar to other
functions that return lists.  An empty list is returned if there
are no VG tags.  NULL is returned if there is a problem obtaining
the list of tags.

Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
This commit is contained in:
Dave Wysochanski 2010-02-24 18:16:18 +00:00
parent ccc2e192a0
commit a8ab586770
3 changed files with 86 additions and 2 deletions

View File

@ -18,6 +18,7 @@ lvm_vg_get_extent_size
lvm_vg_get_extent_count lvm_vg_get_extent_count
lvm_vg_get_free_extent_count lvm_vg_get_free_extent_count
lvm_vg_get_pv_count lvm_vg_get_pv_count
lvm_vg_get_tags
lvm_lv_activate lvm_lv_activate
lvm_lv_deactivate lvm_lv_deactivate
lvm_lv_get_uuid lvm_lv_get_uuid
@ -33,6 +34,8 @@ lvm_vg_write
lvm_vg_open lvm_vg_open
lvm_vg_close lvm_vg_close
lvm_vg_remove lvm_vg_remove
lvm_vg_add_tag
lvm_vg_remove_tag
lvm_scan lvm_scan
lvm_errno lvm_errno
lvm_errmsg lvm_errmsg

View File

@ -159,10 +159,10 @@ typedef struct lvm_pv_list {
* Lists of these structures are returned by lvm_list_vg_names and * Lists of these structures are returned by lvm_list_vg_names and
* lvm_list_vg_uuids. * lvm_list_vg_uuids.
*/ */
struct lvm_str_list { typedef struct lvm_str_list {
struct dm_list list; struct dm_list list;
const char *str; const char *str;
}; } lvm_str_list_t;
/*************************** generic lvm handling ***************************/ /*************************** generic lvm handling ***************************/
/** /**
@ -457,6 +457,26 @@ int lvm_vg_extend(vg_t vg, const char *device);
*/ */
int lvm_vg_reduce(vg_t vg, const char *device); int lvm_vg_reduce(vg_t vg, const char *device);
/**
* Add/remove a tag to/from a VG.
*
* 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 vg
* VG handle obtained from lvm_vg_create or lvm_vg_open.
*
* \param tag
* Tag to add/remove to/from VG.
*
* \return
* 0 (success) or -1 (failure).
*/
int lvm_vg_add_tag(vg_t vg, const char *tag);
int lvm_vg_remove_tag(vg_t vg, const char *tag);
/** /**
* Set the extent size of a VG. * Set the extent size of a VG.
* *
@ -644,6 +664,33 @@ uint64_t lvm_vg_get_max_pv(const vg_t vg);
*/ */
uint64_t lvm_vg_get_max_lv(const vg_t vg); uint64_t lvm_vg_get_max_lv(const vg_t vg);
/**
* Return the list of volume group 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:
* vg_t vg;
* struct dm_list *tags;
* struct lvm_str_list *strl;
*
* tags = lvm_vg_get_tags(vg);
* 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 given VG, 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_vg_get_tags(const vg_t vg);
/************************** logical volume handling *************************/ /************************** logical volume handling *************************/
/** /**

View File

@ -21,10 +21,39 @@
#include "lvm-string.h" #include "lvm-string.h"
#include "lvmcache.h" #include "lvmcache.h"
#include "metadata.h" #include "metadata.h"
#include "lvm_misc.h"
#include <errno.h> #include <errno.h>
#include <string.h> #include <string.h>
int lvm_vg_add_tag(vg_t vg, const char *tag)
{
if (vg_read_error(vg))
return -1;
if (!vg_check_write_mode(vg))
return -1;
if (!vg_change_tag(vg, tag, 1))
return -1;
return 0;
}
int lvm_vg_remove_tag(vg_t vg, const char *tag)
{
if (vg_read_error(vg))
return -1;
if (!vg_check_write_mode(vg))
return -1;
if (!vg_change_tag(vg, tag, 0))
return -1;
return 0;
}
vg_t lvm_vg_create(lvm_t libh, const char *vg_name) vg_t lvm_vg_create(lvm_t libh, const char *vg_name)
{ {
struct volume_group *vg; struct volume_group *vg;
@ -233,6 +262,11 @@ struct dm_list *lvm_vg_list_lvs(vg_t vg)
return list; return list;
} }
struct dm_list *lvm_vg_get_tags(const vg_t vg)
{
return tag_list_copy(vg->vgmem, &vg->tags);
}
uint64_t lvm_vg_get_seqno(const vg_t vg) uint64_t lvm_vg_get_seqno(const vg_t vg)
{ {
return vg_seqno(vg); return vg_seqno(vg);