[linux-lvm] Extend/Reduce snapshot not updating VG's used PE count.

Stephenson, Dale dstephenson at snapserver.com
Wed May 1 09:49:02 UTC 2002


I've noticed that extending or reducing a snapshot doesn't seem to affect
the used PE count of its volume group (as shown in places like
/proc/lvm/global).  I haven't noticed any particular ill effects, but it is
disconcerting.

The PE count for the PV *is* updated.  Strangely, after reboot (at least
with lvm 1.0.3) the PE count for the PV does not include PEs used by
snapshots.  As soon as a single snapshot is created, removed, extended, or
reduced, it becomes correct again.  Again, I haven't noticed any particular
ill effects.

Following is a patch that solves the first problem (but not the second) for
lvm 1.0.3.  Looking at current CVS, I believe the problem still exists.  The
first portion of the patch adjusts vg's pe_allocated field in
__extend_reduce_snapshot().  The second portion of the patch updates the
snapshot's lv_allocated_snapshot_le field to be correct after a resize in
lvm_do_lv_extend_reduce().  No user space changes are required.

Dale J. Stephenson
steph at snapserver.com

--- linux/drivers/md/lvm.c.orig	Mon Apr 29 08:50:41 2002
+++ linux/drivers/md/lvm.c	Mon Apr 29 12:41:29 2002
@@ -2280,6 +2280,9 @@
 		return -ENOMEM;
 	}
 
+	vg_ptr->pe_allocated -= old_lv->lv_allocated_snapshot_le;
+	vg_ptr->pe_allocated += new_lv->lv_allocated_le;
+
 	return 0;
 }
 
@@ -2409,6 +2412,8 @@
 
 		vfree(old_lv->lv_block_exception);
 		vfree(old_lv->lv_snapshot_hash_table);
+		old_lv->lv_allocated_snapshot_le = 
+			new_lv->lv_allocated_le;
 		old_lv->lv_remap_end = new_lv->lv_remap_end;
 		old_lv->lv_block_exception = new_lv->lv_block_exception;
 		old_lv->lv_snapshot_hash_table =




More information about the linux-lvm mailing list