[lvm-devel] LVM2/lib format1/format1.c format_pool/format_ ...

wysochanski at sourceware.org wysochanski at sourceware.org
Mon Jun 28 20:33:24 UTC 2010


CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	wysochanski at sourceware.org	2010-06-28 20:33:23

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 
	lib/report     : report.c 

Log message:
	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 at redhat.com>

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format1/format1.c.diff?cvsroot=lvm2&r1=1.117&r2=1.118
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_pool/format_pool.c.diff?cvsroot=lvm2&r1=1.28&r2=1.29
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.131&r2=1.132
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata-exported.h.diff?cvsroot=lvm2&r1=1.153&r2=1.154
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.350&r2=1.351
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.h.diff?cvsroot=lvm2&r1=1.209&r2=1.210
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/report/report.c.diff?cvsroot=lvm2&r1=1.118&r2=1.119

--- LVM2/lib/format1/format1.c	2010/06/28 20:32:44	1.117
+++ LVM2/lib/format1/format1.c	2010/06/28 20:33:22	1.118
@@ -464,6 +464,7 @@
 
 	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)))) {
--- LVM2/lib/format_pool/format_pool.c	2010/06/28 20:32:46	1.28
+++ LVM2/lib/format_pool/format_pool.c	2010/06/28 20:33:23	1.29
@@ -263,6 +263,7 @@
 
 	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)))) {
--- LVM2/lib/format_text/format-text.c	2010/06/28 20:32:46	1.131
+++ LVM2/lib/format_text/format-text.c	2010/06/28 20:33:23	1.132
@@ -1209,6 +1209,7 @@
 
 	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 @@
 
 	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))))
--- LVM2/lib/metadata/metadata-exported.h	2010/06/28 20:32:46	1.153
+++ LVM2/lib/metadata/metadata-exported.h	2010/06/28 20:33:23	1.154
@@ -215,7 +215,14 @@
 
 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;
 };
 
--- LVM2/lib/metadata/metadata.c	2010/06/28 20:32:46	1.350
+++ LVM2/lib/metadata/metadata.c	2010/06/28 20:33:23	1.351
@@ -3855,6 +3855,29 @@
 	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.
  */
--- LVM2/lib/metadata/metadata.h	2010/06/28 20:32:46	1.209
+++ LVM2/lib/metadata/metadata.h	2010/06/28 20:33:23	1.210
@@ -183,6 +183,8 @@
 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
--- LVM2/lib/report/report.c	2010/06/28 20:32:47	1.118
+++ LVM2/lib/report/report.c	2010/06/28 20:33:23	1.119
@@ -1127,6 +1127,7 @@
 /* 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 = {




More information about the lvm-devel mailing list