mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-30 17:18:21 +03:00
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.
This commit is contained in:
parent
df27392c8c
commit
ba3707d953
@ -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)) &&
|
||||
|
@ -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.");
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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 "
|
||||
|
@ -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)))
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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))
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user