1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-20 18:09:23 +03:00
lvm2/liblvm/lvm_vg.c
Dave Wysochanski 930a1434ac Add lvm_vg_* APIs to create and modify VGs.
Add some liblvm APIs for VGs.  Most of these APIs simply call into the internal
liblvm library.  Ideally we should call the liblvm functions directly from
the tools.  However, until we convert more of the code to liblvm functions,
things like the cmd_context will get in the way.  For now just implement the
liblvm functions as wrappers around the internal functions, with a little
error checking and return code handling.  We put all these vg APIs into a
new file, lvm_vg.c

The following APIs are implemented:
lvm_vg_create, lvm_vg_extend, lvm_vg_set_extent_size, lvm_vg_write,
lvm_vg_remove, lvm_vg_close.

Still TODO:
- cleanup error handling by using lvm_errno() and related APIs
- cleanup naming / clarify which functions commit to disk vs not
- implement more 'set' functions
- decide on 'set' / 'change' nomenclature

Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
Acked-by: Alasdair G Kergon <agk@redhat.com>
2009-07-14 03:02:14 +00:00

85 lines
1.5 KiB
C

/*
* Copyright (C) 2008,2009 Red Hat, Inc. All rights reserved.
*
* This file is part of LVM2.
*
* This copyrighted material is made available to anyone wishing to use,
* modify, copy, or redistribute it subject to the terms and conditions
* of the GNU Lesser General Public License v.2.1.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "lib.h"
#include "lvm.h"
#include "toolcontext.h"
#include "metadata-exported.h"
#include "archiver.h"
#include "locking.h"
vg_t *lvm_vg_create(lvm_t libh, const char *vg_name)
{
return vg_create((struct cmd_context *)libh, vg_name);
}
int lvm_vg_extend(vg_t *vg, const char *device)
{
if (vg_read_error(vg))
goto_bad;
return vg_extend(vg, 1, (char **) &device);
bad:
return 0;
}
int lvm_vg_set_extent_size(vg_t *vg, uint32_t new_size)
{
if (vg_read_error(vg))
goto_bad;
return vg_set_extent_size(vg, new_size);
bad:
return 0;
}
int lvm_vg_write(vg_t *vg)
{
if (vg_read_error(vg))
goto_bad;
if (!archive(vg)) {
goto_bad;
}
/* Store VG on disk(s) */
if (!vg_write(vg) || !vg_commit(vg)) {
goto_bad;
}
return 1;
bad:
return 0;
}
int lvm_vg_close(vg_t *vg)
{
if (vg_read_error(vg))
goto_bad;
unlock_and_release_vg(vg->cmd, vg, vg->name);
return 1;
bad:
return 0;
}
int lvm_vg_remove(vg_t *vg)
{
if (vg_read_error(vg))
goto_bad;
return vg_remove_single(vg);
bad:
return 0;
}