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_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
|
||||||
|
@ -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 *************************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user