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:
parent
ccc2e192a0
commit
a8ab586770
@ -18,6 +18,7 @@ lvm_vg_get_extent_size
|
||||
lvm_vg_get_extent_count
|
||||
lvm_vg_get_free_extent_count
|
||||
lvm_vg_get_pv_count
|
||||
lvm_vg_get_tags
|
||||
lvm_lv_activate
|
||||
lvm_lv_deactivate
|
||||
lvm_lv_get_uuid
|
||||
@ -33,6 +34,8 @@ lvm_vg_write
|
||||
lvm_vg_open
|
||||
lvm_vg_close
|
||||
lvm_vg_remove
|
||||
lvm_vg_add_tag
|
||||
lvm_vg_remove_tag
|
||||
lvm_scan
|
||||
lvm_errno
|
||||
lvm_errmsg
|
||||
|
@ -159,10 +159,10 @@ typedef struct lvm_pv_list {
|
||||
* Lists of these structures are returned by lvm_list_vg_names and
|
||||
* lvm_list_vg_uuids.
|
||||
*/
|
||||
struct lvm_str_list {
|
||||
typedef struct lvm_str_list {
|
||||
struct dm_list list;
|
||||
const char *str;
|
||||
};
|
||||
} lvm_str_list_t;
|
||||
|
||||
/*************************** 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);
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
@ -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);
|
||||
|
||||
/**
|
||||
* 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 *************************/
|
||||
|
||||
/**
|
||||
|
@ -21,10 +21,39 @@
|
||||
#include "lvm-string.h"
|
||||
#include "lvmcache.h"
|
||||
#include "metadata.h"
|
||||
#include "lvm_misc.h"
|
||||
|
||||
#include <errno.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)
|
||||
{
|
||||
struct volume_group *vg;
|
||||
@ -233,6 +262,11 @@ struct dm_list *lvm_vg_list_lvs(vg_t vg)
|
||||
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)
|
||||
{
|
||||
return vg_seqno(vg);
|
||||
|
Loading…
Reference in New Issue
Block a user