1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-03-31 14:50:37 +03:00

This patch adds helpers to allow users to lookup a lv or pv handle by

uuid (given a vg_t of course).

Signed-off-by: Dave Wysochanski <wysochanski@pobox.com>
Reviewed-by: Petr Rockai <prockai@redhat.com>
This commit is contained in:
Petr Rockai 2010-11-25 14:34:51 +00:00
parent 2ac0e8f989
commit 8779301c8d
3 changed files with 82 additions and 0 deletions

View File

@ -1031,6 +1031,25 @@ struct dm_list *lvm_lv_list_lvsegs(lv_t lv);
*/
lv_t lvm_lv_from_name(vg_t vg, const char *name);
/**
* Lookup an LV handle in a VG by the LV uuid.
* The form of the uuid may be either the formatted, human-readable form,
* or the non-formatted form.
*
* \memberof lv_t
*
* \param vg
* VG handle obtained from lvm_vg_create() or lvm_vg_open().
*
* \param uuid
* UUID of LV to lookup.
*
* \return
* non-NULL handle to the LV with 'uuid' attached to the VG.
* NULL is returned if the LV uuid is not associated with the VG handle.
*/
lv_t lvm_lv_from_uuid(vg_t vg, const char *uuid);
/**
* Activate a logical volume.
*
@ -1522,6 +1541,25 @@ struct dm_list *lvm_pv_list_pvsegs(pv_t pv);
*/
pv_t lvm_pv_from_name(vg_t vg, const char *name);
/**
* Lookup an PV handle in a VG by the PV uuid.
* The form of the uuid may be either the formatted, human-readable form,
* or the non-formatted form.
*
* \memberof pv_t
*
* \param vg
* VG handle obtained from lvm_vg_create() or lvm_vg_open().
*
* \param uuid
* UUID of PV to lookup.
*
* \return
* non-NULL handle to the PV with 'uuid' attached to the VG.
* NULL is returned if the PV uuid is not associated with the VG handle.
*/
pv_t lvm_pv_from_uuid(vg_t vg, const char *uuid);
/**
* Resize physical volume to new_size bytes.
*

View File

@ -260,6 +260,28 @@ lv_t lvm_lv_from_name(vg_t vg, const char *name)
return NULL;
}
lv_t lvm_lv_from_uuid(vg_t vg, const char *uuid)
{
struct lv_list *lvl;
struct id id;
if (strlen(uuid) < ID_LEN) {
log_errno (EINVAL, "Invalid UUID string length");
return NULL;
}
if (strlen(uuid) >= ID_LEN) {
if (!id_read_format(&id, uuid)) {
log_errno(EINVAL, "Invalid UUID format");
return NULL;
}
}
dm_list_iterate_items(lvl, &vg->lvs) {
if (id_equal(&vg->id, &lvl->lv->lvid.id[0]) &&
id_equal(&id, &lvl->lv->lvid.id[1]))
return lvl->lv;
}
return NULL;
}
int lvm_lv_resize(const lv_t lv, uint64_t new_size)
{
/* FIXME: add lv resize code here */

View File

@ -98,6 +98,28 @@ pv_t lvm_pv_from_name(vg_t vg, const char *name)
return NULL;
}
pv_t lvm_pv_from_uuid(vg_t vg, const char *uuid)
{
struct pv_list *pvl;
struct id id;
if (strlen(uuid) < ID_LEN) {
log_errno (EINVAL, "Invalid UUID string length");
return NULL;
}
if (strlen(uuid) >= ID_LEN) {
if (!id_read_format(&id, uuid)) {
log_errno(EINVAL, "Invalid UUID format");
return NULL;
}
}
dm_list_iterate_items(pvl, &vg->pvs) {
if (id_equal(&id, &pvl->pv->id))
return pvl->pv;
}
return NULL;
}
int lvm_pv_resize(const pv_t pv, uint64_t new_size)
{