[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[linux-lvm] Snapshot resizing bug (LVM1)



I've discovered a problem with using lvreduce/lvextend on LVM. The resized snapshot will have a new exception table and hash table allocated for it. But lvm_hash_link will be called for these in a loop that depends on the lv_remap_ptr counter passed down from userspace -- which will always be zero. The result is that existing COW on the snapshot are ignored, and the contents of the snapshot can magically change to reflect the current state of the source volume. Reboot (or deactivating and reactivating the volume group) should solve the problem, although it may be possible in the meantime to store a new COW exception for a chunk that already has one.

The fix is simple:

--- lvm.c.orig  Tue Feb  4 18:36:58 2003
+++ lvm.c       Tue Feb  4 18:43:26 2003
@@ -2792,7 +2792,7 @@
                old_lv->lv_snapshot_hash_mask =
                    new_lv->lv_snapshot_hash_mask;

-               for (e = 0; e < new_lv->lv_remap_ptr; e++)
+               for (e = 0; e < old_lv->lv_remap_ptr; e++)
                        lvm_hash_link(new_lv->lv_block_exception + e,
                                      new_lv->lv_block_exception[e].
                                      rdev_org,

As a side note, why not revert the main LVM cvs tree back to LVM 1.0.6? 1.1 is dead.

Dale J. Stephenson
dalestephenson mac com




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]