Version 2.02.02 - 7th February 2006
===================================
  Add %.so: %.a make template rule.
  Switchover library building to use LIB_SUFFIX.
  Only do lockfs filesystem sync when suspending snapshots.
  Always print warning if activation is disabled.
  vgreduce removes mirror images.
  Add --mirrorsonly to vgreduce.
  vgreduce replaces active LVs with error segment before removing them.
  Set block_on_error parameter if available.
  Add target_version.
  Add details to format1 'Invalid LV in extent map' error message.
  Fix lvscan snapshot full display.
  Bring lvdisplay man page example into line.
  Add mirror dmeventd library.
  Add some activation logic to remove_mirror_images().
  lvconvert can remove specified PVs from a mirror.
  lvconvert turns an existing LV into a mirror.
  Allow signed mirrors arguments.
  Move create_mirror_log() into toollib.
  Determine parallel PVs to avoid with ALLOC_NORMAL allocation.
  Fix lv_empty.

Version 2.02.01 - 23rd November 2005
====================================
  Fix lvdisplay cmdline to accept snapshots.
  Fix open RO->RW promotion.
  Fix missing vg_revert in lvcreate error path.

Version 2.02.00 - 10th November 2005
====================================
  Extend allocation areas to avoid overflow with contiguous with other PVs.
  Stop lvcreate attempting to wipe zero or error segments.
  Added new lvs table attributes.
  Separated out activation preload.
  Moved activation functions into libdevmapper.
  Fixed build_dm_name.
  Add return macros.
  Added xen xvd devices.
  Clear up precommitted metadata better.
  A pvresize implementation.
  Fix contiguous allocation when there are no preceding segments.
  Add mirror_seg pointer to lv_segment struct.
  Only keep a device open if it's known to belong to a locked VG.
  Fix lvdisplay to show all mirror destinations.
  Replacement suspend code using libdevmapper dependency tree.
  Add DEFS to make.tmpl.
  Use dm_is_dm_major instead of local copy.
  Allow mapped devices to be used as PVs.
  Move set_selinux_context into libdevmapper.
  Fix automatic text metadata buffer expansion (using macro).
  Cache formatted text metadata buffer between metadata area writes.
  Add pe_start field to pvs.
  Add 'LVM-' prefix to uuids.
  Split lv_segment_area from lv_segment to permit extension.
  Replacement deactivation code using libdevmapper dependency tree.
  Simplify dev_manager_info().
  Attempt to load missing targets using modprobe.
  Add -a to lvscan.
  Move mknodes into libdevmapper.
  Move bitset, hash, pool and dbg_malloc into libdevmapper.

Version 2.01.15 - 16th October 2005
===================================
  Refuse to run pvcreate/pvremove on devices we can't open exclusively.
  Use ORPHAN lock definition throughout.
  Validate chunksize in lvcreate.
  Reduce chunksize limit to 512k.
  Fix chunksize field in reports.
  Don't hide snapshots from default 'lvs' output.
  Add is_dm_major() for use in duplicate device detection in lvmcache_add().
  Really switch device number in lvmcache when it says it is doing so.
  Option for bitset memory allocation using malloc as well as pool.
  Don't assume exactly two mirrors when parsing mirror status.
  Suppress fsync() error message on filesystems that don't support it.
  Fix yes_no_prompt() error handling.
  Add lvm.conf comment warning against multiple filter lines.
  Tidy lvmconf.sh.
  Add format1 dev_write debug messages.
  Add clustered VG attribute to report.
  Move lvconvert parameters into struct lvconvert_params.
  Add clustered VG flag to LV lock requests.
  Change LV locking macros to take lv instead of lvid.
  Prepend 'cluster' activation parameter to mirror log when appropriate.
  Pass exclusive flag to lv_activate and on to target activation code.
  Prevent snapshot creation in a clustered VG for now.
  Factor out adjusted_mirror_region_size() and generate_log_name_format().
  Move compose_log_line() into mirror directory.
  Factor out _get_library_path().
  Don't kill idling clvmd threads.
  clvmd no longer takes out locks for non-clustered LVs.
  Recognise ATA over Ethernet (aoe) devices.

