[lvm-devel] master - raid: query lock holder

Zdenek Kabelac zkabelac at fedoraproject.org
Fri Oct 24 14:39:59 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=1c7aae40a1bb1351680ec8c7afa12c2bf8b784a0
Commit:        1c7aae40a1bb1351680ec8c7afa12c2bf8b784a0
Parent:        e901a87a69bf8573e441790ebca2ca9376aaf8a6
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Tue Oct 21 10:53:56 2014 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Fri Oct 24 16:39:31 2014 +0200

raid: query lock holder

Ask for lock the proper LV.
Use the top-most LV to query for locally exclusive lock.

The rest of operations are then using 'lv_info()'

TODO:
  Check all devices are reloaded from proper level.
  In general any query on lv_is_active is supposed to be running
  ona lv_lock_holder() volume.
---
 WHATS_NEW                 |    1 +
 lib/metadata/raid_manip.c |    2 +-
 tools/lvconvert.c         |    2 +-
 3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/WHATS_NEW b/WHATS_NEW
index 8b9cf6f..3b52595 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.112 - 
 =====================================
+  Query lock holding LV when replacing and converting raid volumes.
   Add extra validate for locked lv within validate_lv_cache_create().
   Add internal lvseg_name() function.
   Skip trying to file lock virtual internal vg name.
diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c
index 8219984..5237dc9 100644
--- a/lib/metadata/raid_manip.c
+++ b/lib/metadata/raid_manip.c
@@ -1555,7 +1555,7 @@ int lv_raid_replace(struct logical_volume *lv,
 	if (lv->status & PARTIAL_LV)
 		lv->vg->cmd->partial_activation = 1;
 
-	if (!lv_is_active_exclusive_locally(lv)) {
+	if (!lv_is_active_exclusive_locally(lv_lock_holder(lv))) {
 		log_error("%s/%s must be active %sto perform this operation.",
 			  lv->vg->name, lv->name,
 			  vg_is_clustered(lv->vg) ? "exclusive locally " : "");
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index e976880..fc28846 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -1902,7 +1902,7 @@ static int _lvconvert_raid(struct logical_volume *lv, struct lvconvert_params *l
 		return lv_raid_replace(lv, lp->replace_pvh, lp->pvh);
 
 	if (arg_count(cmd, repair_ARG)) {
-		if (!lv_is_active_exclusive_locally(lv)) {
+		if (!lv_is_active_exclusive_locally(lv_lock_holder(lv))) {
 			log_error("%s/%s must be active %sto perform this"
 				  " operation.", lv->vg->name, lv->name,
 				  vg_is_clustered(lv->vg) ?




More information about the lvm-devel mailing list