[lvm-devel] LVM2/liblvm lvm_vg.c

wysochanski at sourceware.org wysochanski at sourceware.org
Fri Jul 24 15:12:50 UTC 2009


CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	wysochanski at sourceware.org	2009-07-24 15:12:50

Modified files:
	liblvm         : lvm_vg.c 

Log message:
	Update lvm_vg_extend() to obtain VG_ORPHAN.
	
	vg_extend() no longer obtains VG_OPHAN so we must do so in liblvm function.
	We still have the race in liblvm but we will address this problem later.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/liblvm/lvm_vg.c.diff?cvsroot=lvm2&r1=1.8&r2=1.9

--- LVM2/liblvm/lvm_vg.c	2009/07/24 12:48:21	1.8
+++ LVM2/liblvm/lvm_vg.c	2009/07/24 15:12:50	1.9
@@ -40,11 +40,23 @@
 int lvm_vg_extend(vg_t *vg, const char *device)
 {
 	if (vg_read_error(vg))
-		goto_bad;
+		return 0;
 
-	return vg_extend(vg, 1, (char **) &device);
-bad:
-	return 0;
+	if (!lock_vol(vg->cmd, VG_ORPHANS, LCK_VG_WRITE)) {
+		log_error("Can't get lock for orphan PVs");
+		return 0;
+	}
+
+	if (!vg_extend(vg, 1, (char **) &device)) {
+		unlock_vg(vg->cmd, VG_ORPHANS);
+		return 0;
+	}
+	/*
+	 * FIXME: Either commit to disk, or keep holding VG_ORPHANS and
+	 * release in lvm_vg_close().
+	 */
+	unlock_vg(vg->cmd, VG_ORPHANS);
+	return 1;
 }
 
 int lvm_vg_set_extent_size(vg_t *vg, uint32_t new_size)




More information about the lvm-devel mailing list