Version 2.01.14 - 4th August 2005
=================================
  Fix lvconvert PV parameter in help string.
  Prevent snapshots getting activated in a clustered VG.
  Separate out _build_dev_string.
  Move zero_lv to toollib.
  Fix pool format handler to work with pv segment code.

Version 2.01.13 - 13th July 2005
================================
  Fix pvmove segment splitting.
  Abstract vg_validate.
  Only make one attempt at contiguous allocation.
  Fix lvm1 format metadata read.
  Fix lvm1 format non-mirror lvcreate.

Version 2.01.12 - 14th June 2005
================================
  Various allocation-related pvmove fixes.
  Log an error if clvmd can't resolve a host name got from CCS.
  Fix potential spin loop in clvmd.

Version 2.01.11 - 13th June 2005
================================
  Added lvmconf.sh.
  Use matchpathcon mode parameter.
  Don't defer closing dead FDs in clvmd.
  Remove hard-coded 64k text metadata writing restriction.
  Make VG name restrictions consistent.
  Introduce lvconvert.  So far only removes mirror images.
  Allow mirror images to be resized.
  Allow mirror images to have more than one segment.
  Centralise restrictions on LV names.
  Always insert an intermediate layer for mirrors.
  Suppress hidden LVs from reports unless --all is given.
  Use square brackets for hidden LVs in reports.
  Allow the creation of mirrors with contiguous extents.
  Always perform sanity checks against metadata before committing it to disk.
  Split lv_extend into two steps: choosing extents + allocation to LV(s).
  Add mirror log region size to metadata.
  Use list_iterate_items throughout and add list*back macros.
  Introduce seg_ macros to access areas.
  Add segtype_is_ macros.
  Support tiny metadata areas for pool conversions.
  Mirror activation handles disk log as well as core.
  Activation code recognises mirror log dependency.
  Add mirror_log and regionsize fields to report.
  Fix non-orphan pvchange -u.
  Fix vgmerge to handle duplicate LVIDs.
  Move archiver code from tools into library.
  vgscan/change/display/vgs automatically create metadata backups if needed.
  Merge cloned allocation functions.
  Fix contiguous allocation policy with linear.
  Cope with missing format1 PVs again.
  Remove lists of free PV segments.
  Simplify pv_maps code and remove slow bitset algorithm.
  Red-Hat-ify the clvmd rhel4 initscript.
  %Zu->%zu
  Fix loopfiles alias alloc & mem debugging.
  Un-inline dbg_strdup.
  lv_reduce tidying.
  Remove some unnecessary parameters.
  Introduce seg_is macros.

Version 2.01.10 - 3rd May 2005
==============================
  Don't create backup and archive dirs till needed.
  Reinstate full PV size when removing from VG.
  Support loopfiles for testing.
  Tidy lv_segment interface.
  pv_segment support.
  vgchange --physicalextentsize
  Internal snapshot restructuring.
  Remove unused internal non-persistent snapshot option.
  Allow offline extension of snapshot volumes.
  Move from 2-step to 3-step on-disk metadata commit.
  Scan ramdisks too and allow non-O_DIRECT fallback.
  Annotate, tidy and extend list.h.
  Alignment tidying.
  Make clvmd work around some "bugs" in gulm's node state notifications.
  Tidy clvmd's SIGHUP handler

Version 2.01.09 - 4th April 2005
================================
  Add --ignorelockingfailure to vgmknodes.
  clvmd: Don't allow user operations to start until the lvm thread is fully up.
  clvmd-gulm: set KEEPALIVE on sockets.

Version 2.01.08 - 22nd March 2005
=================================
  Add clustered attribute so vgchange can identify clustered VGs w/o locking.
  Improve detection of external changes affecting internal cache.
  Add 'already in device cache' debug message.
  Add -a to pvdisplay -C.
  Avoid rmdir opendir error messsages when dir was already removed.
  Tighten signal handlers.
  Avoid some compiler warnings.
  Additional rename failure error message.
  read/write may be macros.
  clvmd: don't take out lvm thread lock at startup, it only protects jobs list.

Version 2.01.07 - 8th March 2005
================================
  Cope with new devices appearing by rescanning /dev if a uuid can't be found.
  Remove DESTDIR from LVM_SHARED_PATH.
  clvmd fixes: make FDs close-on-exec
               gulm unlocks VG & orphan locks at startup in case they are stale
               gulm now unlocks VG & orphan locks if client dies.

