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 --- 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.2.02.45/lib/format1/import-export.c =================================================================== --- LVM2.2.02.45.orig/lib/format1/import-export.c 2009-05-19 22:12:14.000000000 +0200 +++ LVM2.2.02.45/lib/format1/import-export.c 2009-05-19 22:14:08.000000000 +0200 @@ -338,11 +338,7 @@ int import_lv(struct dm_pool *mem, struc 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.2.02.45/lib/format_pool/import_export.c =================================================================== --- LVM2.2.02.45.orig/lib/format_pool/import_export.c 2009-05-19 22:12:14.000000000 +0200 +++ LVM2.2.02.45/lib/format_pool/import_export.c 2009-05-19 22:14:08.000000000 +0200 @@ -79,11 +79,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; @@ -108,10 +104,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.2.02.45/lib/format_text/import_vsn1.c =================================================================== --- LVM2.2.02.45.orig/lib/format_text/import_vsn1.c 2009-05-19 22:12:14.000000000 +0200 +++ LVM2.2.02.45/lib/format_text/import_vsn1.c 2009-05-19 22:14:08.000000000 +0200 @@ -547,11 +547,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.2.02.45/lib/metadata/lv_manip.c =================================================================== --- LVM2.2.02.45.orig/lib/metadata/lv_manip.c 2009-05-19 22:12:14.000000000 +0200 +++ LVM2.2.02.45/lib/metadata/lv_manip.c 2009-05-19 22:14:08.000000000 +0200 @@ -1817,6 +1817,18 @@ char *generate_lv_name(struct volume_gro } /* + * 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, @@ -1873,11 +1885,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.2.02.45/lib/metadata/metadata-exported.h =================================================================== --- LVM2.2.02.45.orig/lib/metadata/metadata-exported.h 2009-05-19 22:14:03.000000000 +0200 +++ LVM2.2.02.45/lib/metadata/metadata-exported.h 2009-05-19 22:14:08.000000000 +0200 @@ -438,6 +438,7 @@ int vg_split_mdas(struct cmd_context *cm struct volume_group *vg_to); /* Manipulate LVs */ +void lv_init(struct logical_volume *lv); struct logical_volume *lv_create_empty(const char *name, union lvid *lvid, uint32_t status,