public inbox for lvm2-cvs@sourceware.org
help / color / mirror / Atom feed
* LVM2 lib/format1/format1.c lib/format_pool/for ...
@ 2011-02-21 12:16 prajnoha
0 siblings, 0 replies; 5+ messages in thread
From: prajnoha @ 2011-02-21 12:16 UTC (permalink / raw)
To: lvm-devel, lvm2-cvs
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: prajnoha@sourceware.org 2011-02-21 12:16:00
Modified files:
lib/format1 : format1.c
lib/format_pool: format_pool.c
lib/format_text: format-text.c
lib/metadata : metadata-exported.h metadata.c metadata.h
tools : pvremove.c pvresize.c toollib.c
Log message:
Remove useless mdas parameter for pv_read (from now on, we store mdas in a
format instance)
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format1/format1.c.diff?cvsroot=lvm2&r1=1.128&r2=1.129
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_pool/format_pool.c.diff?cvsroot=lvm2&r1=1.36&r2=1.37
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.157&r2=1.158
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata-exported.h.diff?cvsroot=lvm2&r1=1.177&r2=1.178
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.429&r2=1.430
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.h.diff?cvsroot=lvm2&r1=1.232&r2=1.233
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/pvremove.c.diff?cvsroot=lvm2&r1=1.31&r2=1.32
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/pvresize.c.diff?cvsroot=lvm2&r1=1.38&r2=1.39
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/toollib.c.diff?cvsroot=lvm2&r1=1.221&r2=1.222
--- LVM2/lib/format1/format1.c 2011/02/21 12:05:49 1.128
+++ LVM2/lib/format1/format1.c 2011/02/21 12:15:59 1.129
@@ -331,8 +331,7 @@
}
static int _format1_pv_read(const struct format_type *fmt, const char *pv_name,
- struct physical_volume *pv, struct dm_list *mdas __attribute__((unused)),
- int scan_label_only __attribute__((unused)))
+ struct physical_volume *pv, int scan_label_only __attribute__((unused)))
{
struct dm_pool *mem = dm_pool_create("lvm1 pv_read", 1024);
struct disk_list *dl;
--- LVM2/lib/format_pool/format_pool.c 2011/02/21 12:05:50 1.36
+++ LVM2/lib/format_pool/format_pool.c 2011/02/21 12:15:59 1.37
@@ -206,7 +206,6 @@
static int _pool_pv_read(const struct format_type *fmt, const char *pv_name,
struct physical_volume *pv,
- struct dm_list *mdas __attribute__((unused)),
int scan_label_only __attribute__((unused)))
{
struct dm_pool *mem = dm_pool_create("pool pv_read", 1024);
--- LVM2/lib/format_text/format-text.c 2011/02/21 12:07:03 1.157
+++ LVM2/lib/format_text/format-text.c 2011/02/21 12:15:59 1.158
@@ -1668,10 +1668,8 @@
}
static int _text_pv_read(const struct format_type *fmt, const char *pv_name,
- struct physical_volume *pv, struct dm_list *mdas,
- int scan_label_only)
+ struct physical_volume *pv, int scan_label_only)
{
- struct metadata_area *mda, *mda_new;
struct label *label;
struct device *dev;
struct lvmcache_info *info;
@@ -1686,17 +1684,6 @@
if (!_populate_pv_fields(info, pv, scan_label_only))
return 0;
- if (!mdas)
- return 1;
-
- /* Add copy of mdas to supplied list */
- dm_list_iterate_items(mda, &info->mdas) {
- mda_new = mda_copy(fmt->cmd->mem, mda);
- if (!mda_new)
- return 0;
- dm_list_add(mdas, &mda_new->list);
- }
-
return 1;
}
--- LVM2/lib/metadata/metadata-exported.h 2011/02/21 12:01:22 1.177
+++ LVM2/lib/metadata/metadata-exported.h 2011/02/21 12:16:00 1.178
@@ -368,8 +368,8 @@
struct volume_group *vg_read_internal(struct cmd_context *cmd, const char *vg_name,
const char *vgid, int warnings, int *consistent);
struct physical_volume *pv_read(struct cmd_context *cmd, const char *pv_name,
- struct dm_list *mdas, uint64_t *label_sector,
- int warnings, int scan_label_only);
+ uint64_t *label_sector, int warnings,
+ int scan_label_only);
struct dm_list *get_pvs(struct cmd_context *cmd);
/*
--- LVM2/lib/metadata/metadata.c 2011/02/21 12:13:40 1.429
+++ LVM2/lib/metadata/metadata.c 2011/02/21 12:16:00 1.430
@@ -38,7 +38,6 @@
struct dm_pool *pvmem,
const char *pv_name,
struct format_instance *fid,
- struct dm_list *mdas,
uint64_t *label_sector,
int warnings, int scan_label_only);
@@ -1338,14 +1337,11 @@
{
struct physical_volume *pv;
struct device *dev;
- struct dm_list mdas;
-
- dm_list_init(&mdas);
/* FIXME Check partition type is LVM unless --force is given */
/* Is there a pv here already? */
- pv = pv_read(cmd, name, &mdas, NULL, 0, 0);
+ pv = pv_read(cmd, name, NULL, 0, 0);
/*
* If a PV has no MDAs it may appear to be an orphan until the
@@ -1353,10 +1349,10 @@
* this means checking every VG by scanning every PV on the
* system.
*/
- if (pv && is_orphan(pv) && mdas_empty_or_ignored(&mdas)) {
+ if (pv && is_orphan(pv) && !dm_list_size(&pv->fid->metadata_areas_in_use)) {
if (!scan_vgs_for_pvs(cmd, 0))
return_0;
- pv = pv_read(cmd, name, NULL, NULL, 0, 0);
+ pv = pv_read(cmd, name, NULL, 0, 0);
}
/* Allow partial & exported VGs to be destroyed. */
@@ -1821,20 +1817,18 @@
static struct physical_volume *_find_pv_by_name(struct cmd_context *cmd,
const char *pv_name)
{
- struct dm_list mdas;
struct physical_volume *pv;
- dm_list_init(&mdas);
- if (!(pv = _pv_read(cmd, cmd->mem, pv_name, NULL, &mdas, NULL, 1, 0))) {
+ if (!(pv = _pv_read(cmd, cmd->mem, pv_name, NULL, NULL, 1, 0))) {
log_error("Physical volume %s not found", pv_name);
return NULL;
}
- if (is_orphan_vg(pv->vg_name) && mdas_empty_or_ignored(&mdas)) {
+ if (is_orphan_vg(pv->vg_name) && !dm_list_size(&pv->fid->metadata_areas_in_use)) {
/* If a PV has no MDAs - need to search all VGs for it */
if (!scan_vgs_for_pvs(cmd, 1))
return_NULL;
- if (!(pv = _pv_read(cmd, cmd->mem, pv_name, NULL, NULL, NULL, 1, 0))) {
+ if (!(pv = _pv_read(cmd, cmd->mem, pv_name, NULL, NULL, 1, 0))) {
log_error("Physical volume %s not found", pv_name);
return NULL;
}
@@ -2659,8 +2653,8 @@
}
dm_list_iterate_items(info, &vginfo->infos) {
- if (!(pv = _pv_read(cmd, mem, dev_name(info->dev), vg->fid,
- NULL, NULL, warnings, 0))) {
+ if (!(pv = _pv_read(cmd, mem, dev_name(info->dev),
+ vg->fid, NULL, warnings, 0))) {
continue;
}
if (!(pvl = dm_pool_zalloc(mem, sizeof(*pvl)))) {
@@ -3377,10 +3371,10 @@
* FIXME - liblvm todo - make into function that returns handle
*/
struct physical_volume *pv_read(struct cmd_context *cmd, const char *pv_name,
- struct dm_list *mdas, uint64_t *label_sector,
- int warnings, int scan_label_only)
+ uint64_t *label_sector, int warnings,
+ int scan_label_only)
{
- return _pv_read(cmd, cmd->mem, pv_name, NULL, mdas, label_sector, warnings, scan_label_only);
+ return _pv_read(cmd, cmd->mem, pv_name, NULL, label_sector, warnings, scan_label_only);
}
/* FIXME Use label functions instead of PV functions */
@@ -3388,7 +3382,6 @@
struct dm_pool *pvmem,
const char *pv_name,
struct format_instance *fid,
- struct dm_list *mdas,
uint64_t *label_sector,
int warnings, int scan_label_only)
{
@@ -3419,8 +3412,7 @@
}
/* FIXME Move more common code up here */
- if (!(info->fmt->ops->pv_read(info->fmt, pv_name, pv, mdas,
- scan_label_only))) {
+ if (!(info->fmt->ops->pv_read(info->fmt, pv_name, pv, scan_label_only))) {
log_error("Failed to read existing physical volume '%s'",
pv_name);
goto bad;
@@ -4258,8 +4250,5 @@
*/
struct physical_volume *pv_by_path(struct cmd_context *cmd, const char *pv_name)
{
- struct dm_list mdas;
-
- dm_list_init(&mdas);
- return _pv_read(cmd, cmd->mem, pv_name, NULL, &mdas, NULL, 1, 0);
+ return _pv_read(cmd, cmd->mem, pv_name, NULL, NULL, 1, 0);
}
--- LVM2/lib/metadata/metadata.h 2011/02/21 12:10:59 1.232
+++ LVM2/lib/metadata/metadata.h 2011/02/21 12:16:00 1.233
@@ -252,8 +252,7 @@
* Return PV with given path.
*/
int (*pv_read) (const struct format_type * fmt, const char *pv_name,
- struct physical_volume * pv, struct dm_list *mdas,
- int scan_label_only);
+ struct physical_volume * pv, int scan_label_only);
/*
* Tweak an already filled out a pv ready for importing into a
--- LVM2/tools/pvremove.c 2010/11/23 01:56:02 1.31
+++ LVM2/tools/pvremove.c 2011/02/21 12:16:00 1.32
@@ -25,15 +25,12 @@
static int pvremove_check(struct cmd_context *cmd, const char *name)
{
struct physical_volume *pv;
- struct dm_list mdas;
-
- dm_list_init(&mdas);
/* FIXME Check partition type is LVM unless --force is given */
/* Is there a pv here already? */
/* If not, this is an error unless you used -f. */
- if (!(pv = pv_read(cmd, name, &mdas, NULL, 1, 0))) {
+ if (!(pv = pv_read(cmd, name, NULL, 1, 0))) {
if (arg_count(cmd, force_ARG))
return 1;
log_error("Physical Volume %s not found", name);
@@ -47,13 +44,14 @@
* means checking every VG by scanning every
* PV on the system.
*/
- if (is_orphan(pv) && !dm_list_size(&mdas)) {
+ if (is_orphan(pv) && !dm_list_size(&pv->fid->metadata_areas_in_use) &&
+ !dm_list_size(&pv->fid->metadata_areas_ignored)) {
if (!scan_vgs_for_pvs(cmd, 0)) {
log_error("Rescan for PVs without metadata areas "
"failed.");
return 0;
}
- if (!(pv = pv_read(cmd, name, NULL, NULL, 1, 0))) {
+ if (!(pv = pv_read(cmd, name, NULL, 1, 0))) {
log_error("Failed to read physical volume %s", name);
return 0;
}
--- LVM2/tools/pvresize.c 2011/02/18 14:11:23 1.38
+++ LVM2/tools/pvresize.c 2011/02/21 12:16:00 1.39
@@ -32,28 +32,26 @@
uint64_t size = 0;
uint32_t new_pe_count = 0;
int r = 0;
- struct dm_list mdas;
const char *pv_name = pv_dev_name(pv);
const char *vg_name = pv_vg_name(pv);
struct lvmcache_info *info;
int mda_count = 0;
struct volume_group *old_vg = vg;
- dm_list_init(&mdas);
-
if (is_orphan_vg(vg_name)) {
if (!lock_vol(cmd, vg_name, LCK_VG_WRITE)) {
log_error("Can't get lock for orphans");
return 0;
}
- if (!(pv = pv_read(cmd, pv_name, &mdas, NULL, 1, 0))) {
+ if (!(pv = pv_read(cmd, pv_name, NULL, 1, 0))) {
unlock_vg(cmd, vg_name);
log_error("Unable to read PV \"%s\"", pv_name);
return 0;
}
- mda_count = dm_list_size(&mdas);
+ mda_count = dm_list_size(&pv->fid->metadata_areas_in_use) +
+ dm_list_size(&pv->fid->metadata_areas_ignored);
} else {
vg = vg_read_for_update(cmd, vg_name, NULL, 0);
--- LVM2/tools/toollib.c 2011/02/18 15:02:25 1.221
+++ LVM2/tools/toollib.c 2011/02/21 12:16:00 1.222
@@ -649,7 +649,7 @@
}
while ((dev = dev_iter_get(iter))) {
- if (!(pv = pv_read(cmd, dev_name(dev), NULL, NULL, 0, 0))) {
+ if (!(pv = pv_read(cmd, dev_name(dev), NULL, 0, 0))) {
memset(&pv_dummy, 0, sizeof(pv_dummy));
dm_list_init(&pv_dummy.tags);
dm_list_init(&pv_dummy.segments);
@@ -691,7 +691,6 @@
struct str_list *sll;
char *at_sign, *tagname;
int scanned = 0;
- struct dm_list mdas;
dm_list_init(&tags);
@@ -733,10 +732,8 @@
}
pv = pvl->pv;
} else {
-
- dm_list_init(&mdas);
- if (!(pv = pv_read(cmd, argv[opt], &mdas,
- NULL, 1, scan_label_only))) {
+ if (!(pv = pv_read(cmd, argv[opt], NULL,
+ 1, scan_label_only))) {
log_error("Failed to read physical "
"volume \"%s\"", argv[opt]);
ret_max = ECMD_FAILED;
@@ -751,7 +748,8 @@
* PV on the system.
*/
if (!scanned && is_orphan(pv) &&
- !dm_list_size(&mdas)) {
+ !dm_list_size(&pv->fid->metadata_areas_in_use) &&
+ !dm_list_size(&pv->fid->metadata_areas_ignored)) {
if (!scan_label_only &&
!scan_vgs_for_pvs(cmd, 1)) {
stack;
@@ -760,7 +758,7 @@
}
scanned = 1;
if (!(pv = pv_read(cmd, argv[opt],
- NULL, NULL, 1,
+ NULL, 1,
scan_label_only))) {
log_error("Failed to read "
"physical volume "
^ permalink raw reply [flat|nested] 5+ messages in thread
* LVM2 lib/format1/format1.c lib/format_pool/for ...
@ 2011-03-10 12:43 zkabelac
0 siblings, 0 replies; 5+ messages in thread
From: zkabelac @ 2011-03-10 12:43 UTC (permalink / raw)
To: lvm-devel, lvm2-cvs
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: zkabelac@sourceware.org 2011-03-10 12:43:30
Modified files:
lib/format1 : format1.c
lib/format_pool: format_pool.c
lib/format_text: import_vsn1.c
lib/metadata : metadata.c vg.c vg.h
. : WHATS_NEW
Log message:
Refactor vg allocation code
Create new function alloc_vg() to allocate VG structure.
It takes pool_name (for easier debugging).
and also take vg_name to futher simplify code.
Move remainder of _build_vg_from_pds to _pool_vg_read
and use vg memory pool for import functions.
(it's been using smem -> fid mempool -> cmd mempool)
(FIXME: remove mempool parameter for import functions and use vg).
Move remainder of the _build_vg to _format1_vg_read
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format1/format1.c.diff?cvsroot=lvm2&r1=1.133&r2=1.134
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_pool/format_pool.c.diff?cvsroot=lvm2&r1=1.39&r2=1.40
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/import_vsn1.c.diff?cvsroot=lvm2&r1=1.82&r2=1.83
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.437&r2=1.438
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/vg.c.diff?cvsroot=lvm2&r1=1.8&r2=1.9
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/vg.h.diff?cvsroot=lvm2&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1940&r2=1.1941
--- LVM2/lib/format1/format1.c 2011/02/25 14:12:14 1.133
+++ LVM2/lib/format1/format1.c 2011/03/10 12:43:29 1.134
@@ -177,84 +177,58 @@
return 0;
}
-static struct volume_group *_build_vg(struct format_instance *fid,
- struct dm_list *pvs,
- struct dm_pool *mem)
+static struct volume_group *_format1_vg_read(struct format_instance *fid,
+ const char *vg_name,
+ struct metadata_area *mda __attribute__((unused)))
{
- struct volume_group *vg = dm_pool_zalloc(mem, sizeof(*vg));
+ struct volume_group *vg;
struct disk_list *dl;
+ DM_LIST_INIT(pvs);
+
+ /* Strip dev_dir if present */
+ vg_name = strip_dir(vg_name, fid->fmt->cmd->dev_dir);
+
+ if (!(vg = alloc_vg("format1_vg_read", fid->fmt->cmd, NULL)))
+ return_NULL;
- if (!vg)
+ if (!read_pvs_in_vg(fid->fmt, vg_name, fid->fmt->cmd->filter,
+ vg->vgmem, &pvs))
goto_bad;
- if (dm_list_empty(pvs))
+ if (dm_list_empty(&pvs))
goto_bad;
- vg->cmd = fid->fmt->cmd;
- vg->vgmem = mem;
vg->fid = fid;
- vg->seqno = 0;
- dm_list_init(&vg->pvs);
- dm_list_init(&vg->lvs);
- dm_list_init(&vg->tags);
- dm_list_init(&vg->removed_pvs);
- if (!_check_vgs(pvs, vg))
+ if (!_check_vgs(&pvs, vg))
goto_bad;
- dl = dm_list_item(pvs->n, struct disk_list);
+ dl = dm_list_item(pvs.n, struct disk_list);
- if (!import_vg(mem, vg, dl))
+ if (!import_vg(vg->vgmem, vg, dl))
goto_bad;
- if (!import_pvs(fid->fmt, mem, vg, pvs))
+ if (!import_pvs(fid->fmt, vg->vgmem, vg, &pvs))
goto_bad;
- if (!import_lvs(mem, vg, pvs))
+ if (!import_lvs(vg->vgmem, vg, &pvs))
goto_bad;
- if (!import_extents(fid->fmt->cmd, vg, pvs))
+ if (!import_extents(fid->fmt->cmd, vg, &pvs))
goto_bad;
- if (!import_snapshots(mem, vg, pvs))
+ if (!import_snapshots(vg->vgmem, vg, &pvs))
goto_bad;
/* Fix extents counts by adding missing PV if partial VG */
- if ((vg->status & PARTIAL_VG) && !_fix_partial_vg(vg, pvs))
+ if ((vg->status & PARTIAL_VG) && !_fix_partial_vg(vg, &pvs))
goto_bad;
return vg;
- bad:
- dm_pool_free(mem, vg);
- return NULL;
-}
-
-static struct volume_group *_format1_vg_read(struct format_instance *fid,
- const char *vg_name,
- struct metadata_area *mda __attribute__((unused)))
-{
- struct dm_pool *mem = dm_pool_create("lvm1 vg_read", VG_MEMPOOL_CHUNK);
- struct dm_list pvs;
- struct volume_group *vg = NULL;
- dm_list_init(&pvs);
-
- if (!mem)
- return_NULL;
-
- /* Strip dev_dir if present */
- vg_name = strip_dir(vg_name, fid->fmt->cmd->dev_dir);
-
- if (!read_pvs_in_vg
- (fid->fmt, vg_name, fid->fmt->cmd->filter, mem, &pvs))
- goto_bad;
-
- if (!(vg = _build_vg(fid, &pvs, mem)))
- goto_bad;
-
- return vg;
bad:
- dm_pool_destroy(mem);
+ free(vg);
+
return NULL;
}
--- LVM2/lib/format_pool/format_pool.c 2011/02/21 12:24:16 1.39
+++ LVM2/lib/format_pool/format_pool.c 2011/03/10 12:43:29 1.40
@@ -98,93 +98,65 @@
return 1;
}
-static struct volume_group *_build_vg_from_pds(struct format_instance
- *fid, struct dm_pool *mem,
- struct dm_list *pds)
-{
- struct dm_pool *smem = fid->fmt->cmd->mem;
- struct volume_group *vg = NULL;
- struct user_subpool *usp = NULL;
+static struct volume_group *_pool_vg_read(struct format_instance *fid,
+ const char *vg_name,
+ struct metadata_area *mda __attribute__((unused)))
+{
+ struct volume_group *vg;
+ struct user_subpool *usp;
int sp_count;
+ DM_LIST_INIT(pds);
- if (!(vg = dm_pool_zalloc(smem, sizeof(*vg)))) {
- log_error("Unable to allocate volume group structure");
- return NULL;
- }
+ /* We can safely ignore the mda passed in */
+
+ /* Strip dev_dir if present */
+ vg_name = strip_dir(vg_name, fid->fmt->cmd->dev_dir);
+
+ /* Set vg_name through read_pool_pds() */
+ if (!(vg = alloc_vg("pool_vg_read", fid->fmt->cmd, NULL)))
+ return_NULL;
+
+ /* Read all the pvs in the vg */
+ if (!read_pool_pds(fid->fmt, vg_name, vg->vgmem, &pds))
+ goto_bad;
- vg->cmd = fid->fmt->cmd;
- vg->vgmem = mem;
vg->fid = fid;
- vg->name = NULL;
- vg->status = 0;
- vg->extent_count = 0;
- vg->pv_count = 0;
+ /* Setting pool seqno to 1 because the code always did this,
+ * although we don't think it's needed. */
vg->seqno = 1;
- vg->system_id = NULL;
- dm_list_init(&vg->pvs);
- dm_list_init(&vg->lvs);
- dm_list_init(&vg->tags);
- dm_list_init(&vg->removed_pvs);
- if (!import_pool_vg(vg, smem, pds))
- return_NULL;
+ if (!import_pool_vg(vg, vg->vgmem, &pds))
+ goto_bad;
- if (!import_pool_pvs(fid->fmt, vg, smem, pds))
- return_NULL;
+ if (!import_pool_pvs(fid->fmt, vg, vg->vgmem, &pds))
+ goto_bad;
- if (!import_pool_lvs(vg, smem, pds))
- return_NULL;
+ if (!import_pool_lvs(vg, vg->vgmem, &pds))
+ goto_bad;
/*
* I need an intermediate subpool structure that contains all the
* relevant info for this. Then i can iterate through the subpool
* structures for checking, and create the segments
*/
- if (!(usp = _build_usp(pds, mem, &sp_count)))
- return_NULL;
+ if (!(usp = _build_usp(&pds, vg->vgmem, &sp_count)))
+ goto_bad;
/*
* check the subpool structures - we can't handle partial VGs in
* the pool format, so this will error out if we're missing PVs
*/
if (!_check_usp(vg->name, usp, sp_count))
- return_NULL;
+ goto_bad;
- if (!import_pool_segments(&vg->lvs, smem, usp, sp_count))
- return_NULL;
+ if (!import_pool_segments(&vg->lvs, vg->vgmem, usp, sp_count))
+ goto_bad;
return vg;
-}
-static struct volume_group *_pool_vg_read(struct format_instance *fid,
- const char *vg_name,
- struct metadata_area *mda __attribute__((unused)))
-{
- struct dm_pool *mem = dm_pool_create("pool vg_read", VG_MEMPOOL_CHUNK);
- struct dm_list pds;
- struct volume_group *vg = NULL;
-
- dm_list_init(&pds);
-
- /* We can safely ignore the mda passed in */
-
- if (!mem)
- return_NULL;
-
- /* Strip dev_dir if present */
- vg_name = strip_dir(vg_name, fid->fmt->cmd->dev_dir);
-
- /* Read all the pvs in the vg */
- if (!read_pool_pds(fid->fmt, vg_name, mem, &pds))
- goto_out;
+bad:
+ free_vg(vg);
- /* Do the rest of the vg stuff */
- if (!(vg = _build_vg_from_pds(fid, mem, &pds)))
- goto_out;
-
- return vg;
-out:
- dm_pool_destroy(mem);
return NULL;
}
--- LVM2/lib/format_text/import_vsn1.c 2011/02/03 16:03:13 1.82
+++ LVM2/lib/format_text/import_vsn1.c 2011/03/10 12:43:29 1.83
@@ -652,35 +652,25 @@
const struct config_node *vgn, *cn;
struct volume_group *vg;
struct dm_hash_table *pv_hash = NULL, *lv_hash = NULL;
- struct dm_pool *mem = dm_pool_create("lvm2 vg_read", VG_MEMPOOL_CHUNK);
unsigned scan_done_once = use_cached_pvs;
- if (!mem)
- return_NULL;
-
/* skip any top-level values */
for (vgn = cft->root; (vgn && vgn->v); vgn = vgn->sib)
;
if (!vgn) {
log_error("Couldn't find volume group in file.");
- goto bad;
+ return NULL;
}
- if (!(vg = dm_pool_zalloc(mem, sizeof(*vg))))
- goto_bad;
-
- vg->vgmem = mem;
- vg->cmd = fid->fmt->cmd;
+ if (!(vg = alloc_vg("read_vg", fid->fmt->cmd, vgn->key)))
+ return_NULL;
/* FIXME Determine format type from file contents */
/* eg Set to instance of fmt1 here if reading a format1 backup? */
vg->fid = fid;
- if (!(vg->name = dm_pool_strdup(mem, vgn->key)))
- goto_bad;
-
- if (!(vg->system_id = dm_pool_zalloc(mem, NAME_LEN)))
+ if (!(vg->system_id = dm_pool_zalloc(vg->vgmem, NAME_LEN)))
goto_bad;
vgn = vgn->child;
@@ -733,7 +723,6 @@
goto bad;
}
- vg->alloc = ALLOC_NORMAL;
if ((cn = find_config_node(vgn, "allocation_policy"))) {
const struct config_value *cv = cn->v;
if (!cv || !cv->v.str) {
@@ -761,21 +750,16 @@
goto bad;
}
- dm_list_init(&vg->pvs);
- if (!_read_sections(fid, "physical_volumes", _read_pv, mem, vg,
+ if (!_read_sections(fid, "physical_volumes", _read_pv, vg->vgmem, vg,
vgn, pv_hash, lv_hash, 0, &scan_done_once)) {
log_error("Couldn't find all physical volumes for volume "
"group %s.", vg->name);
goto bad;
}
- dm_list_init(&vg->lvs);
- dm_list_init(&vg->tags);
- dm_list_init(&vg->removed_pvs);
-
/* Optional tags */
if ((cn = find_config_node(vgn, "tags")) &&
- !(read_tags(mem, &vg->tags, cn->v))) {
+ !(read_tags(vg->vgmem, &vg->tags, cn->v))) {
log_error("Couldn't read tags for volume group %s.", vg->name);
goto bad;
}
@@ -789,15 +773,15 @@
goto bad;
}
- if (!_read_sections(fid, "logical_volumes", _read_lvnames, mem, vg,
- vgn, pv_hash, lv_hash, 1, NULL)) {
+ if (!_read_sections(fid, "logical_volumes", _read_lvnames, vg->vgmem,
+ vg, vgn, pv_hash, lv_hash, 1, NULL)) {
log_error("Couldn't read all logical volume names for volume "
"group %s.", vg->name);
goto bad;
}
- if (!_read_sections(fid, "logical_volumes", _read_lvsegs, mem, vg,
- vgn, pv_hash, lv_hash, 1, NULL)) {
+ if (!_read_sections(fid, "logical_volumes", _read_lvsegs, vg->vgmem,
+ vg, vgn, pv_hash, lv_hash, 1, NULL)) {
log_error("Couldn't read all logical volumes for "
"volume group %s.", vg->name);
goto bad;
@@ -824,7 +808,7 @@
if (lv_hash)
dm_hash_destroy(lv_hash);
- dm_pool_destroy(mem);
+ free_vg(vg);
return NULL;
}
--- LVM2/lib/metadata/metadata.c 2011/02/28 13:19:02 1.437
+++ LVM2/lib/metadata/metadata.c 2011/03/10 12:43:30 1.438
@@ -836,25 +836,16 @@
* possible failure code or zero for success.
*/
static struct volume_group *_vg_make_handle(struct cmd_context *cmd,
- struct volume_group *vg,
- uint32_t failure)
+ struct volume_group *vg,
+ uint32_t failure)
{
- struct dm_pool *vgmem;
-
- if (!vg) {
- if (!(vgmem = dm_pool_create("lvm2 vg_handle", VG_MEMPOOL_CHUNK)) ||
- !(vg = dm_pool_zalloc(vgmem, sizeof(*vg)))) {
- log_error("Error allocating vg handle.");
- if (vgmem)
- dm_pool_destroy(vgmem);
- return_NULL;
- }
- vg->vgmem = vgmem;
- }
+ if (!vg && !(vg = alloc_vg("vg_make_handle", cmd, NULL)))
+ return_NULL;
- vg->read_status = failure;
+ if (vg->read_status != failure)
+ vg->read_status = failure;
- return (struct volume_group *)vg;
+ return vg;
}
int lv_has_unknown_segments(const struct logical_volume *lv)
@@ -891,7 +882,6 @@
struct volume_group *vg;
struct format_instance_ctx fic;
int consistent = 0;
- struct dm_pool *mem;
uint32_t rc;
if (!validate_name(vg_name)) {
@@ -914,10 +904,10 @@
return _vg_make_handle(cmd, NULL, FAILED_EXIST);
}
- if (!(mem = dm_pool_create("lvm2 vg_create", VG_MEMPOOL_CHUNK)))
- goto_bad;
+ /* Strip dev_dir if present */
+ vg_name = strip_dir(vg_name, cmd->dev_dir);
- if (!(vg = dm_pool_zalloc(mem, sizeof(*vg))))
+ if (!(vg = alloc_vg("vg_create", cmd, vg_name)))
goto_bad;
if (!id_create(&vg->id)) {
@@ -926,19 +916,8 @@
goto bad;
}
- /* Strip dev_dir if present */
- vg_name = strip_dir(vg_name, cmd->dev_dir);
-
- vg->vgmem = mem;
- vg->cmd = cmd;
-
- if (!(vg->name = dm_pool_strdup(mem, vg_name)))
- goto_bad;
-
- vg->seqno = 0;
-
vg->status = (RESIZEABLE_VG | LVM_READ | LVM_WRITE);
- if (!(vg->system_id = dm_pool_alloc(mem, NAME_LEN)))
+ if (!(vg->system_id = dm_pool_alloc(vg->vgmem, NAME_LEN)))
goto_bad;
*vg->system_id = '\0';
@@ -954,14 +933,6 @@
vg->mda_copies = DEFAULT_VGMETADATACOPIES;
vg->pv_count = 0;
- dm_list_init(&vg->pvs);
-
- dm_list_init(&vg->lvs);
-
- dm_list_init(&vg->tags);
-
- /* initialize removed_pvs list */
- dm_list_init(&vg->removed_pvs);
fic.type = FMT_INSTANCE_VG | FMT_INSTANCE_MDAS | FMT_INSTANCE_AUX_MDAS;
fic.context.vg_ref.vg_name = vg_name;
@@ -2614,31 +2585,15 @@
struct pv_list *pvl;
struct volume_group *vg;
struct physical_volume *pv;
- struct dm_pool *mem;
lvmcache_label_scan(cmd, 0);
if (!(vginfo = vginfo_from_vgname(orphan_vgname, NULL)))
return_NULL;
- if (!(mem = dm_pool_create("vg_read orphan", VG_MEMPOOL_CHUNK)))
+ if (!(vg = alloc_vg("vg_read_orphans", cmd, orphan_vgname)))
return_NULL;
- if (!(vg = dm_pool_zalloc(mem, sizeof(*vg)))) {
- log_error("vg allocation failed");
- goto bad;
- }
- dm_list_init(&vg->pvs);
- dm_list_init(&vg->lvs);
- dm_list_init(&vg->tags);
- dm_list_init(&vg->removed_pvs);
- vg->vgmem = mem;
- vg->cmd = cmd;
- if (!(vg->name = dm_pool_strdup(mem, orphan_vgname))) {
- log_error("vg name allocation failed");
- goto bad;
- }
-
/* create format instance with appropriate metadata area */
fic.type = FMT_INSTANCE_VG | FMT_INSTANCE_AUX_MDAS;
fic.context.vg_ref.vg_name = orphan_vgname;
@@ -2649,11 +2604,11 @@
}
dm_list_iterate_items(info, &vginfo->infos) {
- if (!(pv = _pv_read(cmd, mem, dev_name(info->dev),
+ if (!(pv = _pv_read(cmd, vg->vgmem, dev_name(info->dev),
vg->fid, NULL, warnings, 0))) {
continue;
}
- if (!(pvl = dm_pool_zalloc(mem, sizeof(*pvl)))) {
+ if (!(pvl = dm_pool_zalloc(vg->vgmem, sizeof(*pvl)))) {
log_error("pv_list allocation failed");
goto bad;
}
@@ -2663,7 +2618,7 @@
return vg;
bad:
- dm_pool_destroy(mem);
+ free_vg(vg);
return NULL;
}
--- LVM2/lib/metadata/vg.c 2010/10/25 13:54:29 1.8
+++ LVM2/lib/metadata/vg.c 2011/03/10 12:43:30 1.9
@@ -18,6 +18,38 @@
#include "display.h"
#include "activate.h"
+struct volume_group *alloc_vg(const char *pool_name, struct cmd_context *cmd,
+ const char *vg_name)
+{
+ struct dm_pool *vgmem;
+ struct volume_group *vg;
+
+ if (!(vgmem = dm_pool_create(pool_name, VG_MEMPOOL_CHUNK)) ||
+ !(vg = dm_pool_zalloc(vgmem, sizeof(*vg)))) {
+ log_error("Failed to allocate volume group structure");
+ if (vgmem)
+ dm_pool_destroy(vgmem);
+ return NULL;
+ }
+
+ if (vg_name && !(vg->name = dm_pool_strdup(vgmem, vg_name))) {
+ log_error("Failed to allocate VG name.");
+ dm_pool_destroy(vgmem);
+ return NULL;
+ }
+
+ vg->cmd = cmd;
+ vg->vgmem = vgmem;
+ vg->alloc = ALLOC_NORMAL;
+
+ dm_list_init(&vg->pvs);
+ dm_list_init(&vg->lvs);
+ dm_list_init(&vg->tags);
+ dm_list_init(&vg->removed_pvs);
+
+ return vg;
+}
+
char *vg_fmt_dup(const struct volume_group *vg)
{
if (!vg->fid || !vg->fid->fmt)
--- LVM2/lib/metadata/vg.h 2010/12/20 13:40:46 1.9
+++ LVM2/lib/metadata/vg.h 2011/03/10 12:43:30 1.10
@@ -95,6 +95,9 @@
uint32_t mda_copies; /* target number of mdas for this VG */
};
+struct volume_group *alloc_vg(const char *pool_name, struct cmd_context *cmd,
+ const char *vg_name);
+
char *vg_fmt_dup(const struct volume_group *vg);
char *vg_name_dup(const struct volume_group *vg);
char *vg_system_id_dup(const struct volume_group *vg);
--- LVM2/WHATS_NEW 2011/03/10 03:03:03 1.1940
+++ LVM2/WHATS_NEW 2011/03/10 12:43:30 1.1941
@@ -1,5 +1,6 @@
Version 2.02.85 -
===================================
+ Refactor allocation of VG structure, add alloc_vg().
Avoid possible endless loop in _free_vginfo when 4 or more VGs have same name.
Use empty string instead of /dev// for LV path when there's no VG.
Don't allocate unused VG mempool in _pvsegs_sub_single.
^ permalink raw reply [flat|nested] 5+ messages in thread
* LVM2 lib/format1/format1.c lib/format_pool/for ...
@ 2011-02-21 12:24 prajnoha
0 siblings, 0 replies; 5+ messages in thread
From: prajnoha @ 2011-02-21 12:24 UTC (permalink / raw)
To: lvm-devel, lvm2-cvs
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: prajnoha@sourceware.org 2011-02-21 12:24:17
Modified files:
lib/format1 : format1.c
lib/format_pool: format_pool.c
lib/format_text: archiver.c format-text.c
lib/metadata : metadata-exported.h metadata.c metadata.h
tools : vgconvert.c
Log message:
Change the code throughout to use new pv_initialise and modified pv_setup fn.
Change pv_create code to work with these changes together with using new
pv_add_metadata_area fn to add metadata areas for a PV being created.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format1/format1.c.diff?cvsroot=lvm2&r1=1.130&r2=1.131
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_pool/format_pool.c.diff?cvsroot=lvm2&r1=1.38&r2=1.39
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/archiver.c.diff?cvsroot=lvm2&r1=1.40&r2=1.41
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.161&r2=1.162
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata-exported.h.diff?cvsroot=lvm2&r1=1.178&r2=1.179
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.430&r2=1.431
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.h.diff?cvsroot=lvm2&r1=1.236&r2=1.237
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgconvert.c.diff?cvsroot=lvm2&r1=1.45&r2=1.46
--- LVM2/lib/format1/format1.c 2011/02/21 12:20:18 1.130
+++ LVM2/lib/format1/format1.c 2011/02/21 12:24:15 1.131
@@ -399,14 +399,6 @@
}
static int _format1_pv_setup(const struct format_type *fmt,
- uint64_t pe_start, uint32_t extent_count,
- uint32_t extent_size,
- unsigned long data_alignment __attribute__((unused)),
- unsigned long data_alignment_offset __attribute__((unused)),
- int pvmetadatacopies __attribute__((unused)),
- uint64_t pvmetadatasize __attribute__((unused)),
- unsigned metadataignore __attribute__((unused)),
- struct dm_list *mdas __attribute__((unused)),
struct physical_volume *pv,
struct volume_group *vg __attribute__((unused)))
{
--- LVM2/lib/format_pool/format_pool.c 2011/02/21 12:20:18 1.38
+++ LVM2/lib/format_pool/format_pool.c 2011/02/21 12:24:16 1.39
@@ -201,15 +201,6 @@
}
static int _pool_pv_setup(const struct format_type *fmt __attribute__((unused)),
- uint64_t pe_start __attribute__((unused)),
- uint32_t extent_count __attribute__((unused)),
- uint32_t extent_size __attribute__((unused)),
- unsigned long data_alignment __attribute__((unused)),
- unsigned long data_alignment_offset __attribute__((unused)),
- int pvmetadatacopies __attribute__((unused)),
- uint64_t pvmetadatasize __attribute__((unused)),
- unsigned metadataignore __attribute__((unused)),
- struct dm_list *mdas __attribute__((unused)),
struct physical_volume *pv __attribute__((unused)),
struct volume_group *vg __attribute__((unused)))
{
--- LVM2/lib/format_text/archiver.c 2011/02/21 12:10:58 1.40
+++ LVM2/lib/format_text/archiver.c 2011/02/21 12:24:16 1.41
@@ -333,10 +333,7 @@
pv_dev_name(pv), info->fmt->name);
return 0;
}
- if (!vg->fid->fmt->ops->
- pv_setup(vg->fid->fmt, UINT64_C(0), 0, 0, 0, 0, 0UL,
- UINT64_C(0), 0,
- &vg->fid->metadata_areas_in_use, pv, vg)) {
+ if (!vg->fid->fmt->ops->pv_setup(vg->fid->fmt, pv, vg)) {
log_error("Format-specific setup for %s failed",
pv_dev_name(pv));
return 0;
--- LVM2/lib/format_text/format-text.c 2011/02/21 12:20:18 1.161
+++ LVM2/lib/format_text/format-text.c 2011/02/21 12:24:17 1.162
@@ -1824,151 +1824,65 @@
.mda_locns_match = _mda_locns_match_raw
};
-/* pvmetadatasize in sectors */
-/*
- * pe_start goal: FIXME -- reality of .pv_write complexity undermines this goal
- * - In cases where a pre-existing pe_start is provided (pvcreate --restorefile
- * and vgconvert): pe_start must not be changed (so pv->pe_start = pe_start).
- * - In cases where pe_start is 0: leave pv->pe_start as 0 and defer the
- * setting of pv->pe_start to .pv_write
- */
static int _text_pv_setup(const struct format_type *fmt,
- uint64_t pe_start, uint32_t extent_count,
- uint32_t extent_size, unsigned long data_alignment,
- unsigned long data_alignment_offset,
- int pvmetadatacopies, uint64_t pvmetadatasize,
- unsigned metadataignore, struct dm_list *mdas,
- struct physical_volume *pv, struct volume_group *vg)
-{
- struct metadata_area *mda, *mda_new, *mda2;
- struct mda_context *mdac, *mdac2;
- struct dm_list *pvmdas;
- struct lvmcache_info *info;
- int found;
- uint64_t pe_end = 0;
- unsigned mda_count = 0;
- uint64_t mda_size2 = 0;
+ struct physical_volume *pv,
+ struct volume_group *vg)
+{
+ struct format_instance *fid = pv->fid;
+ const char *pvid = (const char *) &pv->id;
+ unsigned mda_index;
+ struct metadata_area *pv_mda;
+ struct mda_context *pv_mdac;
uint64_t pe_count;
+ uint64_t size_reduction = 0;
- /* FIXME Cope with pvchange */
- /* FIXME Merge code with _text_create_text_instance */
-
- /* If new vg, add any further mdas on this PV to the fid's mda list */
- if (vg) {
- /* Iterate through all mdas on this PV */
- if ((info = info_from_pvid(pv->dev->pvid, 0))) {
- pvmdas = &info->mdas;
- dm_list_iterate_items(mda, pvmdas) {
- mda_count++;
- mdac =
- (struct mda_context *) mda->metadata_locn;
-
- /* FIXME Check it isn't already in use */
-
- /* Reduce usable device size */
- if (mda_count > 1)
- mda_size2 = mdac->area.size >> SECTOR_SHIFT;
-
- /* Ensure it isn't already on list */
- found = 0;
- dm_list_iterate_items(mda2, mdas) {
- if (mda2->ops !=
- &_metadata_text_raw_ops) continue;
- mdac2 =
- (struct mda_context *)
- mda2->metadata_locn;
- if (!memcmp
- (&mdac2->area, &mdac->area,
- sizeof(mdac->area))) {
- found = 1;
- break;
- }
- }
- if (found)
- continue;
-
- mda_new = mda_copy(fmt->cmd->mem, mda);
- if (!mda_new)
- return_0;
- dm_list_add(mdas, &mda_new->list);
- /* FIXME multiple dev_areas inside area */
- }
- }
-
- /* FIXME Cope with genuine pe_count 0 */
-
- /* If missing, estimate pv->size from file-based metadata */
- if (!pv->size && pv->pe_count)
- pv->size = pv->pe_count * (uint64_t) vg->extent_size +
- pv->pe_start + mda_size2;
-
- /* Recalculate number of extents that will fit */
- if (!pv->pe_count) {
- pe_count = (pv->size - pv->pe_start - mda_size2) /
- vg->extent_size;
- if (pe_count > UINT32_MAX) {
- log_error("PV %s too large for extent size %s.",
- pv_dev_name(pv),
- display_size(vg->cmd, (uint64_t) vg->extent_size));
- return 0;
- }
- pv->pe_count = (uint32_t) pe_count;
- }
-
- /* Unlike LVM1, we don't store this outside a VG */
- /* FIXME Default from config file? vgextend cmdline flag? */
- pv->status |= ALLOCATABLE_PV;
- } else {
- if (pe_start)
- pv->pe_start = pe_start;
-
- if (!data_alignment)
- data_alignment = find_config_tree_int(pv->fmt->cmd,
- "devices/data_alignment",
- 0) * 2;
-
- if (set_pe_align(pv, data_alignment) != data_alignment &&
- data_alignment) {
- log_error("%s: invalid data alignment of "
- "%lu sectors (requested %lu sectors)",
- pv_dev_name(pv), pv->pe_align, data_alignment);
- return 0;
- }
-
- if (set_pe_align_offset(pv, data_alignment_offset) != data_alignment_offset &&
- data_alignment_offset) {
- log_error("%s: invalid data alignment offset of "
- "%lu sectors (requested %lu sectors)",
- pv_dev_name(pv), pv->pe_align_offset, data_alignment_offset);
- return 0;
- }
-
- if (pv->pe_align < pv->pe_align_offset) {
- log_error("%s: pe_align (%lu sectors) must not be less "
- "than pe_align_offset (%lu sectors)",
- pv_dev_name(pv), pv->pe_align, pv->pe_align_offset);
+ /* Add any further mdas on this PV to VG's format instance. */
+ for (mda_index = 0; mda_index < FMT_TEXT_MAX_MDAS_PER_PV; mda_index++) {
+ if (!(pv_mda = fid_get_mda_indexed(fid, pvid, ID_LEN, mda_index)))
+ continue;
+
+ /* Be sure it's not already in VG's format instance! */
+ if (!fid_get_mda_indexed(vg->fid, pvid, ID_LEN, mda_index))
+ fid_add_mda(vg->fid, pv_mda, pvid, ID_LEN, mda_index);
+ }
+
+ /* If there's the 2nd mda, we need to reduce
+ * usable size for further pe_count calculation! */
+ if ((pv_mda = fid_get_mda_indexed(fid, pvid, ID_LEN, 1)) &&
+ (pv_mdac = pv_mda->metadata_locn))
+ size_reduction = pv_mdac->area.size >> SECTOR_SHIFT;
+
+ /* Destroy old PV-based format instance if it exists. */
+ if (!(pv->fid->type & FMT_INSTANCE_VG))
+ pv->fmt->ops->destroy_instance(pv->fid);
+
+ /* From now on, VG format instance will be used. */
+ pv->fid = vg->fid;
+
+ /* FIXME Cope with genuine pe_count 0 */
+
+ /* If missing, estimate pv->size from file-based metadata */
+ if (!pv->size && pv->pe_count)
+ pv->size = pv->pe_count * (uint64_t) vg->extent_size +
+ pv->pe_start + size_reduction;
+
+ /* Recalculate number of extents that will fit */
+ if (!pv->pe_count) {
+ pe_count = (pv->size - pv->pe_start - size_reduction) /
+ vg->extent_size;
+ if (pe_count > UINT32_MAX) {
+ log_error("PV %s too large for extent size %s.",
+ pv_dev_name(pv),
+ display_size(vg->cmd, (uint64_t) vg->extent_size));
return 0;
}
-
- /*
- * This initialization has a side-effect of allowing
- * orphaned PVs to be created with the proper alignment.
- * Setting pv->pe_start here circumvents .pv_write's
- * "pvcreate on PV without prior pvremove" retreival of
- * the PV's previous pe_start.
- * - Without this you get actual != expected pe_start
- * failures in the testsuite.
- */
- if (!pe_start && pv->pe_start < pv->pe_align)
- pv->pe_start = pv->pe_align;
-
- if (extent_count)
- pe_end = pe_start + extent_count * extent_size - 1;
- if (!_mda_setup(fmt, pe_start, pe_end, pvmetadatacopies,
- pvmetadatasize, metadataignore, mdas, pv, vg))
- return_0;
+ pv->pe_count = (uint32_t) pe_count;
}
+ /* Unlike LVM1, we don't store this outside a VG */
+ /* FIXME Default from config file? vgextend cmdline flag? */
+ pv->status |= ALLOCATABLE_PV;
+
return 1;
}
--- LVM2/lib/metadata/metadata-exported.h 2011/02/21 12:16:00 1.178
+++ LVM2/lib/metadata/metadata-exported.h 2011/02/21 12:24:17 1.179
@@ -424,9 +424,10 @@
uint64_t pe_start,
uint32_t existing_extent_count,
uint32_t existing_extent_size,
- int pvmetadatacopies, uint64_t pvmetadatasize,
- unsigned metadataignore,
- struct dm_list *mdas);
+ uint64_t label_sector,
+ int pvmetadatacopies,
+ uint64_t pvmetadatasize,
+ unsigned metadataignore);
int pv_resize(struct physical_volume *pv, struct volume_group *vg,
uint32_t new_pe_count);
int pv_analyze(struct cmd_context *cmd, const char *pv_name,
--- LVM2/lib/metadata/metadata.c 2011/02/21 12:16:00 1.430
+++ LVM2/lib/metadata/metadata.c 2011/02/21 12:24:17 1.431
@@ -195,7 +195,6 @@
struct format_instance *fid = vg->fid;
struct dm_pool *mem = vg->vgmem;
char uuid[64] __attribute__((aligned(8)));
- struct dm_list *mdas;
log_verbose("Adding physical volume '%s' to volume group '%s'",
pv_name, vg->name);
@@ -239,24 +238,7 @@
*/
pv->pe_alloc_count = 0;
- /*
- * FIXME: this does not work entirely correctly in the case where a PV
- * has 2 mdas and only one is ignored; ideally all non-ignored mdas
- * should be placed on metadata_areas list and ignored on the
- * metadata_areas_ignored list; however this requires another
- * fairly complex refactoring to remove the 'mdas' parameter from both
- * pv_setup and pv_write. For now, we only put ignored mdas on the
- * metadata_areas_ignored list if all mdas in the PV are ignored;
- * otherwise, we use the non-ignored list.
- */
- if (!pv_mda_used_count(pv))
- mdas = &fid->metadata_areas_ignored;
- else
- mdas = &fid->metadata_areas_in_use;
-
- if (!fid->fmt->ops->pv_setup(fid->fmt, UINT64_C(0), 0,
- vg->extent_size, 0, 0, 0UL, UINT64_C(0),
- 0, mdas, pv, vg)) {
+ if (!fid->fmt->ops->pv_setup(fid->fmt, pv, vg)) {
log_error("Format-specific setup of physical volume '%s' "
"failed.", pv_name);
return 0;
@@ -1494,9 +1476,10 @@
dm_list_init(&mdas);
if (!(pv = pv_create(cmd, dev, pp->idp, pp->size,
pp->data_alignment, pp->data_alignment_offset,
- pp->pe_start, pp->extent_count, pp->extent_size,
- pp->pvmetadatacopies, pp->pvmetadatasize,
- pp->metadataignore, &mdas))) {
+ pp->pe_start ? pp->pe_start : PV_PE_START_CALC,
+ pp->extent_count, pp->extent_size,
+ pp->labelsector, pp->pvmetadatacopies,
+ pp->pvmetadatasize, pp->metadataignore))) {
log_error("Failed to setup physical volume \"%s\"", pv_name);
goto error;
}
@@ -1601,13 +1584,16 @@
uint64_t pe_start,
uint32_t existing_extent_count,
uint32_t existing_extent_size,
- int pvmetadatacopies, uint64_t pvmetadatasize,
- unsigned metadataignore, struct dm_list *mdas)
+ uint64_t label_sector,
+ int pvmetadatacopies,
+ uint64_t pvmetadatasize,
+ unsigned metadataignore)
{
const struct format_type *fmt = cmd->fmt;
struct format_instance_ctx fic;
struct dm_pool *mem = fmt->cmd->mem;
struct physical_volume *pv = _alloc_pv(mem, dev);
+ unsigned mda_index;
if (!pv)
return NULL;
@@ -1656,16 +1642,26 @@
pv->fmt = fmt;
pv->vg_name = fmt->orphan_vg_name;
- if (!fmt->ops->pv_setup(fmt, pe_start, existing_extent_count,
- existing_extent_size, data_alignment,
- data_alignment_offset,
- pvmetadatacopies, pvmetadatasize,
- metadataignore, mdas, pv, NULL)) {
- log_error("%s: Format-specific setup of physical volume "
- "failed.", pv_dev_name(pv));
+ if (!fmt->ops->pv_initialise(fmt, label_sector, pe_start,
+ existing_extent_count, existing_extent_size,
+ data_alignment, data_alignment_offset, pv)) {
+ log_error("Format-specific initialisation of physical "
+ "volume %s failed.", pv_dev_name(pv));
goto bad;
}
+ for (mda_index = 0; mda_index < pvmetadatacopies; mda_index++) {
+ if (pv->fmt->ops->pv_add_metadata_area &&
+ !pv->fmt->ops->pv_add_metadata_area(pv->fmt, pv,
+ pe_start != PV_PE_START_CALC,
+ mda_index, pvmetadatasize,
+ metadataignore)) {
+ log_error("Failed to add metadata area for "
+ "new physical volume %s", pv_dev_name(pv));
+ goto bad;
+ }
+ }
+
return pv;
bad:
--- LVM2/lib/metadata/metadata.h 2011/02/21 12:20:19 1.236
+++ LVM2/lib/metadata/metadata.h 2011/02/21 12:24:17 1.237
@@ -272,12 +272,8 @@
* vg. eg. pe_count is format specific.
*/
int (*pv_setup) (const struct format_type * fmt,
- uint64_t pe_start, uint32_t extent_count,
- uint32_t extent_size, unsigned long data_alignment,
- unsigned long data_alignment_offset,
- int pvmetadatacopies, uint64_t pvmetadatasize,
- unsigned metadataignore, struct dm_list * mdas,
- struct physical_volume * pv, struct volume_group * vg);
+ struct physical_volume * pv,
+ struct volume_group * vg);
/*
* Add metadata area to a PV. Changes will take effect on pv_write.
--- LVM2/tools/vgconvert.c 2011/02/18 16:17:57 1.45
+++ LVM2/tools/vgconvert.c 2011/02/21 12:24:17 1.46
@@ -125,8 +125,10 @@
if (!(pv = pv_create(cmd, pv_dev(existing_pv),
&existing_pv->id, size, 0, 0,
pe_start, pv_pe_count(existing_pv),
- pv_pe_size(existing_pv), pvmetadatacopies,
- pvmetadatasize, 0, &mdas))) {
+ pv_pe_size(existing_pv),
+ arg_int64_value(cmd, labelsector_ARG,
+ DEFAULT_LABELSECTOR),
+ pvmetadatacopies, pvmetadatasize, 0))) {
log_error("Failed to setup physical volume \"%s\"",
pv_dev_name(existing_pv));
if (change_made)
^ permalink raw reply [flat|nested] 5+ messages in thread
* LVM2 lib/format1/format1.c lib/format_pool/for ...
@ 2010-07-08 18:24 wysochanski
0 siblings, 0 replies; 5+ messages in thread
From: wysochanski @ 2010-07-08 18:24 UTC (permalink / raw)
To: lvm-devel, lvm2-cvs
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: wysochanski@sourceware.org 2010-07-08 18:24:30
Modified files:
lib/format1 : format1.c
lib/format_pool: format_pool.c
lib/format_text: archiver.c format-text.c
lib/metadata : metadata-exported.h metadata.c metadata.h
tools : vgconvert.c
Log message:
Pass metadataignore to pv_create, pv_setup, _mda_setup, and add_mda.
Pass metadataignore through PV creation / setup paths.
As a result of this cleanup, we can remove the unnecessary setting
of mda_ignore bits inside pvcreate_single(), after call to pv_create.
For now, just set metadataignore to '0' in some places. This is
equivalent to the prior functionality, although the 0 is given
by the caller not hardcoded in _mda_setup() call.
Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format1/format1.c.diff?cvsroot=lvm2&r1=1.119&r2=1.120
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_pool/format_pool.c.diff?cvsroot=lvm2&r1=1.30&r2=1.31
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/archiver.c.diff?cvsroot=lvm2&r1=1.32&r2=1.33
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.139&r2=1.140
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata-exported.h.diff?cvsroot=lvm2&r1=1.164&r2=1.165
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.386&r2=1.387
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.h.diff?cvsroot=lvm2&r1=1.215&r2=1.216
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgconvert.c.diff?cvsroot=lvm2&r1=1.41&r2=1.42
--- LVM2/lib/format1/format1.c 2010/06/29 14:52:56 1.119
+++ LVM2/lib/format1/format1.c 2010/07/08 18:24:29 1.120
@@ -294,13 +294,15 @@
}
static int _format1_pv_setup(const struct format_type *fmt,
- uint64_t pe_start, uint32_t extent_count,
- uint32_t extent_size,
- unsigned long data_alignment __attribute((unused)),
- unsigned long data_alignment_offset __attribute((unused)),
- int pvmetadatacopies __attribute((unused)),
- uint64_t pvmetadatasize __attribute((unused)), struct dm_list *mdas __attribute((unused)),
- struct physical_volume *pv, struct volume_group *vg __attribute((unused)))
+ uint64_t pe_start, uint32_t extent_count,
+ uint32_t extent_size,
+ unsigned long data_alignment __attribute((unused)),
+ unsigned long data_alignment_offset __attribute((unused)),
+ int pvmetadatacopies __attribute((unused)),
+ uint64_t pvmetadatasize __attribute((unused)),
+ unsigned metadataignore __attribute((unused)),
+ struct dm_list *mdas __attribute((unused)),
+ struct physical_volume *pv, struct volume_group *vg __attribute((unused)))
{
if (pv->size > MAX_PV_SIZE)
pv->size--;
--- LVM2/lib/format_pool/format_pool.c 2010/06/29 14:52:56 1.30
+++ LVM2/lib/format_pool/format_pool.c 2010/07/08 18:24:29 1.31
@@ -196,6 +196,7 @@
unsigned long data_alignment_offset __attribute((unused)),
int pvmetadatacopies __attribute((unused)),
uint64_t pvmetadatasize __attribute((unused)),
+ unsigned metadataignore __attribute((unused)),
struct dm_list *mdas __attribute((unused)),
struct physical_volume *pv __attribute((unused)),
struct volume_group *vg __attribute((unused)))
--- LVM2/lib/format_text/archiver.c 2010/06/29 15:03:59 1.32
+++ LVM2/lib/format_text/archiver.c 2010/07/08 18:24:29 1.33
@@ -327,7 +327,8 @@
}
if (!vg->fid->fmt->ops->
pv_setup(vg->fid->fmt, UINT64_C(0), 0, 0, 0, 0, 0UL,
- UINT64_C(0), &vg->fid->metadata_areas_in_use, pv, vg)) {
+ UINT64_C(0), 0,
+ &vg->fid->metadata_areas_in_use, pv, vg)) {
log_error("Format-specific setup for %s failed",
pv_dev_name(pv));
return 0;
--- LVM2/lib/format_text/format-text.c 2010/06/30 17:13:05 1.139
+++ LVM2/lib/format_text/format-text.c 2010/07/08 18:24:30 1.140
@@ -1248,8 +1248,8 @@
Always have an mda between end-of-label and pe_align() boundary */
static int _mda_setup(const struct format_type *fmt,
uint64_t pe_start, uint64_t pe_end,
- int pvmetadatacopies,
- uint64_t pvmetadatasize, struct dm_list *mdas,
+ int pvmetadatacopies, uint64_t pvmetadatasize,
+ unsigned metadataignore, struct dm_list *mdas,
struct physical_volume *pv,
struct volume_group *vg __attribute((unused)))
{
@@ -1337,7 +1337,7 @@
/* FIXME If creating new mdas, wipe them! */
if (mda_size1) {
if (!add_mda(fmt, fmt->cmd->mem, mdas, pv->dev, start1,
- mda_size1, 0))
+ mda_size1, metadataignore))
return 0;
if (!dev_set((struct device *) pv->dev, start1,
@@ -1384,7 +1384,7 @@
if (mda_size2) {
if (!add_mda(fmt, fmt->cmd->mem, mdas, pv->dev, start2,
- mda_size2, 0)) return 0;
+ mda_size2, metadataignore)) return 0;
if (!dev_set(pv->dev, start2,
(size_t) (mda_size1 >
wipe_size ? : mda_size1), 0)) {
@@ -1766,12 +1766,12 @@
* setting of pv->pe_start to .pv_write
*/
static int _text_pv_setup(const struct format_type *fmt,
- uint64_t pe_start, uint32_t extent_count,
- uint32_t extent_size, unsigned long data_alignment,
- unsigned long data_alignment_offset,
- int pvmetadatacopies,
- uint64_t pvmetadatasize, struct dm_list *mdas,
- struct physical_volume *pv, struct volume_group *vg)
+ uint64_t pe_start, uint32_t extent_count,
+ uint32_t extent_size, unsigned long data_alignment,
+ unsigned long data_alignment_offset,
+ int pvmetadatacopies, uint64_t pvmetadatasize,
+ unsigned metadataignore, struct dm_list *mdas,
+ struct physical_volume *pv, struct volume_group *vg)
{
struct metadata_area *mda, *mda_new, *mda2;
struct mda_context *mdac, *mdac2;
@@ -1894,7 +1894,7 @@
if (extent_count)
pe_end = pe_start + extent_count * extent_size - 1;
if (!_mda_setup(fmt, pe_start, pe_end, pvmetadatacopies,
- pvmetadatasize, mdas, pv, vg))
+ pvmetadatasize, metadataignore, mdas, pv, vg))
return_0;
}
--- LVM2/lib/metadata/metadata-exported.h 2010/06/30 20:03:52 1.164
+++ LVM2/lib/metadata/metadata-exported.h 2010/07/08 18:24:30 1.165
@@ -522,16 +522,17 @@
/* pe_start and pe_end relate to any existing data so that new metadata
* areas can avoid overlap */
struct physical_volume *pv_create(const struct cmd_context *cmd,
- struct device *dev,
- struct id *id,
- uint64_t size,
- unsigned long data_alignment,
- unsigned long data_alignment_offset,
- uint64_t pe_start,
- uint32_t existing_extent_count,
- uint32_t existing_extent_size,
- int pvmetadatacopies,
- uint64_t pvmetadatasize, struct dm_list *mdas);
+ struct device *dev,
+ struct id *id,
+ uint64_t size,
+ unsigned long data_alignment,
+ unsigned long data_alignment_offset,
+ uint64_t pe_start,
+ uint32_t existing_extent_count,
+ uint32_t existing_extent_size,
+ int pvmetadatacopies, uint64_t pvmetadatasize,
+ unsigned metadataignore,
+ struct dm_list *mdas);
int pv_resize(struct physical_volume *pv, struct volume_group *vg,
uint32_t new_pe_count);
int pv_analyze(struct cmd_context *cmd, const char *pv_name,
--- LVM2/lib/metadata/metadata.c 2010/07/08 17:41:46 1.386
+++ LVM2/lib/metadata/metadata.c 2010/07/08 18:24:30 1.387
@@ -234,7 +234,7 @@
if (!fid->fmt->ops->pv_setup(fid->fmt, UINT64_C(0), 0,
vg->extent_size, 0, 0, 0UL, UINT64_C(0),
- mdas, pv, vg)) {
+ 0, mdas, pv, vg)) {
log_error("Format-specific setup of physical volume '%s' "
"failed.", pv_name);
return 0;
@@ -1684,7 +1684,6 @@
struct dm_list mdas;
struct pvcreate_params default_pp;
char buffer[64] __attribute((aligned(8)));
- struct metadata_area *mda;
pvcreate_params_set_defaults(&default_pp);
if (!pp)
@@ -1718,8 +1717,8 @@
if (!(pv = pv_create(cmd, dev, pp->idp, pp->size,
pp->data_alignment, pp->data_alignment_offset,
pp->pe_start, pp->extent_count, pp->extent_size,
- pp->pvmetadatacopies,
- pp->pvmetadatasize,&mdas))) {
+ pp->pvmetadatacopies, pp->pvmetadatasize,
+ pp->metadataignore, &mdas))) {
log_error("Failed to setup physical volume \"%s\"", pv_name);
goto error;
}
@@ -1751,10 +1750,6 @@
log_very_verbose("Writing physical volume data to disk \"%s\"",
pv_name);
- if (pp->metadataignore)
- dm_list_iterate_items(mda, &mdas)
- mda_set_ignored(mda, 1);
-
if (!(pv_write(cmd, pv, &mdas, pp->labelsector))) {
log_error("Failed to write physical volume \"%s\"", pv_name);
goto error;
@@ -1827,8 +1822,8 @@
uint64_t pe_start,
uint32_t existing_extent_count,
uint32_t existing_extent_size,
- int pvmetadatacopies,
- uint64_t pvmetadatasize, struct dm_list *mdas)
+ int pvmetadatacopies, uint64_t pvmetadatasize,
+ unsigned metadataignore, struct dm_list *mdas)
{
const struct format_type *fmt = cmd->fmt;
struct dm_pool *mem = fmt->cmd->mem;
@@ -1877,8 +1872,8 @@
if (!fmt->ops->pv_setup(fmt, pe_start, existing_extent_count,
existing_extent_size, data_alignment,
data_alignment_offset,
- pvmetadatacopies, pvmetadatasize, mdas,
- pv, NULL)) {
+ pvmetadatacopies, pvmetadatasize,
+ metadataignore, mdas, pv, NULL)) {
log_error("%s: Format-specific setup of physical volume "
"failed.", pv_dev_name(pv));
goto bad;
--- LVM2/lib/metadata/metadata.h 2010/07/07 02:53:17 1.215
+++ LVM2/lib/metadata/metadata.h 2010/07/08 18:24:30 1.216
@@ -244,8 +244,8 @@
uint64_t pe_start, uint32_t extent_count,
uint32_t extent_size, unsigned long data_alignment,
unsigned long data_alignment_offset,
- int pvmetadatacopies,
- uint64_t pvmetadatasize, struct dm_list * mdas,
+ int pvmetadatacopies, uint64_t pvmetadatasize,
+ unsigned metadataignore, struct dm_list * mdas,
struct physical_volume * pv, struct volume_group * vg);
/*
--- LVM2/tools/vgconvert.c 2009/10/05 20:55:57 1.41
+++ LVM2/tools/vgconvert.c 2010/07/08 18:24:30 1.42
@@ -127,7 +127,7 @@
&existing_pv->id, size, 0, 0,
pe_start, pv_pe_count(existing_pv),
pv_pe_size(existing_pv), pvmetadatacopies,
- pvmetadatasize, &mdas))) {
+ pvmetadatasize, 0, &mdas))) {
log_error("Failed to setup physical volume \"%s\"",
pv_dev_name(existing_pv));
if (change_made)
^ permalink raw reply [flat|nested] 5+ messages in thread
* LVM2 lib/format1/format1.c lib/format_pool/for ...
@ 2010-06-28 20:32 wysochanski
0 siblings, 0 replies; 5+ messages in thread
From: wysochanski @ 2010-06-28 20:32 UTC (permalink / raw)
To: lvm-devel, lvm2-cvs
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: wysochanski@sourceware.org 2010-06-28 20:32:47
Modified files:
lib/format1 : format1.c
lib/format_pool: format_pool.c
lib/format_text: archiver.c format-text.c
lib/metadata : metadata-exported.h metadata.c metadata.h
lib/report : report.c
tools : vgmerge.c
Log message:
Rename fid->metadata_areas to fid->metadata_areas_in_use.
Rename the metadata_areas list to an 'in_use' list to prepare for
future 'ignored' list.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format1/format1.c.diff?cvsroot=lvm2&r1=1.116&r2=1.117
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_pool/format_pool.c.diff?cvsroot=lvm2&r1=1.27&r2=1.28
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/archiver.c.diff?cvsroot=lvm2&r1=1.30&r2=1.31
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.130&r2=1.131
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata-exported.h.diff?cvsroot=lvm2&r1=1.152&r2=1.153
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.349&r2=1.350
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.h.diff?cvsroot=lvm2&r1=1.208&r2=1.209
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/report/report.c.diff?cvsroot=lvm2&r1=1.117&r2=1.118
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgmerge.c.diff?cvsroot=lvm2&r1=1.66&r2=1.67
--- LVM2/lib/format1/format1.c 2010/04/06 14:04:20 1.116
+++ LVM2/lib/format1/format1.c 2010/06/28 20:32:44 1.117
@@ -463,7 +463,7 @@
return_NULL;
fid->fmt = fmt;
- dm_list_init(&fid->metadata_areas);
+ dm_list_init(&fid->metadata_areas_in_use);
/* Define a NULL metadata area */
if (!(mda = dm_pool_alloc(fmt->cmd->mem, sizeof(*mda)))) {
@@ -473,7 +473,7 @@
mda->ops = &_metadata_format1_ops;
mda->metadata_locn = NULL;
- dm_list_add(&fid->metadata_areas, &mda->list);
+ dm_list_add(&fid->metadata_areas_in_use, &mda->list);
return fid;
}
--- LVM2/lib/format_pool/format_pool.c 2010/04/13 17:25:13 1.27
+++ LVM2/lib/format_pool/format_pool.c 2010/06/28 20:32:46 1.28
@@ -262,7 +262,7 @@
}
fid->fmt = fmt;
- dm_list_init(&fid->metadata_areas);
+ dm_list_init(&fid->metadata_areas_in_use);
/* Define a NULL metadata area */
if (!(mda = dm_pool_zalloc(fmt->cmd->mem, sizeof(*mda)))) {
@@ -274,7 +274,7 @@
mda->ops = &_metadata_format_pool_ops;
mda->metadata_locn = NULL;
- dm_list_add(&fid->metadata_areas, &mda->list);
+ dm_list_add(&fid->metadata_areas_in_use, &mda->list);
return fid;
}
--- LVM2/lib/format_text/archiver.c 2010/04/14 13:09:16 1.30
+++ LVM2/lib/format_text/archiver.c 2010/06/28 20:32:46 1.31
@@ -277,7 +277,7 @@
return NULL;
}
- dm_list_iterate_items(mda, &tf->metadata_areas) {
+ dm_list_iterate_items(mda, &tf->metadata_areas_in_use) {
if (!(vg = mda->ops->vg_read(tf, vg_name, mda)))
stack;
break;
@@ -327,7 +327,7 @@
}
if (!vg->fid->fmt->ops->
pv_setup(vg->fid->fmt, UINT64_C(0), 0, 0, 0, 0, 0UL,
- UINT64_C(0), &vg->fid->metadata_areas, pv, vg)) {
+ UINT64_C(0), &vg->fid->metadata_areas_in_use, pv, vg)) {
log_error("Format-specific setup for %s failed",
pv_dev_name(pv));
return 0;
@@ -397,7 +397,7 @@
}
/* Write and commit the metadata area */
- dm_list_iterate_items(mda, &tf->metadata_areas) {
+ dm_list_iterate_items(mda, &tf->metadata_areas_in_use) {
if (!(r = mda->ops->vg_write(tf, vg, mda))) {
stack;
continue;
--- LVM2/lib/format_text/format-text.c 2010/06/28 20:31:59 1.130
+++ LVM2/lib/format_text/format-text.c 2010/06/28 20:32:46 1.131
@@ -1208,7 +1208,7 @@
raw_list = &((struct mda_lists *) fmt->private)->raws;
fid.fmt = fmt;
- dm_list_init(&fid.metadata_areas);
+ dm_list_init(&fid.metadata_areas_in_use);
dm_list_iterate_items(rl, raw_list) {
/* FIXME We're reading mdah twice here... */
@@ -1914,14 +1914,14 @@
fid->private = (void *) fidtc;
fid->fmt = fmt;
- dm_list_init(&fid->metadata_areas);
+ dm_list_init(&fid->metadata_areas_in_use);
if (!vgname) {
if (!(mda = dm_pool_alloc(fmt->cmd->mem, sizeof(*mda))))
return_NULL;
mda->ops = &_metadata_text_file_backup_ops;
mda->metadata_locn = context;
- dm_list_add(&fid->metadata_areas, &mda->list);
+ dm_list_add(&fid->metadata_areas_in_use, &mda->list);
} else {
dir_list = &((struct mda_lists *) fmt->private)->dirs;
@@ -1938,7 +1938,7 @@
return_NULL;
mda->ops = &_metadata_text_file_ops;
mda->metadata_locn = context;
- dm_list_add(&fid->metadata_areas, &mda->list);
+ dm_list_add(&fid->metadata_areas_in_use, &mda->list);
}
raw_list = &((struct mda_lists *) fmt->private)->raws;
@@ -1958,7 +1958,7 @@
memcpy(&mdac->area, &rl->dev_area, sizeof(mdac->area));
mda->ops = &_metadata_text_raw_ops;
/* FIXME MISTAKE? mda->metadata_locn = context; */
- dm_list_add(&fid->metadata_areas, &mda->list);
+ dm_list_add(&fid->metadata_areas_in_use, &mda->list);
}
/* Scan PVs in VG for any further MDAs */
@@ -1972,7 +1972,7 @@
mda_new = mda_copy(fmt->cmd->mem, mda);
if (!mda_new)
return_NULL;
- dm_list_add(&fid->metadata_areas, &mda_new->list);
+ dm_list_add(&fid->metadata_areas_in_use, &mda_new->list);
}
}
/* FIXME Check raw metadata area count - rescan if required */
--- LVM2/lib/metadata/metadata-exported.h 2010/05/24 15:32:20 1.152
+++ LVM2/lib/metadata/metadata-exported.h 2010/06/28 20:32:46 1.153
@@ -215,7 +215,7 @@
struct format_instance {
const struct format_type *fmt;
- struct dm_list metadata_areas; /* e.g. metadata locations */
+ struct dm_list metadata_areas_in_use; /* e.g. metadata locations */
void *private;
};
--- LVM2/lib/metadata/metadata.c 2010/06/28 20:31:59 1.349
+++ LVM2/lib/metadata/metadata.c 2010/06/28 20:32:46 1.350
@@ -217,7 +217,7 @@
if (!fid->fmt->ops->pv_setup(fid->fmt, UINT64_C(0), 0,
vg->extent_size, 0, 0, 0UL, UINT64_C(0),
- &fid->metadata_areas, pv, vg)) {
+ &fid->metadata_areas_in_use, pv, vg)) {
log_error("Format-specific setup of physical volume '%s' "
"failed.", pv_name);
return 0;
@@ -1255,8 +1255,8 @@
struct dm_list *mdas_from, *mdas_to;
int common_mda = 0;
- mdas_from = &vg_from->fid->metadata_areas;
- mdas_to = &vg_to->fid->metadata_areas;
+ mdas_from = &vg_from->fid->metadata_areas_in_use;
+ mdas_to = &vg_to->fid->metadata_areas_in_use;
dm_list_iterate_items_safe(mda, mda2, mdas_from) {
if (!mda->ops->mda_in_vg) {
@@ -1844,7 +1844,7 @@
/* FIXME Improve recovery situation? */
/* Remove each copy of the metadata */
- dm_list_iterate_items(mda, &vg->fid->metadata_areas) {
+ dm_list_iterate_items(mda, &vg->fid->metadata_areas_in_use) {
if (mda->ops->vg_remove &&
!mda->ops->vg_remove(vg->fid, vg, mda))
return_0;
@@ -2362,7 +2362,7 @@
}
- if (dm_list_empty(&vg->fid->metadata_areas)) {
+ if (dm_list_empty(&vg->fid->metadata_areas_in_use)) {
log_error("Aborting vg_write: No metadata areas to write to!");
return 0;
}
@@ -2375,12 +2375,12 @@
vg->seqno++;
/* Write to each copy of the metadata area */
- dm_list_iterate_items(mda, &vg->fid->metadata_areas) {
+ dm_list_iterate_items(mda, &vg->fid->metadata_areas_in_use) {
if (!mda->ops->vg_write) {
log_error("Format does not support writing volume"
"group metadata areas");
/* Revert */
- dm_list_uniterate(mdah, &vg->fid->metadata_areas, &mda->list) {
+ dm_list_uniterate(mdah, &vg->fid->metadata_areas_in_use, &mda->list) {
mda = dm_list_item(mdah, struct metadata_area);
if (mda->ops->vg_revert &&
@@ -2393,7 +2393,7 @@
if (!mda->ops->vg_write(vg->fid, vg, mda)) {
stack;
/* Revert */
- dm_list_uniterate(mdah, &vg->fid->metadata_areas, &mda->list) {
+ dm_list_uniterate(mdah, &vg->fid->metadata_areas_in_use, &mda->list) {
mda = dm_list_item(mdah, struct metadata_area);
if (mda->ops->vg_revert &&
@@ -2406,12 +2406,12 @@
}
/* Now pre-commit each copy of the new metadata */
- dm_list_iterate_items(mda, &vg->fid->metadata_areas) {
+ dm_list_iterate_items(mda, &vg->fid->metadata_areas_in_use) {
if (mda->ops->vg_precommit &&
!mda->ops->vg_precommit(vg->fid, vg, mda)) {
stack;
/* Revert */
- dm_list_iterate_items(mda, &vg->fid->metadata_areas) {
+ dm_list_iterate_items(mda, &vg->fid->metadata_areas_in_use) {
if (mda->ops->vg_revert &&
!mda->ops->vg_revert(vg->fid, vg, mda)) {
stack;
@@ -2438,7 +2438,7 @@
}
/* Commit to each copy of the metadata area */
- dm_list_iterate_items(mda, &vg->fid->metadata_areas) {
+ dm_list_iterate_items(mda, &vg->fid->metadata_areas_in_use) {
failed = 0;
if (mda->ops->vg_commit &&
!mda->ops->vg_commit(vg->fid, vg, mda)) {
@@ -2476,7 +2476,7 @@
{
struct metadata_area *mda;
- dm_list_iterate_items(mda, &vg->fid->metadata_areas) {
+ dm_list_iterate_items(mda, &vg->fid->metadata_areas_in_use) {
if (mda->ops->vg_revert &&
!mda->ops->vg_revert(vg->fid, vg, mda)) {
stack;
@@ -2691,7 +2691,7 @@
return_NULL;
/* Ensure contents of all metadata areas match - else do recovery */
- dm_list_iterate_items(mda, &fid->metadata_areas) {
+ dm_list_iterate_items(mda, &fid->metadata_areas_in_use) {
if ((use_precommitted &&
!(vg = mda->ops->vg_read_precommit(fid, vgname, mda))) ||
(!use_precommitted &&
@@ -2809,7 +2809,7 @@
}
/* Ensure contents of all metadata areas match - else recover */
- dm_list_iterate_items(mda, &fid->metadata_areas) {
+ dm_list_iterate_items(mda, &fid->metadata_areas_in_use) {
if ((use_precommitted &&
!(vg = mda->ops->vg_read_precommit(fid, vgname,
mda))) ||
@@ -3897,8 +3897,8 @@
* physical_volume. The location of the mda depends on whether
* the PV is in a volume group. A PV not in a VG has an mda on the
* 'info->mda' list in lvmcache, while a PV in a VG has an mda on
- * the vg->fid->metadata_areas list. For further details, see _vg_read(),
- * and the sequence of creating the format_instance with fid->metadata_areas
+ * the vg->fid->metadata_areas_in_use list. For further details, see _vg_read(),
+ * and the sequence of creating the format_instance with fid->metadata_areas_in_use
* list, as well as the construction of the VG, with list of PVs (comes
* after the construction of the fid and list of mdas).
*/
@@ -3984,7 +3984,7 @@
uint32_t vg_mda_count(const struct volume_group *vg)
{
- return dm_list_size(&vg->fid->metadata_areas);
+ return dm_list_size(&vg->fid->metadata_areas_in_use);
}
uint64_t lv_size(const struct logical_volume *lv)
--- LVM2/lib/metadata/metadata.h 2010/06/28 20:31:59 1.208
+++ LVM2/lib/metadata/metadata.h 2010/06/28 20:32:46 1.209
@@ -162,8 +162,8 @@
struct metadata_area *mda);
/*
- * Do these two metadata_areas match with respect to their underlying
- * location?
+ * Do these two metadata_area structures match with respect to
+ * their underlying location?
*/
unsigned (*mda_locns_match)(struct metadata_area *mda1,
struct metadata_area *mda2);
--- LVM2/lib/report/report.c 2010/06/23 12:32:08 1.117
+++ LVM2/lib/report/report.c 2010/06/28 20:32:47 1.118
@@ -957,7 +957,7 @@
const struct volume_group *vg = (const struct volume_group *) data;
uint64_t min_mda_size;
- min_mda_size = _find_min_mda_size(&vg->fid->metadata_areas);
+ min_mda_size = _find_min_mda_size(&vg->fid->metadata_areas_in_use);
return _size64_disp(rh, mem, field, &min_mda_size, private);
}
@@ -970,7 +970,7 @@
uint64_t freespace = UINT64_MAX, mda_free;
struct metadata_area *mda;
- dm_list_iterate_items(mda, &vg->fid->metadata_areas) {
+ dm_list_iterate_items(mda, &vg->fid->metadata_areas_in_use) {
if (!mda->ops->mda_free_sectors)
continue;
mda_free = mda->ops->mda_free_sectors(mda);
@@ -1126,7 +1126,7 @@
/* necessary for displaying something for PVs not belonging to VG */
static struct format_instance _dummy_fid = {
- .metadata_areas = { &(_dummy_fid.metadata_areas), &(_dummy_fid.metadata_areas) },
+ .metadata_areas_in_use = { &(_dummy_fid.metadata_areas_in_use), &(_dummy_fid.metadata_areas_in_use) },
};
static struct volume_group _dummy_vg = {
--- LVM2/tools/vgmerge.c 2010/04/13 17:26:03 1.66
+++ LVM2/tools/vgmerge.c 2010/06/28 20:32:47 1.67
@@ -120,10 +120,10 @@
dm_list_move(&vg_to->lvs, lvh);
}
- while (!dm_list_empty(&vg_from->fid->metadata_areas)) {
- struct dm_list *mdah = vg_from->fid->metadata_areas.n;
+ while (!dm_list_empty(&vg_from->fid->metadata_areas_in_use)) {
+ struct dm_list *mdah = vg_from->fid->metadata_areas_in_use.n;
- dm_list_move(&vg_to->fid->metadata_areas, mdah);
+ dm_list_move(&vg_to->fid->metadata_areas_in_use, mdah);
}
vg_to->extent_count += vg_from->extent_count;
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-03-10 12:43 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-21 12:16 LVM2 lib/format1/format1.c lib/format_pool/for prajnoha
-- strict thread matches above, loose matches on Subject: below --
2011-03-10 12:43 zkabelac
2011-02-21 12:24 prajnoha
2010-07-08 18:24 wysochanski
2010-06-28 20:32 wysochanski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).