mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-10 16:58:47 +03:00
Add metadata_areas_ignored list and functions to manage ignored mdas.
Add a second mda list, metadata_areas_ignored to fid, and a couple functions, fid_add_mda() and fid_add_mdas() to help manage the lists. These functions are needed to properly count the ignored mdas and manage the lists attached to the 'fid' and ultimately the 'vg'. Ensure metadata_areas_ignored is initialized in other formats, even if the list is never used. Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
This commit is contained in:
parent
f55a20eb36
commit
9ccac021a7
@ -464,6 +464,7 @@ static struct format_instance *_format1_create_instance(const struct format_type
|
||||
|
||||
fid->fmt = fmt;
|
||||
dm_list_init(&fid->metadata_areas_in_use);
|
||||
dm_list_init(&fid->metadata_areas_ignored);
|
||||
|
||||
/* Define a NULL metadata area */
|
||||
if (!(mda = dm_pool_alloc(fmt->cmd->mem, sizeof(*mda)))) {
|
||||
|
@ -263,6 +263,7 @@ static struct format_instance *_pool_create_instance(const struct format_type *f
|
||||
|
||||
fid->fmt = fmt;
|
||||
dm_list_init(&fid->metadata_areas_in_use);
|
||||
dm_list_init(&fid->metadata_areas_ignored);
|
||||
|
||||
/* Define a NULL metadata area */
|
||||
if (!(mda = dm_pool_zalloc(fmt->cmd->mem, sizeof(*mda)))) {
|
||||
|
@ -1209,6 +1209,7 @@ static int _scan_raw(const struct format_type *fmt)
|
||||
|
||||
fid.fmt = fmt;
|
||||
dm_list_init(&fid.metadata_areas_in_use);
|
||||
dm_list_init(&fid.metadata_areas_ignored);
|
||||
|
||||
dm_list_iterate_items(rl, raw_list) {
|
||||
/* FIXME We're reading mdah twice here... */
|
||||
@ -1915,6 +1916,7 @@ static struct format_instance *_text_create_text_instance(const struct format_ty
|
||||
|
||||
fid->fmt = fmt;
|
||||
dm_list_init(&fid->metadata_areas_in_use);
|
||||
dm_list_init(&fid->metadata_areas_ignored);
|
||||
|
||||
if (!vgname) {
|
||||
if (!(mda = dm_pool_alloc(fmt->cmd->mem, sizeof(*mda))))
|
||||
|
@ -215,7 +215,14 @@ struct physical_volume {
|
||||
|
||||
struct format_instance {
|
||||
const struct format_type *fmt;
|
||||
struct dm_list metadata_areas_in_use; /* e.g. metadata locations */
|
||||
/*
|
||||
* Each mda in a vg is on exactly one of the below lists.
|
||||
* MDAs on the 'in_use' list will be read from / written to
|
||||
* disk, while MDAs on the 'ignored' list will not be read
|
||||
* or written to.
|
||||
*/
|
||||
struct dm_list metadata_areas_in_use;
|
||||
struct dm_list metadata_areas_ignored;
|
||||
void *private;
|
||||
};
|
||||
|
||||
|
@ -3855,6 +3855,29 @@ uint32_t pv_pe_alloc_count(const struct physical_volume *pv)
|
||||
return pv_field(pv, pe_alloc_count);
|
||||
}
|
||||
|
||||
void fid_add_mda(struct format_instance *fid, struct metadata_area *mda)
|
||||
{
|
||||
if (mda_is_ignored(mda))
|
||||
dm_list_add(&fid->metadata_areas_ignored,
|
||||
&mda->list);
|
||||
else
|
||||
dm_list_add(&fid->metadata_areas_in_use,
|
||||
&mda->list);
|
||||
}
|
||||
|
||||
int fid_add_mdas(struct format_instance *fid, struct dm_list *mdas)
|
||||
{
|
||||
struct metadata_area *mda, *mda_new;
|
||||
|
||||
dm_list_iterate_items(mda, mdas) {
|
||||
mda_new = mda_copy(fid->fmt->cmd->mem, mda);
|
||||
if (!mda_new)
|
||||
return_0;
|
||||
fid_add_mda(fid, mda_new);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy constructor for a metadata_area.
|
||||
*/
|
||||
|
@ -183,6 +183,8 @@ struct metadata_area *mda_copy(struct dm_pool *mem,
|
||||
unsigned mda_is_ignored(struct metadata_area *mda);
|
||||
void mda_set_ignored(struct metadata_area *mda, int value);
|
||||
unsigned mda_locns_match(struct metadata_area *mda1, struct metadata_area *mda2);
|
||||
void fid_add_mda(struct format_instance *fid, struct metadata_area *mda);
|
||||
int fid_add_mdas(struct format_instance *fid, struct dm_list *mdas);
|
||||
|
||||
#define seg_pvseg(seg, s) (seg)->areas[(s)].u.pv.pvseg
|
||||
#define seg_dev(seg, s) (seg)->areas[(s)].u.pv.pvseg->pv->dev
|
||||
|
@ -1127,6 +1127,7 @@ static int _copypercent_disp(struct dm_report *rh __attribute((unused)),
|
||||
/* necessary for displaying something for PVs not belonging to VG */
|
||||
static struct format_instance _dummy_fid = {
|
||||
.metadata_areas_in_use = { &(_dummy_fid.metadata_areas_in_use), &(_dummy_fid.metadata_areas_in_use) },
|
||||
.metadata_areas_ignored = { &(_dummy_fid.metadata_areas_ignored), &(_dummy_fid.metadata_areas_ignored) },
|
||||
};
|
||||
|
||||
static struct volume_group _dummy_vg = {
|
||||
|
Loading…
x
Reference in New Issue
Block a user