Version 2.01.06 - 1st March 2005
================================
  Suppress 'open failed' error messages during scanning.
  Option to suppress warnings of file descriptors left open.
  Fix default value of metadatacopies in documentation (2->1).
  Fix clvmd-gulm locking.
  ./configure --enable-debug now enables debugging code in clvmd.
  Fix clvmd-gulm node up/down code so it actually works.
  clvmd-gulm now releases locks when shut down.

Version 2.01.05 - 18th February 2005
====================================
  Static binary invokes dynamic binary if appropriate.
  Make clvmd config check a little more tolerant.
  gulm clvmd can now cope with >1 message arriving in a TCP message.

Version 2.01.04 - 9th February 2005
===================================
  Add fixed offset to imported pool minor numbers.
  Update binary pathnames in clvmd_init_rhel4.
  lvm2cmd.so should skip the check for open fds.
  Remove unused -f from pvmove.
  Gulm clvmd doesn't report "connection refused" errors.
  clvmd does a basic config file sanity check at startup.
  Fix potential thread shutdown race in clvmd.

Version 2.01.03 - 1st February 2005
===================================
  More 64-bit display/report fixes.
  More informative startup mesg if can't create /etc/lvm.
  Fix snapshot device size bug (since 2.01.01).
  clvmd announces startup and cluster connection in syslog.
  Gulm clvmd doesn't hang trying to talk to a rebooted node.
  Gulm clvmd doesn't print cman error on startup.

Version 2.01.02 - 21st January 2005
===================================
  Update clvmd_init_rhel4: use lvm.static and don't load dlm.
  Fix some size_t printing.
  Fix 64 bit xlate consts.
  Split out pool sptype_names to avoid unused const.
  Always fail if random id generation fails.
  Recognise gnbd devices.
  Fix clvmd startup bug introduced in cman/gulm amalgamation.
  Improve reporting of node-specific locking errors.

Version 2.01.01 - 19th January 2005
===================================
  Fix clvmd lv_info_by_lvid open_count.
  Store snapshot and origin sizes separately.
  Update vgcreate man page.

Version 2.01.00 - 17th January 2005
===================================
  Fix vgscan metadata auto-correction.
  Only ask libdevmapper for open_count when we need it.
  Adjust RHEL4 clvmd init script priority.
  Enable building of CMAN & GULM versions of clvmd into a single binary

Version 2.00.33 - 7th January 2005
==================================
  pvcreate wipes first 4 sectors unless given --zero n.
  gulm clvmd now uses new ccsd key names.
  gulm clvmd now doesn't ignore the first node in cluster.conf
  Improve clvmd failure message if it's already running.
  Allow user to kill clvmd during initialisation.
  Fix off-by-one error in cluster_locking that could cause read hangs.

Version 2.00.32 - 22nd December 2004
====================================
  Drop static/dl restriction for now.
  Fix an error fprintf.
  Fix vgdisplay -s. Breaks (undocumented) lvs/pvs/vgs -s instead for now.
  Fix device reference counting on re-opens.
  Ignore sysfs symlinks when DT_UNKNOWN.
  Add clvmd init script for RHEL4.
  Skip devices that are too small to be PVs.
  Fix pvchange -x segfault with lvm2-format orphan.
  Cope with empty msdos partition tables.
  Add CONTRIBUTORS file.

Version 2.00.31 - 12th December 2004
====================================
  Reopen RO file descriptors RW if necessary.

Version 2.00.30 - 10th December 2004
====================================
  Additional device-handling debug messages.
  Additional verbosity level -vvvv includes line numbers and backtraces.
  Verbose messages now go to stderr not stdout.
  Close any stray file descriptors before starting.
  Refine partitionable checks for certain device types.
  Allow devices/types to override built-ins.
  Fix lvreduce man page .i->.I
  Fix vgsplit man page title.
  Fix clvmd man makefile.
  Extend dev_open logging.
  Make clvmd_fix_conf.sh UNDOable.

Version 2.00.29 - 27th November 2004
====================================
  xlate compilation fix.

Version 2.00.28 - 27th November 2004
====================================
  Fix partition table & md signature detection.
  Minor configure/makefile tidy.
  Export version.h from tools for clvmd.

