[lvm-devel] main - archiving: take archive automatically

Zdenek Kabelac zkabelac at sourceware.org
Wed Jun 9 12:57:30 UTC 2021


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=ba3707d9539f9cc2e72c5368388ae795776379af
Commit:        ba3707d9539f9cc2e72c5368388ae795776379af
Parent:        df27392c8c9ec5d1efd92c2214805471473f2a06
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Tue Jun 8 19:02:07 2021 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Wed Jun 9 14:56:13 2021 +0200

archiving: take archive automatically

Instead of calling explicit archive with command processing logic,
move this step towards 1st. vg_write() call, which will automatically
store archive of committed metadata.

This slightly changes some error path where the error in archiving
was detected earlier in the command, while now some on going command
'actions' might have been, but will be simply scratched in case
of error (since even new metadata would not have been even written).

So general effect should be only some command message ordering.
---
 lib/metadata/lv_manip.c | 15 ---------------
 lib/metadata/metadata.c |  6 +++---
 lib/metadata/pv_manip.c |  3 ---
 lib/metadata/vg.c       |  3 ---
 tools/lvconvert.c       | 30 ------------------------------
 tools/pvchange.c        |  2 --
 tools/pvmove.c          |  3 ---
 tools/vgchange.c        |  8 --------
 tools/vgcreate.c        |  3 ---
 tools/vgexport.c        |  4 ----
 tools/vgextend.c        |  6 ------
 tools/vgimport.c        |  3 ---
 tools/vgimportclone.c   |  3 ---
 tools/vgreduce.c        |  3 ---
 tools/vgrename.c        |  3 ---
 15 files changed, 3 insertions(+), 92 deletions(-)

diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 37dd3611d..899297f28 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -4834,9 +4834,6 @@ int lv_rename_update(struct cmd_context *cmd, struct logical_volume *lv,
 		}
 	}
 
