summaryrefslogtreecommitdiffstats
path: root/lib/activate
diff options
context:
space:
mode:
authorAlasdair Kergon <agk@redhat.com>2011-07-05 18:36:37 +0000
committerAlasdair Kergon <agk@redhat.com>2011-07-05 18:36:37 +0000
commit3a8eb3870eba441187128da40533431f0eb9b39c (patch)
tree2abad1e64b8c2e41fa55e7dea1f1611d4905e952 /lib/activate
parentf92e31558b9a504eedfec534928c1eff8bc9224d (diff)
downloadlvm2-3a8eb3870eba441187128da40533431f0eb9b39c.tar.gz
lvm2-3a8eb3870eba441187128da40533431f0eb9b39c.tar.xz
lvm2-3a8eb3870eba441187128da40533431f0eb9b39c.zip
Always perform preload logic before suspending - not only in the case when we
have precommitted metadata. (Necessary to avoid loading tables while suspend in lvchange --refresh.)
Diffstat (limited to 'lib/activate')
-rw-r--r--lib/activate/activate.c60
1 files changed, 29 insertions, 31 deletions
diff --git a/lib/activate/activate.c b/lib/activate/activate.c
index 86ac31ec..8a4df271 100644
--- a/lib/activate/activate.c
+++ b/lib/activate/activate.c
@@ -1168,49 +1168,47 @@ static int _lv_suspend(struct cmd_context *cmd, const char *lvid_s,
lv_calculate_readahead(lv, NULL);
/*
- * If VG was precommitted, preload devices for the LV.
+ * Preload devices for the LV.
* If the PVMOVE LV is being removed, it's only present in the old
* metadata and not the new, so we must explicitly add the new
* tables for all the changed LVs here, as the relationships
* are not found by walking the new metadata.
*/
- if ((lv_pre->vg->status & PRECOMMITTED)) {
- if (!(lv_pre->status & LOCKED) &&
- (lv->status & LOCKED) &&
- (pvmove_lv = find_pvmove_lv_in_lv(lv))) {
- /* Preload all the LVs above the PVMOVE LV */
- dm_list_iterate_items(sl, &pvmove_lv->segs_using_this_lv) {
- if (!(lvl_pre = find_lv_in_vg(lv_pre->vg, sl->seg->lv->name))) {
- /* FIXME Internal error? */
- log_error("LV %s missing from preload metadata", sl->seg->lv->name);
- goto out;
- }
- if (!_lv_preload(lvl_pre->lv, laopts, &flush_required))
- goto_out;
- }
- /* Now preload the PVMOVE LV itself */
- if (!(lvl_pre = find_lv_in_vg(lv_pre->vg, pvmove_lv->name))) {
+ if (!(lv_pre->status & LOCKED) &&
+ (lv->status & LOCKED) &&
+ (pvmove_lv = find_pvmove_lv_in_lv(lv))) {
+ /* Preload all the LVs above the PVMOVE LV */
+ dm_list_iterate_items(sl, &pvmove_lv->segs_using_this_lv) {
+ if (!(lvl_pre = find_lv_in_vg(lv_pre->vg, sl->seg->lv->name))) {
/* FIXME Internal error? */
- log_error("LV %s missing from preload metadata", pvmove_lv->name);
+ log_error("LV %s missing from preload metadata", sl->seg->lv->name);
goto out;
}
if (!_lv_preload(lvl_pre->lv, laopts, &flush_required))
goto_out;
- } else {
- if (!_lv_preload(lv_pre, laopts, &flush_required))
- /* FIXME Revert preloading */
- goto_out;
+ }
+ /* Now preload the PVMOVE LV itself */
+ if (!(lvl_pre = find_lv_in_vg(lv_pre->vg, pvmove_lv->name))) {
+ /* FIXME Internal error? */
+ log_error("LV %s missing from preload metadata", pvmove_lv->name);
+ goto out;
+ }
+ if (!_lv_preload(lvl_pre->lv, laopts, &flush_required))
+ goto_out;
+ } else {
+ if (!_lv_preload(lv_pre, laopts, &flush_required))
+ /* FIXME Revert preloading */
+ goto_out;
- /*
- * Search for existing LVs that have become detached and preload them.
- */
- detached.lv_pre = lv_pre;
- detached.laopts = laopts;
- detached.flush_required = &flush_required;
+ /*
+ * Search for existing LVs that have become detached and preload them.
+ */
+ detached.lv_pre = lv_pre;
+ detached.laopts = laopts;
+ detached.flush_required = &flush_required;
- if (!for_each_sub_lv(cmd, lv, &_preload_detached_lv, &detached))
- goto_out;
- }
+ if (!for_each_sub_lv(cmd, lv, &_preload_detached_lv, &detached))
+ goto_out;
}
if (!monitor_dev_for_events(cmd, lv, laopts, 0))