Version 2.00.27 - 24th November 2004
====================================
  Trap large memory allocation requests.
  Fix to partition table detection code.
  Improve filter debug mesgs.
  Make clvmd_fix_conf.sh UNDOable

Version 2.00.26 - 23rd November 2004
====================================
  Improve pool debugging stats.
  Detect partition table signature.
  pvcreate wipes md superblocks. (With --uuid or --restorefile it prompts.)
  Separate out md superblock detection code.
  Prevent snapshot origin resizing.
  Improve a vgremove error message.
  Update some man pages.
  Allow y/n with -ae args (exclusive activation).
  Fixes to lvcreate vgname parsing.
  Fix dm_name string size calculation.
  Improve clvmd error reporting during startup.
  Make clvmd cope with large gaps in node numbers IDs.
  Make clvmd initialisation cope better with debugging output.
  Tidy clvmd socket callbacks so all work happens outside main loop.
  clvmd -V now displays lvm version too.
  Add optional gulm build for clvmd

Version 2.00.25 - 29th September 2004
=====================================
  Fix return code from rm_link for vgmknodes.
  Make clvmd LV hash table thread-safe.
  Fix clvmd locking so it will lock out multiple users on the same node.
  Fix clvmd VG locking to it can cope with multiple VG locks.
  Remove spurious trailing dot in lvreduce man page.
  Fix vgremove locking.

Version 2.00.24 - 16th September 2004
=====================================
  Fix pool_empty so it really does empty the memory pool.
  Rename old segtypes files to segtype.
  Some fixes to memory debugging code.
  Exclude internal commands formats & segtypes from install.

Version 2.00.23 - 15th September 2004
=====================================
  Export dm name build & split functions.
  Use O_NOATIME on devices if available.
  Write log message when each segtype/format gets initialised.
  New commands 'segtypes' and 'formats'.
  Suppress pvmove abort message in test mode.
  Improve pvcreate/remove device not found error message.
  Allow pvmove to move data within the same PV.
  Describe how pvmove works on man page.
  Test for incompatible format/segtype combinations in lv_extend.
  Fix lvchange example on man page.

Version 2.00.22 - 3rd September 2004
====================================
  Fix /dev/vgname perms.
  Restructure xlate.h.
  Add clvmd man page.

Version 2.00.21 - 19th August 2004
==================================
  Update cnxman-socket.h from cman.
  Recognise iseries/vd devices.
  Use 'make install_cluster' to install cluster extensions only.
  Cope with DT_UNKNOWN in sysfs.
  Fix extents_moved metadata size comment.
  Remove duplicate line in pvremove help text.
  Support variable mirror region size.
  Support PE ranges in pvmove source PV.
  Fixes to as-yet-unused LV segment splitting code.
  Change alloc_areas to pe_ranges and allow suppression of availability checks.
  Add dev_size column to pvs.
  Add report columns for in-kernel device number.

Version 2.00.20 - 3 July 2004
=============================
  More autoconf fixes.
  Fix device number handling for 2.6 kernels.

Version 2.00.19 - 29 June 2004
==============================
  Reduce severity of setlocale failure message.
  Recognise argv[0] "initrd-lvm" (pld-linux).
  Make -O2 configurable.
  Added --disable-selinux to configure script.
  LD_FLAGS->LDFLAGS & LD_DEPS->LDDEPS in configure script.
  Add init_debug to clvmd.

Version 2.00.18 - 24 June 2004
==============================
  Fix vgchange activation.
  Add cluster support.

Version 2.00.17 - 20 June 2004
==============================
  configure --enable-fsadm to try out fsadm.  fsadm is not tested yet.
  Display all filtered devices, not just PVs, with pvs -a.
  Fix sync_dir() when no / in filename
  vgcfgbackup -f accepts template with %s for VG name.
  Extend hash functions to handle non-null-terminated data.
  Add local activation support.
  Tidy relative paths in makefile includes.
  fsadm support for fsck and resizing - needs testing.
  Add read-only GFS pool support.
  Add lvm2create_initrd script from http://poochiereds.net/svn/lvm2/
  Fix rounding of large diplayed sizes.
  Suppress decimal point when using units of sectors/bytes.
  Additional kernel target checks before pvmove & snapshot creation.
  Add i2o_block.