-	if (update_mda && !archive(vg))
-		return_0;
-
 	if (old_lv_is_historical) {
 		/*
 		 * Historical LVs have neither sub LVs nor any
@@ -6146,9 +6143,6 @@ int lv_resize(struct logical_volume *lv,
 	if (!lockd_lv_resize(cmd, lock_lv, "ex", 0, lp))
 		return_0;
 
-	if (!archive(vg))
-		return_0;
-
 	/* Remove any striped raid reshape space for LV resizing */
 	if (aux_lv && first_seg(aux_lv)->reshape_len)
 		if (!lv_raid_free_reshape_space(aux_lv))
@@ -6719,9 +6713,6 @@ int lv_remove_single(struct cmd_context *cmd, struct logical_volume *lv,
 			return 0;
 		}
 
-		if (!archive(vg))
-			return_0;
-
 		if (!lv_detach_writecache_cachevol(lv, 1)) {
 			log_error("Failed to detach writecache from %s", display_lvname(lv));
 			return 0;
@@ -6742,9 +6733,6 @@ int lv_remove_single(struct cmd_context *cmd, struct logical_volume *lv,
 		/* FIXME Review and fix the snapshot error paths! */
 		return_0;
 
-	if (!archive(vg))
-		return_0;
-
 	/* Special case removing a striped raid LV with allocated reshape space */
 	if (seg && seg->reshape_len) {
 		if (!(seg->segtype = get_segtype_from_string(cmd, SEG_TYPE_NAME_STRIPED)))
@@ -8458,9 +8446,6 @@ static struct logical_volume *_lv_create_an_lv(struct volume_group *vg,
 		return NULL;
 	}
 
-	if (!archive(vg))
-		return_NULL;
-
 	if (pool_lv && segtype_is_thin_volume(create_segtype)) {
 		/* Ensure all stacked messages are submitted */
 		if ((pool_is_active(pool_lv) || is_change_activating(lp->activate)) &&
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index 0b284435b..6852d2a2a 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -614,9 +614,6 @@ int vg_remove_check(struct volume_group *vg)
 		return 0;
 	}
 
-	if (!archive(vg))
-		return 0;
-
 	return 1;
 }
 
@@ -2978,6 +2975,9 @@ int vg_write(struct volume_group *vg)
 	if (vg->cmd->wipe_outdated_pvs)
 		_wipe_outdated_pvs(vg->cmd, vg);
 
+	if (!vg_is_archived(vg) && vg->vg_committed && !archive(vg->vg_committed))
+		return_0;
+
 	if (critical_section())
 		log_error(INTERNAL_ERROR
 			  "Writing metadata in critical section.");
diff --git a/lib/metadata/pv_manip.c b/lib/metadata/pv_manip.c
index 5fd80a2ce..fd97bbbc2 100644
--- a/lib/metadata/pv_manip.c
+++ b/lib/metadata/pv_manip.c
@@ -623,9 +623,6 @@ int pv_resize_single(struct cmd_context *cmd,
 	const char *vg_name = pv->vg_name;
 	int vg_needs_pv_write = 0;
 
-	if (!archive(vg))
-		goto out;
-
 	if (!(pv->fmt->features & FMT_RESIZE_PV)) {
 		log_error("Physical volume %s format does not support resizing.",
 			  pv_name);
diff --git a/lib/metadata/vg.c b/lib/metadata/vg.c
index 3f9ec8d35..428e5dca7 100644
--- a/lib/metadata/vg.c
+++ b/lib/metadata/vg.c
@@ -694,9 +694,6 @@ int vgreduce_single(struct cmd_context *cmd, struct volume_group *vg,
 
 	pvl = find_pv_in_vg(vg, name);
 
-	if (!archive(vg))
-		goto_bad;
-
 	log_verbose("Removing \"%s\" from volume group \"%s\"", name, vg->name);
 
 	if (pvl)
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 71f7a7627..c40031fe4 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -1861,9 +1861,6 @@ static int _lvconvert_splitsnapshot(struct cmd_context *cmd, struct logical_volu
 		}
 	}
 
-	if (!archive(vg))
-		return_0;
-
 	log_verbose("Splitting snapshot %s from its origin.", display_lvname(cow));
 
 	if (!vg_remove_snapshot(cow))
@@ -2796,9 +2793,6 @@ static int _lvconvert_to_thin_with_external(struct cmd_context *cmd,
 	if (!(lvc.segtype = get_segtype_from_string(cmd, SEG_TYPE_NAME_THIN)))
 		return_0;
 
-	if (!archive(vg))
-		return_0;
-
 	/*
 	 * New thin LV needs to be created (all messages sent to pool) In this
 	 * case thin volume is created READ-ONLY and also warn about not
@@ -2979,9 +2973,6 @@ static int _lvconvert_swap_pool_metadata(struct cmd_context *cmd,
 		return 0;
 	}
 
-	if (!archive(vg))
-		return_0;
-
 	/* Swap names between old and new metadata LV */
 
 	if (!detach_pool_metadata_lv(seg, &prev_metadata_lv))
@@ -3286,9 +3277,6 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
 		meta_readahead = arg_uint_value(cmd, readahead_ARG, cmd->default_settings.read_ahead);
 		meta_alloc = (alloc_policy_t) arg_uint_value(cmd, alloc_ARG, ALLOC_INHERIT);
 
-		if (!archive(vg))
-			goto_bad;
-
 		if (!(metadata_lv = alloc_pool_metadata(lv,
 							meta_name,
 							meta_readahead,
@@ -3305,9 +3293,6 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
 			goto bad;
 		}
 
-		if (!archive(vg))
-			goto_bad;
-
 		if (zero_metadata) {
 			metadata_lv->status |= LV_ACTIVATION_SKIP;
 			if (!activate_lv(cmd, metadata_lv)) {
@@ -3556,9 +3541,6 @@ static int _cache_vol_attach(struct cmd_context *cmd,
 	if (!get_cache_params(cmd, &chunk_size, &cache_metadata_format, &cache_mode, &policy_name, &policy_settings))
 		goto_out;
 
-	if (!archive(vg))
-		goto_out;
-
 	/*
 	 * lv/cache_lv keeps the same lockd lock it had before, the lock for
 	 * lv_fast is kept but is not used while it's attached, and
@@ -5525,9 +5507,6 @@ static int _lvconvert_to_vdopool_single(struct cmd_context *cmd,
 		}
 	}
 
-	if (!archive(vg))
-		goto_out;
-
 	if (!convert_vdo_pool_lv(lv, &vdo_params, &lvc.virtual_extents, zero_vdopool))
 		goto_out;
 
@@ -6198,9 +6177,6 @@ int lvconvert_writecache_attach_single(struct cmd_context *cmd,
 	if (fast_name && !lockd_lv(cmd, lv_fast, "ex", 0))
 		goto_bad;
 
-	if (!archive(vg))
-		goto_bad;
-
 	/*
 	 * lv keeps the same lockd lock it had before, the lock for
 	 * lv_fast is kept but is not used while it's attached, and
@@ -6339,9 +6315,6 @@ static int _lvconvert_integrity_remove(struct cmd_context *cmd, struct logical_v
 	if (!lockd_lv(cmd, lv, "ex", 0))
 		return_0;
 
-	if (!archive(vg))
-		return_0;
-
 	if (lv_is_raid(lv))
 		ret = lv_remove_integrity_from_raid(lv);
 	if (!ret)
@@ -6371,9 +6344,6 @@ static int _lvconvert_integrity_add(struct cmd_context *cmd, struct logical_volu
 	} else
 		use_pvh = &vg->pvs;
 
-	if (!archive(vg))
-		return_0;
-
 	if (lv_is_partial(lv)) {
 		log_error("Cannot add integrity while LV is missing PVs.");
 		return 0;
diff --git a/tools/pvchange.c b/tools/pvchange.c
index 04cbb428d..8b4a0643d 100644
--- a/tools/pvchange.c
+++ b/tools/pvchange.c
@@ -65,8 +65,6 @@ static int _pvchange_single(struct cmd_context *cmd, struct volume_group *vg,
 				  "logical volumes", pv_name);
 			goto bad;
 		}
-		if (!archive(vg))
-			goto_bad;
 	} else {
 		if (tagargs) {
 			log_error("Can't change tag on Physical Volume %s not "
diff --git a/tools/pvmove.c b/tools/pvmove.c
index bb372f7dc..ed92f3ce4 100644
--- a/tools/pvmove.c
+++ b/tools/pvmove.c
@@ -709,9 +709,6 @@ static int _pvmove_setup_single(struct cmd_context *cmd,
 							     vg, pv, pp->alloc)))
 			goto_out;
 
-		if (!archive(vg))
-			goto_out;
-
 		if (!(lv_mirr = _set_up_pvmove_lv(cmd, vg, source_pvl, lv_name,
 						  allocatable_pvs, pp->alloc,
 						  &lvs_changed, &exclusive)))
diff --git a/tools/vgchange.c b/tools/vgchange.c
index 032f3efcf..625b68d46 100644
--- a/tools/vgchange.c
+++ b/tools/vgchange.c
@@ -675,8 +675,6 @@ static int _vgchange_single(struct cmd_context *cmd, const char *vg_name,
 
 	for (i = 0; i < DM_ARRAY_SIZE(_vgchange_args); ++i) {
 		if (arg_is_set(cmd, _vgchange_args[i].arg)) {
-			if (!archive(vg))
-				return_ECMD_FAILED;
 			if (!_vgchange_args[i].fn(cmd, vg))
 				return_ECMD_FAILED;
 		}
@@ -1002,9 +1000,6 @@ static int _vgchange_locktype_single(struct cmd_context *cmd, const char *vg_nam
 			             struct volume_group *vg,
 			             struct processing_handle *handle)
 {
-	if (!archive(vg))
-		return_ECMD_FAILED;
-
 	if (!_vgchange_locktype(cmd, vg))
 		return_ECMD_FAILED;
 
@@ -1201,9 +1196,6 @@ static int _vgchange_systemid_single(struct cmd_context *cmd, const char *vg_nam
 			             struct volume_group *vg,
 			             struct processing_handle *handle)
 {
-	if (!archive(vg))
-		return_ECMD_FAILED;
-
 	if (!_vgchange_system_id(cmd, vg))
 		return_ECMD_FAILED;
 
diff --git a/tools/vgcreate.c b/tools/vgcreate.c
index f9c40e86d..d6d6bb61d 100644
--- a/tools/vgcreate.c
+++ b/tools/vgcreate.c
@@ -148,9 +148,6 @@ int vgcreate(struct cmd_context *cmd, int argc, char **argv)
 		}
 	}
 
-	if (!archive(vg))
-		goto_bad;
-
 	/* Store VG on disk(s) */
 	if (!vg_write(vg) || !vg_commit(vg))
 		goto_bad;
diff --git a/tools/vgexport.c b/tools/vgexport.c
index 86dad3abb..15cc3dd75 100644
--- a/tools/vgexport.c
+++ b/tools/vgexport.c
@@ -45,10 +45,6 @@ static int vgexport_single(struct cmd_context *cmd __attribute__((unused)),
 		}
 	}
 
-
-	if (!archive(vg))
-		goto_bad;
-
 	vg->status |= EXPORTED_VG;
 	vg->system_id = NULL;
 
diff --git a/tools/vgextend.c b/tools/vgextend.c
index 04d37f886..b0f49569f 100644
--- a/tools/vgextend.c
+++ b/tools/vgextend.c
@@ -60,9 +60,6 @@ static int _vgextend_restoremissing(struct cmd_context *cmd __attribute__((unuse
 	int fixed = 0;
 	unsigned i;
 
-	if (!archive(vg))
-		return_0;
-
 	for (i = 0; i < pp->pv_count; i++)
 		if (_restore_pv(vg, pp->pv_names[i]))
 			fixed++;
@@ -99,9 +96,6 @@ static int _vgextend_single(struct cmd_context *cmd, const char *vg_name,
 		return ECMD_FAILED;
 	}
 
-	if (!archive(vg))
-		return_ECMD_FAILED;
-
 	if (!vg_extend_each_pv(vg, pp))
 		goto_out;
 
diff --git a/tools/vgimport.c b/tools/vgimport.c
index 0d8b0f215..4b25b468f 100644
--- a/tools/vgimport.c
+++ b/tools/vgimport.c
@@ -33,9 +33,6 @@ static int _vgimport_single(struct cmd_context *cmd,
 		goto bad;
 	}
 
-	if (!archive(vg))
-		goto_bad;
-
 	vg->status &= ~EXPORTED_VG;
 
 	if (!vg_is_shared(vg))
diff --git a/tools/vgimportclone.c b/tools/vgimportclone.c
index 1e6bb2d69..a47782771 100644
--- a/tools/vgimportclone.c
+++ b/tools/vgimportclone.c
@@ -110,9 +110,6 @@ static int _update_vg(struct cmd_context *cmd, struct volume_group *vg,
 	 * Write changes.
 	 */
 
-	if (!archive(vg))
-		goto_bad;
-
 	if (vp->import_vg)
 		vg->status &= ~EXPORTED_VG;
 
diff --git a/tools/vgreduce.c b/tools/vgreduce.c
index 4a4202e86..c759c6643 100644
--- a/tools/vgreduce.c
+++ b/tools/vgreduce.c
@@ -157,9 +157,6 @@ static int _vgreduce_repair_single(struct cmd_context *cmd, const char *vg_name,
 		return ECMD_PROCESSED;
 	}
 
-	if (!archive(vg))
-		return_ECMD_FAILED;
-
 	if (vp->force) {
 		if (!_make_vg_consistent(cmd, vg))
 			return_ECMD_FAILED;
diff --git a/tools/vgrename.c b/tools/vgrename.c
index f442f731f..71b4e1677 100644
--- a/tools/vgrename.c
+++ b/tools/vgrename.c
@@ -103,9 +103,6 @@ static int _vgrename_single(struct cmd_context *cmd, const char *vg_name,
 
 	dev_dir = cmd->dev_dir;
 
-	if (!archive(vg))
-		goto error;
-
 	if (!lockd_rename_vg_before(cmd, vg)) {
 		stack;
 		goto error;




More information about the lvm-devel mailing list