From 60494fe74bf144588079554549338d4493a84909 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Tue, 5 Jan 2010 15:58:11 +0000 Subject: [PATCH] Resume volumes in reverse order to preserve memlock pairing. If renaming snapshot with virtual origin, the origin is renamed too. But the code must resume LVs in reverse order to properly pair memlock (in cluster locking). (The resume of snapshot resumes origin too and later resume is ignored otherwise.) --- WHATS_NEW | 1 + lib/metadata/lv_manip.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index 1e984273c..8d2588f70 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Resume renamed volumes in reverse order to preserve memlock pairing. Drop metadata cache after device was autorepaired and removed from VG. Remove missing flag in metadata if PV reappeared and is empty. Destroy allocated mempool in _vg_read_orphans() error path. diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c index 7a0171e9c..84ad63904 100644 --- a/lib/metadata/lv_manip.c +++ b/lib/metadata/lv_manip.c @@ -1767,7 +1767,7 @@ int lv_rename(struct cmd_context *cmd, struct logical_volume *lv, struct volume_group *vg = lv->vg; struct lv_names lv_names; DM_LIST_INIT(lvs_changed); - struct lv_list lvl, lvl2; + struct lv_list lvl, lvl2, *lvlp; int r = 0; /* rename is not allowed on sub LVs */ @@ -1822,7 +1822,13 @@ int lv_rename(struct cmd_context *cmd, struct logical_volume *lv, if (!(r = vg_commit(vg))) stack; - resume_lvs(cmd, &lvs_changed); + /* + * FIXME: resume LVs in reverse order to prevent memory + * lock imbalance when resuming virtual snapshot origin + * (resume of snapshot resumes origin too) + */ + dm_list_iterate_back_items(lvlp, &lvs_changed) + resume_lv(cmd, lvlp->lv); out: backup(vg); return r;