Version 2.00.16 - 24 May 2004
=============================
  Set area_count within alloc_lv_segment.
  Remove error labels from lvresize.
  Fix a pvs error path.
  xxchange -ae for exclusive activation.
  Don't return non-zero status if there aren't any volume groups.
  Add --alloc argument to tools.
  Rename allocation policies to contiguous, normal, anywhere, inherit.
  nextfree becomes normal; anywhere isn't implemented yet.
  LV inherits allocation policy from VG. Defaults: LV - inherit; VG - normal
  Additional status character added to vgs to indicate allocation policy.
  Add reset_fn to external_locking.
  Ensure presence of virtual targets before attempting activating.
  Attempt to fix resizing of snapshot origins.
  Restructure lvresize, bringing it closer to lvcreate.
  A quick sanity check on vg_disk struct when read in.  More checks needed.
  Only include visible LVs in active/open counts.
  Add virtual segment types, zero and error.  A large sparse device can be
constructed as a writeable snapshot of a large zero segment.
  Add --type to lvcreate/resize.
  Push lv_create & alloc policy up to tool level.
  Fix pvdisplay return code.
  Detect invalid LV names in arg lists.
  Reporting uses line-at-a-time output.
  lvm2 format sets unlimited_vols format flag.
  Internal-only metadata flag support.
  Basic checking for presence of device-mapper targets.
  Separate out polldaemon.
  Revise internal locking semantics.
  Move find_pv_by_name to library.
  Rename move->copy.
  Add devices to segments report.
  Begin separating out segment code. There's a lot of change here.
  Compress any (obsolete) long LVM1 pvids encountered.
  Support for tagged config files.
  Don't abort operations if selinux present but disabled.
  Fix typo in configure which left HAVE_LIBDL unset.

Version 2.00.15 - 19 Apr 2004
=============================
  configure --with-owner= --with-group= to avoid -o and -g args to 'install'

Version 2.00.14 - 16 Apr 2004
=============================
  Use 64-bit file functions by default.

Version 2.00.13 - 16 Apr 2004
=============================
  Set devices/md_component_detection = 1 to ignore devices containing md
  superblocks. [Luca Berra]
  Ignore error setting selinux file context if fs doesn't support it.

Version 2.00.12 - 14 Apr 2004
=============================
  Install a default lvm.conf into /etc/lvm if there isn't one already.
  Allow different installation dir for lvm.static (configure --staticdir=)
  Fix inverted selinux error check.
  Recognise power2 in /proc/devices.
  Fix counting in lvs_in_vg_opened. [It ignored devices open more than once.]

Version 2.00.11 - 8 Apr 2004
============================
  Set fallback_to_lvm1 in lvm.conf (or configure --enable-lvm1_fallback)
  to run lvm1 binaries if running a 2.4 kernel without device-mapper.

Version 2.00.10 - 7 Apr 2004
============================
  More fixes for static build.
  Add basic selinux support.
  Fix sysfs detection.

Version 2.00.09 - 31 Mar 2004
=============================
  Update copyright notices for Red Hat.
  Fix vgmknodes to remove dud /dev/mapper entries. (libdevmapper update reqd).
  Add LVM1-style colon output to vgdisplay.
  lvchange --refresh to reload active LVs.
  Add string display to memory leak dump.
  Add locking flags & memlock option.
  Add list_versions to library.
  Ignore open hidden LVs when checking if deactivation is OK.
  Suppress move percentage when device inactive.
  Add lv_info_by_lvid.
  Various tidy-ups to the build process.
  Rebaseline internal verbose level.
  Add --nolocking option for read operations if locking is failing.
  Add option to compile into a library.
  When compiled without libdevmapper, only print warning message once.
  Fix lvreduce PV extent calculations.
  Fix DESTDIR to work with configure path overrides.
  Always use / as config file separator & rename internal config file variables.
  Add support for tagging PV/VG/LVs and hosts.
  Fix rare bug in recognition of long cmdline argument forms.
  Add basic internationalisation infrastructure.
  Don't recurse symlinked dirs such as /dev/fd on 2.6 kernels.
  Update autoconf files.
  Add sysfs block device filtering for 2.6 kernels.
  Update refs for move to sources.redhat.com.

