[lvm-devel] Re: [PATCH]: unify logical volume structure initialization

Mike Snitzer snitzer at redhat.com
Thu Sep 24 20:28:04 UTC 2009


On Thu, Sep 24 2009 at  8:59am -0400,
Mikulas Patocka <mpatocka at redhat.com> wrote:

> Hi
> 
> I'm submitting this patch to lvm because both snapshot and replicators 
> groups need it.
> 
> Mikulas
> 
> ---
> 
> Copying code is terrible practice. The code is hard to change for anyone.
> Because I need to change this code and don't want to copy the change to any
> place, I moved it to a separate function.
> 
> Signed-off-by: Mikulas Patocka <mpatocka at redhat.com>
> Signed-off-by: Mike Snitzer <snitzer at redhat.com>
> 
> [snitm: import_snapshots() change should be in different patch?]

I since revised this patch to move the import_snapshots() change to
where it belongs, namely:
http://people.redhat.com/msnitzer/patches/snapshot-merge/lvm2/LVM2-2.02.52/lvm-merge-lvconvert-basic-support.patch

I've inlined the updated lvm-move-common-code-to-function-lv_init.patch
here:
---

Copying code is terrible practice. The code is hard to change for anyone.
Because I need to change this code and don't want to copy the change to any
place, I moved it to a separate function.

Signed-off-by: Mikulas Patocka <mpatocka at redhat.com>
Signed-off-by: Mike Snitzer <snitzer at redhat.com>

---
 lib/format1/import-export.c      |    6 +-----
 lib/format_pool/import_export.c  |   11 ++---------
 lib/format_text/import_vsn1.c    |    6 +-----
 lib/metadata/lv_manip.c          |   18 +++++++++++++-----
 lib/metadata/metadata-exported.h |    1 +
 5 files changed, 18 insertions(+), 24 deletions(-)

Index: lvm2/lib/format1/import-export.c
===================================================================
--- lvm2.orig/lib/format1/import-export.c
+++ lvm2/lib/format1/import-export.c
@@ -337,11 +337,7 @@ int import_lv(struct cmd_context *cmd, s
 	lv->size = lvd->lv_size;
 	lv->le_count = lvd->lv_allocated_le;
 
-	lv->snapshot = NULL;
-	dm_list_init(&lv->snapshot_segs);
-	dm_list_init(&lv->segments);
-	dm_list_init(&lv->tags);
-	dm_list_init(&lv->segs_using_this_lv);
+	lv_init(lv);
 
 	return 1;
 }
Index: lvm2/lib/format_pool/import_export.c
===================================================================
--- lvm2.orig/lib/format_pool/import_export.c
+++ lvm2/lib/format_pool/import_export.c
@@ -70,11 +70,7 @@ int import_pool_lvs(struct volume_group 
 	lv->name = NULL;
 	lv->le_count = 0;
 	lv->read_ahead = vg->cmd->default_settings.read_ahead;
-	lv->snapshot = NULL;
-	dm_list_init(&lv->snapshot_segs);
-	dm_list_init(&lv->segments);
-	dm_list_init(&lv->tags);
-	dm_list_init(&lv->segs_using_this_lv);
+	lv_init(lv);
 
 	dm_list_iterate_items(pl, pls) {
 		lv->size += pl->pd.pl_blocks;
@@ -99,10 +95,7 @@ int import_pool_lvs(struct volume_group 
 		} else {
 			lv->minor = -1;
 		}
-		lv->snapshot = NULL;
-		dm_list_init(&lv->snapshot_segs);
-		dm_list_init(&lv->segments);
-		dm_list_init(&lv->tags);
+		lv_init(lv);
 	}
 
 	lv->le_count = lv->size / POOL_PE_SIZE;
Index: lvm2/lib/format_text/import_vsn1.c
===================================================================
--- lvm2.orig/lib/format_text/import_vsn1.c
+++ lvm2/lib/format_text/import_vsn1.c
@@ -541,11 +541,7 @@ static int _read_lvnames(struct format_i
 		}
 	}
 
-	lv->snapshot = NULL;
-	dm_list_init(&lv->snapshot_segs);
-	dm_list_init(&lv->segments);
-	dm_list_init(&lv->tags);
-	dm_list_init(&lv->segs_using_this_lv);
+	lv_init(lv);
 
 	/* Optional tags */
 	if ((cn = find_config_node(lvn, "tags")) &&
Index: lvm2/lib/metadata/lv_manip.c
===================================================================
--- lvm2.orig/lib/metadata/lv_manip.c
+++ lvm2/lib/metadata/lv_manip.c
@@ -1863,6 +1863,18 @@ int vg_max_lv_reached(struct volume_grou
 }
 
 /*
+ * Initialize common fields in a structure.
+ */
+void lv_init(struct logical_volume *lv)
+{
+	lv->snapshot = NULL;
+	dm_list_init(&lv->snapshot_segs);
+	dm_list_init(&lv->segments);
+	dm_list_init(&lv->tags);
+	dm_list_init(&lv->segs_using_this_lv);
+}
+
+/*
  * Create a new empty LV.
  */
 struct logical_volume *lv_create_empty(const char *name,
@@ -1904,11 +1916,7 @@ struct logical_volume *lv_create_empty(c
 	lv->minor = -1;
 	lv->size = UINT64_C(0);
 	lv->le_count = 0;
-	lv->snapshot = NULL;
-	dm_list_init(&lv->snapshot_segs);
-	dm_list_init(&lv->segments);
-	dm_list_init(&lv->tags);
-	dm_list_init(&lv->segs_using_this_lv);
+	lv_init(lv);
 
 	if (lvid)
 		lv->lvid = *lvid;
Index: lvm2/lib/metadata/metadata-exported.h
===================================================================
--- lvm2.orig/lib/metadata/metadata-exported.h
+++ lvm2/lib/metadata/metadata-exported.h
@@ -466,6 +466,7 @@ int remove_lvs_in_vg(struct cmd_context 
 void vg_release(struct volume_group *vg);
 
 /* Manipulate LVs */
+void lv_init(struct logical_volume *lv);
 struct logical_volume *lv_create_empty(const char *name,
 				       union lvid *lvid,
 				       uint32_t status,




More information about the lvm-devel mailing list