[lvm-devel] master - lv_update_and_reload: use proper lock holder

Zdenek Kabelac zkabelac at fedoraproject.org
Wed Sep 24 08:56:43 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=fa6482344c9f2491d29008b00ac1a4089c883aa7
Commit:        fa6482344c9f2491d29008b00ac1a4089c883aa7
Parent:        9776979b02ddd6405e13208a74fedfee0e1cfec3
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Mon Sep 22 13:57:47 2014 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Wed Sep 24 10:48:02 2014 +0200

lv_update_and_reload: use proper lock holder

When requesting to reload an LV imrove this API to
automatically reload its lock holding LV as in cluster
only top-level LVs are addressable with lock.
---
 WHATS_NEW               |    1 +
 lib/metadata/lv_manip.c |   13 +++++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/WHATS_NEW b/WHATS_NEW
index 9869130..dafa16f 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.112 - 
 =====================================
+  Improve lv_update_and_reload() to find out proper lock holding LV.
   Improve search of LV in lv_ondisk().
   Do not scan sysfs in lv_check_not_in_use() when device is closed.
   Backup final metadata after resync of mirror/raid.
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 968b8d0..277662e 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -5701,16 +5701,17 @@ static int _lv_update_and_reload(struct logical_volume *lv, int origin_only)
 {
 	struct volume_group *vg = lv->vg;
 	int do_backup = 0, r = 0;
+	const struct logical_volume *lock_lv = lv_lock_holder(lv);
 
 	log_very_verbose("Updating logical volume %s on disk(s).",
-			 display_lvname(lv));
+			 display_lvname(lock_lv));
 
 	if (!vg_write(vg))
 		return_0;
 
-	if (!(origin_only ? suspend_lv_origin(vg->cmd, lv) : suspend_lv(vg->cmd, lv))) {
+	if (!(origin_only ? suspend_lv_origin(vg->cmd, lock_lv) : suspend_lv(vg->cmd, lock_lv))) {
 		log_error("Failed to lock logical volume %s.",
-			  display_lvname(lv));
+			  display_lvname(lock_lv));
 		vg_revert(vg);
 	} else if (!(r = vg_commit(vg)))
 		stack; /* !vg_commit() has implict vg_revert() */
@@ -5718,11 +5719,11 @@ static int _lv_update_and_reload(struct logical_volume *lv, int origin_only)
 		do_backup = 1;
 
 	log_very_verbose("Updating logical volume %s in kernel.",
-			 display_lvname(lv));
+			 display_lvname(lock_lv));
 
-	if (!(origin_only ? resume_lv_origin(vg->cmd, lv) : resume_lv(vg->cmd, lv))) {
+	if (!(origin_only ? resume_lv_origin(vg->cmd, lock_lv) : resume_lv(vg->cmd, lock_lv))) {
 		log_error("Problem reactivating logical volume %s.",
-			  display_lvname(lv));
+			  display_lvname(lock_lv));
 		r = 0;
 	}
 




More information about the lvm-devel mailing list