Friday 14th November 2003
=========================
Some bug fixes & minor enhancements, including:
  Backwards compatibility with LVM1 metadata improved.
  Missing man pages written.
  Tool error codes made more consistent.
  vgmknodes written.
  O_DIRECT can be turned off if it doesn't work in your kernel.
  dumpconfig to display the active configuration file

You need to update libdevmapper before using 'vgmknodes' or 'vgscan --mknodes'.
If your root filesystem is on an LV, you should run one of those two
commands to fix up the special files in /dev in your real root filesystem 
after finishing with your initrd.  Also, remember you can use
'vgchange --ignorelockingfailure' on your initrd if the tool fails because
it can't write a lock file to a read-only filesystem.

Wednesday 30th April 2003
=========================
A pvmove implementation is now available for the new metadata format.

When running a command that allocates space (e.g. lvcreate), you can now
restrict not only which disk(s) may be used but also the Physical Extents 
on those disks.  e.g. lvcreate -L 10 vg1 /dev/hda6:1000-2000:3000-4000


Monday 18th November 2002
========================

The new format of LVM metadata is ready for you to test!
  We expect it to be more efficient and more robust than the original format.
  It's more compact and supports transactional changes and replication.
  Should things go wrong on a system, it's human-readable (and editable).

Please report any problems you find to the mailing list, 
linux-lvm@sistina.com.  The software has NOT yet been thoroughly
tested and so quite possibly there'll still be some bugs in it.
Be aware of the disclaimer in the COPYING file.

While testing, we recommend turning logging on in the configuration file 
to provide us with diagnostic information:
  log {
        file="/tmp/lvm2.log"
	level=7
	activation=1
  }

You should schedule regular backups of your configuration file and
metadata backups and archives (normally kept under /etc/lvm).

Please read docs/example.conf and "man lvm.conf" to find out more about 
the configuration file.

To convert an existing volume group called vg1 to the new format using
the default settings, use "vgconvert -M2 vg1".  See "man vgconvert".

-M (or --metadatatype in its long form) is a new flag to indicate which
format of metadata the command should use for anything it creates.
Currently, the valid types are "lvm1" and "lvm2" and they can be
abbreviated to "1" and "2" respectively.  The default value for this
flag can be changed in the global section in the config file.

Backwards-compatible support for the original LVM1 metadata format is
maintained, but it can be moved into a shared library or removed
completely with configure's --with-lvm1 option.

Under LVM2, the basic unit of metadata is the volume group.  Different
volume groups can use different formats of metadata - vg1 could use
the original LVM1 format while vg2 used the new format - but you can't
mix formats within a volume group.  So to add a PV to an LVM2-format
volume group you must run "pvcreate -M2" on it, followed by "vgextend".

With LVM2-format metadata, lvextend will let you specify striping
parameters.  So an LV could consist of two or more "segments" - the
first segment could have 3 stripes while the second segment has just 2.

LVM2 maintains a backup of the current metadata for each volume group
in /etc/lvm/backup, and puts copies of previous versions in
/etc/lvm/archive.  "vgcfgbackup" and "vgcfgrestore" can be used to
create and restore from these files.  If you fully understand what 
you're doing, metadata can be changed by editing a copy of a current
backup file and using vgcfgrestore to reload it.

Please read the pvcreate man page for more information on the new
format for metadata.

All tools that can change things have a --test flag which can be used
to check the effect  of a set of cmdline args without really making the
changes.


What's not finished?
====================
The internal cache.  If you turn on debugging output you'll see lots of
repeated messages, many of which will eventually get optimised out.

--test sometimes causes a command to fail (e.g. vgconvert --test) even 
though the real command would work: again, fixing this is waiting for 
the work on the cache.

Several of the tools do not yet contain the logic to handle full
recovery: combinations of pvcreate and vgcfgrestore may sometimes be
needed to restore metadata if a tool gets interrupted or crashes or
finds something unexpected.  This applies particularly to tools that
work on more than one volume group at once (e.g. vgsplit).

Display output.  Some metadata information cannot yet be displayed.

Recovery tools to salvage "lost" metadata directly from the disks:
but we hope the new format will mean such tools are hardly ever needed!

