diff options
author | Alasdair Kergon <agk@redhat.com> | 2011-07-05 18:36:37 +0000 |
---|---|---|
committer | Alasdair Kergon <agk@redhat.com> | 2011-07-05 18:36:37 +0000 |
commit | 3a8eb3870eba441187128da40533431f0eb9b39c (patch) | |
tree | 2abad1e64b8c2e41fa55e7dea1f1611d4905e952 /lib/activate | |
parent | f92e31558b9a504eedfec534928c1eff8bc9224d (diff) | |
download | lvm2-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.c | 60 |
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)) |