Version 2.02.100 - 13th August 2013
===================================
  Fix inability to remove a VG's cluster flag if it contains a mirror.
  Suppress arg: prefix in log_sys_error macro when arg is empty string.
  Fix bug making lvchange unable to change recovery rate for RAID.
  Prohibit conversion of thin pool to external origin.
  Workaround gcc v4.8 -O2 bug causing failures if config/checks=1 (32bit arch).
  Verify clvmd message validity before processing and log error if incorrect.
  When creating PV on existing LV don't forbid reserved LV names on LVs below.
  Split out device_is_suspended_or_blocking from device_is_usable.
  When converting mirrors, default segtype should be the same unless specified.
  Make "raid1" the default mirror segment type.
  Fix clogd descriptor leak when daemonizing.
  Fix clvmd descriptor leak on restart.
  Add pipe_open/close() to use instead of less efficient/secure popen().
  Fix metadata area offset/size overflow if it's >= 4g and while using lvmetad.
  Inherit and apply any profile attached to a VG if creating new thin pool.
  Add initial support thin pool lvconvert --repair.
  Add --with-thin-repair and --with-thin-dump configure options.
  Add lvm.conf thin_repair/dump_executable and thin_repair_options.
  Require 1.9 thin pool target version for online thin pool metadata resize.
  Ignore previous LV seg with alloc contiguous & cling when num stripes varies.
  Fix segfault if devices/global_filter is not specified correctly.

Version 2.02.99 - 24th July 2013
================================
  Do not zero init 4KB of thin snapshot for non-zeroing thin pool (2.02.94).
  Issue an error msg if lvconvert --type used incorrectly with other options.
  Use LOG_DEBUG/ERR msg severity instead default for lvm2-activation-generator.
  Support ARG_GROUPABLE with merge_synonym (for --raidwritemostly).
  Fix segfault when reporting raid_syncaction for older kernels.
  Add LV report fields: raid_mismatch_count/raid_sync_action/raid_write_behind.
  Add LV reporting fields raid_min_recovery_rate, raid_max_recovery_rate.
  Add sync_percent as alias for copy_percent LV reporting field.
  Add lv_ prefix to modules reporting field.
  Use units B or b (never E) with no decimal places when displaying sizes < 1k.
  Add support for poolmetadataspare LV, that will be used for pool recovery.
  Improve activation order when creating thin pools in non-clustered VG.
  List thin-pool and thin modules for thin volumes.
  Correct thin creation error paths.
  Use local activation for clearing snapshot COW device.
  Add lvm2-activation-net systemd unit to activate LVs on net-attached storage.
  Release memory allocated with _cached_info().
  Add whole log_lv and metadata_lv sub volumes when creating partial tree.
  Properly use snapshot layer for origin which is also thin volume.
  Avoid generating metadata backup when calling update_pool_lv().
  Send thin messages also for active thin pool and inactive thin volume.
  Add activation/auto_set_activation_skip to control activation skip flagging.
  Add 's(k)ip activation' bit to lvs -o lv_attr to indicate skip flag attached.
  Add --ignoreactivationskip to lvcreate/vgchange/lvchange to ignore skip flag.
  Add --setactivationskip to lvcreate/lvchange to set activation skip flag.
  Automatically flag thin snapshots to be skipped during activation.
  Add support for persistent flagging of LVs to be skipped during activation.
  Add --type profilable to lvm dumpconfig to show profilable config settings.
  Add --mergedconfig to lvm dumpconfig for merged --config/--profile/lvm.conf.
  Relase memory and unblock signals in lock_vol error path.
  Define LVM2_* command errors in lvm2cmd.h and use in dmeventd plugins.
  Move errors.h to tools dir.
  Add man page entries for profile configuration and related options.
  Improve error loging when user tries to interrupt commands.
  Rename _swap_lv to _swap_lv_identifiers and move to allow an additional user.
  Rename snapshot segment returning methods from find_*_cow to find_*_snapshot.
  liblvm/python API: Additions: PV create/removal/resize/listing
  liblvm/python API: Additions: LV attr/origin/Thin pool/Thin LV creation
  Add vgs/lvs -o vg_profile/lv_profile to report profiles attached to VG/LV.
  Add default.profile configuration profile and install it on make install.
  Create a new 'conf' subdir for configuration files including profiles.
  Make selected thinp settings customizable by a profile.
  Support changing VG/LV profiles: vgchange/lvchange --profile/--detachprofile.
  Support storing profile name in metadata for both VGs and LVs.
  Add new --profile command line arg to select a configuration profile for use.
  Add config/profile_dir to set working directory to load profiles from.
  Add configure --with-default-profile-subdir to select dir to keep profiles in.
  Add support for configuration profiles.
  Introduce config_source wrapper for identification of configuration sources.
  Avoid creation of multiple archives for one command.
  Use mirror_segtype_default if type not specified for linear->mirror upconvert.
  Fix use of too big chunks of memory when communication with lvmetad.
  Fix vgcfgrestore crash when specified incorrect vg name.
  Refine lvm.conf and man page documentation for autoactivation feature.
  Add support for thin volumes in vgsplit.
  Also filter partitions on mpath components if multipath_component_detection=1.
  Add lvresize support for online thin pool metadata volume resize.
  Add helper functions find_pool_lv() and pool_can_resize_metadata().
  Add detection for thin pool metadata resize kernel support.
  Report lvs volume type 'e' with higher priority.
  Report lvs volume type 'o' also for external origin volumes.
  Report lvs target type 't' only for thin pools and thin volumes.
  Fix test for active snapshot in cluster before resizing it.
  Allow local activation to receive a locally-supplied LV struct.
  Add vg->vg_ondisk / lv_ondisk() holding committed metadata.
  Report backtrace from dump filter error path.
  Do not use persistent filter with lvmetad.
  Composable persistent filter functionality for global filter.
  Override system's global_filter settings for vgimportclone.
  Detect maximum usable size for snapshot for lvresize.
  Creation of snapshot takes at most 100% origin coverage.
  Add cow_max_extents() to calc extents for 100% origin coverage.
  For creation of snapshot require size for at least 3 chunks.
  Fix lvresize --use-policies of VALID but 100% full snapshot.
  Do not accept size parameters bigger then 16EiB.
  Fix release of PV's fid in free_pv_fid().
  Skip monitoring of snapshots that are already bigger then origin.
  Add lv_is_cow_covering_origin() to check if cow covers origin size.
  Use libdm dm_get_status_snapshot() to parse snapshot status.
  Add detection of mounted fs also for vgchange deactivation.
  Replace 'lv_is_active' with more correct/specific variants (e.g. *_locally).
  Refuse to init a snapshot merge in lvconvert if there's no kernel support.
  Fix exported symbols regex for non-GNU busybox sed.
  Accept --yes in all commands so test scripts can be simpler.
  Fix alignment of PV data area if detected alignment less than 1 MB (2.02.74).
  Fix memory resource leak in memlocking error path.
  Fix premature DM version checking which caused useless mapper/control access.
  Add "active" LV reporting field to show activation state.
  Add "monitor" segment reporting field to show dmevent monitoring status.
  Document lvextend --use-policies option in man.
  Fix creation and removal of clustered snapshot.
  Fix clvmd caching of metadata when suspending inactive volumes.
  Find newest timestamp of merged config files.
  Fix assignment order for vg fid for lvm1 and pool format.
  Fix memleak in dmeventd thin plugin in device list obtaining err path.
  Add explicit message about unsupported pvmove for thin/thinpool volumes.
  Fix lvmetad error path in lvmetad_vg_lookup() for null vgname.
  Fix clvmd _cluster_request() return code in memory fail path.
  Add lvcreate/lvchange --[raid]{min|max}recoveryrate for raid LVs.
  Add lvchange --[raid]writemostly/writebehind support for RAID1
  Add lv_change_activate() for common activation code in vg/lvchange.
  Add lvchange --[raid]syncaction for scrubbing of RAID LVs.
  Improve RAID kernel status retrieval to include sync_action/mismatch_cnt.
  Add external origin support for lvcreate.
  Improve lvcreate, lvconvert and lvm man pages.
  Clean up format1 PV write to remove a need for an orphan VG for it to pass.
  Fix vgextend to not allow a PV with 0 MDAs to be used while already in a VG.
  Move update_pool_params() from /tools to /lib for better reuse.
  Give precedence to EMC power2 devices with duplicate PVIDs.
  Add --validate option to lvm dumpconfig to validate current config on demand.
  Add --ignoreadvanced and --ignoreunsupported switch to lvm dumpconfig.
  Add --withcomments and --withversions switch to lvm dumpconfig.
  Add --type {current|default|missing|new} and --atversion to lvm dumpconfig.
  Support automatic config validation and add 'config' section to lvm.conf.
  Add pvs -o pv_ba_start,pv_ba_size to report bootloader area start and size.
  Add --bootloaderareasize to pvcreate and vgconvert to create bootloader area.
  Add PV header extension: extension version, flags and bootloader areas.
  Initial support for lvconvert of thin external origin.
  Add _lv_remove_segs_using_this_lv() for removal of dependent lvs.
  Improve activation code for better support of stacked devices.
  Add _add_layer_target_to_dtree() for adding linear layer into dtree.
  Extend _cached_info() to accept layer string.
  vgimport '--force' now allows import of VGs with missing PVs.
  Fix PV alignment to incorporate alignment offset if the PV has zero MDAs.
  Add global/raid10_segtype_default to lvm.conf.
  Allow removal or replacement of RAID LV components that are error segments.
  Make 'vgreduce --removemissing' able to handle RAID LVs with missing PVs.
  Accept activation/raid_region_size in preference to mirror_region_size config.
  Fix pvs -o pv_free reporting for PVs with zero PE count.
  Fix missing cleanup of flags when the LV is detached from pool.
  Fix check for some forbidden discards conversion of thin pools.
  Add pool_is_active() to check for any pool related active LV.
  Report blank origin_size field if the LV doesn't have an origin instead of 0.
  Do not take a free lv name argument for lvconvert --thinpool option.
  Avoid flushing thin pool when just requesting transaction_id.
  Add internal function lv_layer() to obtain layer name for LV.
  Report partial and in-sync RAID attribute based on kernel status
  Fix blkdeactivate to handle nested mountpoints and mangled mount paths.
  Use LC_ALL to set locale in daemons and fsadm instead of lower priority LANG.
  Avoid crash-inducing race in lvmetad when VG disappears during rename.
  Add log/debug_classes to lvm.conf to control debug log messages.
  Synchronize with udev in pvscan --cache and fix dangling udev_sync cookies.
  Fix autoactivation to not autoactivate VG/LV on each change of the PVs used.
  Limit RAID device replacement to repair only if LV is not in-sync.
  Disallow RAID device replacement or repair on inactive LVs.
  Fix possible race while removing metadata from lvmetad.
  Fix possible deadlock when querying and updating lvmetad at the same time.
  Check lvmcache_info_from_pvid and recall only when needed in _pv_read.
  Check for memory failure of dm_config_write_node() in lvmetad.
  Fix socket leak on error path in lvmetad's handle_connect.
  Check for failing id_read_format() in _pv_populate_lvmcache.
  Fix memleak on error path for lvmetad's pv_found.
  Unlock vg mutex in error path when lvmetad tries to lock_vg.
  Detect key string duplication failure in config_make_nodes_v in libdaemon.
  Detect fid creation failure in _scan_file in format_text.
  Log output also to syslog when abort_on_internal_error is set.
  Add LV snapshot support to liblvm and python-lvm.
  Avoid a global lock in pvs when lvmetad is in use.
  Fix crash in pvscan --cache -aay triggered by non-mda PV.
  Allow lvconvert --stripes/stripesize only with --mirrors/--repair/--thinpool.
  Fix memleak in device_is_usable mirror testing function.
  Do not ignore -f in lvconvert --repair -y -f for mirror and raid volumes.
  Disallow pvmove on RAID LVs until they are addressed properly
  Allow empty activation/{auto_activation|read_only|}_volume_list config option.
  Add lvm.conf option global/thin_disabled_features.
  Add lvconvert support to swap thin pool metadata volume.
  Implement internal function detach_pool_metadata_lv().
  Fix lvm2app to return all property sizes in bytes (not sectors).
  Recognize DM_DISABLE_UDEV environment variable for a complete fallback.
  Do not verify udev operations if --noudevsync command option is used.
  Fix lvm2app and return lvseg discards property as string.
  Allow vgcfgrestore of lvm2 metadata with thin volumes if --force is used.
  Recognise Storage Class Memory (IBM S/390) devices in filter.
  Recognise STEC skd devices in filter.
  Recognise Violin Memory vtms devices in filter.
  Add lvm.conf thin pool allocation settings thin_pool_{chunk_size|discards|zero}.
  Support discards for non-power-of-2 thin pool chunks.
  Automatically restore MISSING PVs with no MDAs.
  When no --stripes argument is given when creating a RAID10 volume, default to 2 stripes.
  Do not allow lvconvert --splitmirrors on RAID10 logical volumes.
  Skip mlocking [vectors] on arm architecture.
  Support allocation of pool metadata with lvconvert command.
  Move common functionality for thin lvcreate and lvconvert to toollib.
  Repair a mirrored log before the mirror itself when both fail.
  Add python-lvm unit test case
  Exit pvscan --cache immediately if cluster locking used or lvmetad not used.
  Don't use lvmetad in lvm2-monitor.service ExecStop to avoid a systemd issue.
  Remove dependency on fedora-storage-init.service in lvm2 systemd units.
  Depend on lvm2-lvmetad.socket in lvm2-monitor.service systemd unit.
  Hardcode use_lvmetad=0 if cluster locking used and issue a warning msg.
  Avoid trying to read a mirror that has a failed device in its mirrored log.
  Relax ignore_suspended_devices to read from mirrors that don't have a device marked failed.
  Change lvs heading Copy% to Cpy%Sync and print RAID4/5/6 sync% there too.
  Fix clvmd support for option -d and properly use its argument.
  Support use of option --yes for lvchange --persistent.
  Fix memory leak on error path for pvcreate with invalid uuid.
  Implement ref-counting for parents in python lib.
  Add lv_is_active_locally and use instead of most local lv_info calls.
  Reduce some log_error messages to log_warn where we don't fail.
  Remove python liblvm object. systemdir can only be changed using env var now.
  
Version 2.02.98 - 15th October 2012
===================================
  Switch from DEBUG() to DEBUGLOG() in lvmetad as -DDEBUG is already used.
  Prohibit not yet supported change of thin-pool to read-only.
  Support creation of read-only thin volumes (lvcreate -p r).
  Using autoextend percent 0 for thin pool fails 'lvextend --use-policies'.
  Introduce blkdeactivate script to deactivate block devs with dependencies.
  Implement devices/global_filter to hide devices from lvmetad.
  Make vgscan --cache an alias for pvscan --cache.
  Clear lvmetad metadata/PV cache before a rescan.
  Fix a segmentation fault upon receiving a corrupt lvmetad response.
  Give inconsistent metadata warnings in pvscan --cache.
  Make lvremove ask before discarding data areas.
  Avoid overlapping locks that could cause a deadlock in lvmetad.
  Fix memory leaks in libdaemon and lvmetad.
  Optimize libdaemon logging for a fast no-output path.
  Only create lvmetad pidfile when running as a daemon (no -f).
  Warn if lvmetad is running but disabled.
  Warn about running lvmetad with use_lvmetad = 0 in example.conf.
  Update lvmetad help output (flags and their meaning).
  Make pvscan --cache read metadata from LVM1 PVs.
  Make libdaemon buffer handling asymptotically more efficient.
  Add lvmdump -l, to collect a state dump from lvmetad.
  Make --sysinit suppress lvmetad connection failure warnings.
  Prohibit usage of lvcreate --thinpool with --mirrors.
  Fix lvm2api origin reporting for thin snapshot volume.
  Add configure --enable-python_bindings for liblvm2app to new python subdir.
  Add implementation of lvm2api function lvm_percent_to_float.
  Allow non power of 2 thin chunk sizes if thin pool driver supports that.
  Allow limited metadata changes when PVs are missing via [vg|lv]change.
  Do not start dmeventd for lvchange --resync when monitoring is off.
  Remove pvscan --cache from lvm2-lvmetad init script.
  Remove ExecStartPost with pvscan --cache from lvm2-lvmetad.service.
  Report invalid percentage for property snap_percent of non-snaphot LVs.
  Disallow conversion of thin LVs to mirrors.
  Fix lvm2api data_percent reporting for thin volumes.
  Do not allow RAID LVs in a clustered volume group.
  Add --discards to lvconvert.
  Add --poolmetadata to lvconvert and support thin meta/data dev stacking.
  Support changes of permissions for thin snapshot volumes.
  Enhance insert_layer_for_lv() with recursive rename for _tdata LVs.
  Skip building dm tree for thin pool when called with origin_only flag.
  Add internal lv_rename_update() to rename LV without updating mda.
  Ensure descriptors 0,1,2 are always available, using /dev/null if necessary.
  Use /proc/self/fd when available for closing opened descriptors efficiently.
  Add missing pkg init with --enable-testing in configure.in (2.02.71).
  Fix inability to create, extend or convert to a large (> 1TiB) RAID LV.
  Split out daemon-io from daemon-shared and always build libdaemonclient.
  Update lvmetad communications to cope with clients using different filters.
  Add (p)artial attribute to lvs.
  Don't try to issue discards to a missing PV to avoid segfault.
  Clear LV_NOSYNCED flag when a RAID1 LV is converted to a linear LV.
  Disallow RAID1 upconvert if the LV was created with --nosync.
  Depend on systemd-udev-settle in units generated by activation generator.
  Fix vgchange -aay not to activate non-matching LVs that follow a matching LV.
  Fix lvchange --resync for RAID LVs which had no effect.
  Restructure mirror resync code.
  Disallow addition of RAID images until the array is in-sync.
  Fix RAID LV creation with '--test' so valid commands do not fail.
  Add lvm_lv_rename() to lvm2api.
  Fix setvbuf code by closing and reopening stream before changing buffer.
  Disable private buffering when using liblvm.
  When private stdin/stdout buffering is not used always use silent mode.
  Add log/silent to lvm.conf equivalent to -qq.
  Suppress non-essential stdout with -qq.
  Switch non-essential log_print messages to log_print_unless_silent.
  Use -q as short form of --quiet.
  Add RAID10 support (--type raid10).
  Reuse _reload_lv() in more lvconvert functions.
  Fix 32-bit device size arithmetic needing 64-bit casting throughout tree.
  Remove numerous unnecessary #includes and the empty util.c.
  Fix dereference of NULL in lvmetad error path logging.
  Fix buffer memory leak in lvmetad logging.
  Add support for lvcreate --discards.
  Correct the discards field in the lvs manpage (2.02.97).
  Use proper condition to check for discards settings unsupported by kernel.
  Reinstate correct default to ignore discards for thin metadata from old tools.
  Issue error message when -i and -m args do not match specified RAID type.
  Change lvmetad logging syntax from -ddd to -l {all|wire|debug}.
  Add new libdaemon logging infrastructure.

Version 2.02.97 - 7th August 2012
=================================
  Improve documention of allocation policies in lvm.8.
  Increase limit for major:minor to 4095:1048575 when using -My option.
  Add make install_systemd_generators.
  Add generator for lvm2 activation systemd units.
  Add lvm_config_find_bool lvm2app fn to retrieve bool value from config tree.
  Respect --test when using lvmetad.
  No longer capitalise first LV attribute char for invalid snapshots.
  Allow vgextend to add PVs to a VG that is missing PVs.
  Recognise Micron PCIe SSDs in filter and move array out to device-types.h.
  Fix dumpconfig <node> to print only <node> without its siblings. (2.02.89)
  Do not issue "Failed to handle a client connection" error if lvmetad killed.
  Support lvchange --discards and -Z with thin pools.
  Add discard LV segment field to reports.
  Add --discards to lvcreate --thin.
  Set discard and external snapshot features if thin pool target is vsn 1.1+.
  Count percentage of completeness upwards not downwards when merging snapshot.
  Skip activation when using vg/lvchange --sysinit -a ay and lvmetad is active.
  Fix extending RAID 4/5/6 logical volumes
  Fix test for PV with unknown VG in process_each_pv to ignore ignored mdas.
  Update man pages with --activate ay option and auto_activation_volume_list.
  Fix _alloc_parallel_area to avoid picking already-full areas for raid devices.
  Use vgchange -aay instead of vgchange -ay in clmvd init script.
  Add activation/auto_activation_volume_list to lvm.conf.
  Add --activate ay to lvcreate, lvchange, pvscan and vgchange.
  Add support for volume autoactivation using lvmetad.
  Add --activate synonym for --available arg and prefer --activate.
  Never issue discards when LV extents are being reconfigured, not deleted.
  Allow release_lv_segment_area to fail as functions it calls can fail.
  Open device read-only instead of read-write when obtaining readahead value.
  Fix lvconvert thin pool error path NULL pointer dereference.
  Detect create_instance() failure in pvscan_lvmetad_single().
  Use 64-bit calculations for reserved memory and stack.
  Fix missing sync of filesystem when creating thin volume snapshot.

Version 2.02.96 - 8th June 2012
===============================
  Upstream source repo now fedorahosted.org git not sources.redhat.com CVS.
  Fix error paths for regex filter initialization.
  Re-enable partial activation of non-thin LVs until it can be fixed. (2.02.90)
  Fix alloc cling to cling to PVs already found with contiguous policy.
  Fix cling policy not to behave like normal policy if no previous LV seg.
  Fix allocation loop not to use later policies when --alloc cling without tags.
  Append _TO_LVSEG to names of internal A_CONTIGUOUS and A_CLING flags.
  Add missing pkg init --with-systemdsystemunitdir in configure.in (2.02.92).
  Fix division by zero if PV with zero PE count is used during vgcfgrestore.
  Add initial support for thin pool lvconvert.
  Fix lvrename for thin volumes (regression in for_each_sub_lv). (2.02.89)
  Fix up-convert when mirror activation is controlled by volume_list and tags.
  Warn of deadlock risk when using snapshots of mirror segment type.
  Fix bug in cmirror that caused incorrect status info to print on some nodes.
  Remove statement that snapshots cannot be tagged from lvm man page.
  Disallow changing cluster attribute of VG while RAID LVs are active.
  Fix lvconvert error message for non-mergeable volumes.
  Allow subset of failed devices to be replaced in RAID LVs.
  Prevent resume from creating error devices that already exist from suspend.
  Improve clmvd singlenode locking for better testing.
  Update and correct lvs man page with supported column names.
  Handle replacement of an active device that goes missing with an error device.
  Change change raid1 segtype always to request a flush when suspending.
  Add udev info and context to lvmdump.
  Add lvmetad man page.
  Fix RAID device replacement code so that it works under snapshot.
  Fix inability to split RAID1 image while specifying a particular PV.
  Update man pages to give them all the same look&feel.
  Fix lvresize of thin pool for striped devices.
  For lvresize round upward when specifying number of extents.
  For lvcreate with %FREE support rounding downward stripe alignment.
  Change message severity to log_very_verbose for missing dev info in udev db.
  Fix lvconvert when specifying removal of a RAID device other than last one.
  Fix ability to handle failures in mirrored log in dmeventd plugin. (2.02.89)
  Fix unlocking volume group in vgreduce in error path.
  Cope when VG name is part of the supplied name in lvconvert --splitmirrors -n.
  Fix exclusive lvchange running from other node. (2.02.89)
  Add 'vgscan --cache' functionality for consistency with 'pvscan --cache'.
  Keep exclusive activation in pvmove if LV is already active.
  Disallow exclusive pvmove if some affected LVs are not exclusively activated.
  Remove unused and wrongly set cluster VG flag from clvmd lock query command.
  Fix pvmove for exclusively activated LV pvmove in clustered VG. (2.02.86)
  Always free hash table on update_pvid_to_vgid() in lvmetad.
  Update and fix monitoring of thin pool devices.
  Check hash insert success in lock_vg in clvmd.
  Check for buffer overwrite in get_cluster_type() in clvmd.
  Fix global/detect_internal_vg_cache_corruption config check.
  Update lcov Makefile target to support all dmeventd plugins.
  Fix initializiation of thin monitoring. (2.02.92)
  Cope with improperly formatted device numbers in /proc/devices. (2.02.91)
  Exit if LISTEN_PID environment variable incorrect in lvmetad systemd handover.
  Use pvscan --cache instead of vgscan in lvmetad scripts.
  Fix fsadm propagation of -e option.
  Fix fsadm parsing of /proc/mounts files (don't check for substrings).
  Fix fsadm usage of arguments with space.
  Fix arg_int_value alongside ARG_GROUPABLE --major/--minor for lvcreate/change.
  Fix name conflicts that prevent down-converting RAID1 when specifying a device
  Improve thin_check option passing and use configured path.
  Add --with-thin-check configure option for path to thin_check.
  Fix error message when pvmove LV activation fails with name already in use.
  Better structure layout for device_info in dev_subsystem_name().
  Change message severity for creation of VG over uninitialised devices.
  Fix error path for failed toolcontext creation.
  Detect lvm binary path in lvmetad udev rules.
  Don't unlink socket on lvmetad shutdown if instantiated from systemd.
  Restart lvmetad automatically from systemd if it exits from uncaught signal.
  Fix warn msg for thin pool chunk size and update man for chunksize. (2.02.89)

Version 2.02.95 - 6th March 2012
================================
  If unspecified, adjust thin pool metadata and chunk size to fit into 128MB.
  Print just warning on thin pool check callback path for failing check.
  Always use 64bit arithmetic with VG extent_size expression.
  Validate udev structures in _insert_udev_dir().
  Take repeatable --major --minor with pvscan --cache instead of major:minor.
  Scan all devices for lvmetad if 'pvscan --cache' used without device list.
  Populate lvmcache from lvmetad before displaying PVs in pvscan. (2.02.94)
  Suppress incorrect -n pvscan warning now always displayed. (2.02.94)

Version 2.02.94 - 3rd March 2012
================================
  Add support to execute thin_check with each de/active of thin pool.
  Fix automatic estimation of metadata device size for thin pool.
  Test for alloc fail from _alloc_pv_segment() in _extend_pv().
  Check for alloc fail from get_segtype_from_string() in _lvcreate_params().
  Add _rimage as reserved suffix to lvm.8 man page.
  Improve error logging from mpath filter.
  Check for allocation failure in hold_lock() in clvmd.
  Use set_lv() (wipe initial 4KiB) for non zeroed thin volume.
  Allow cluster mirrors to handle the absence of the checkpoint lib (libSaCkpt).
  Revert free of allocated segtype in init segment error path (2.02.89).
  Test dm_hash_insert() failures in filter-persistent.c and fid_add_mda().
  Ensure clvmd message is always NUL-terminated after read.
  Add some close() and dev_close() error path backtraces.
  Set stdin/stdout/stderr to /dev/null for polldaemon.
  Limit the max size of processed clvmd message to ~8KB.
  Do not send uninitialised bytes in cluster error reply messages.
  Use unsigned type for bitmask instead of enum type for lvm properties.
  Add missing cleanup of excl_uuid hash on some exit paths of clvmd.
  Check for existence of vg_name in _format1/_pool_vg_read().
  Fix missing break in _format_pvsegs (2.02.92).
  Test seg pointer for non-null it in raid_target_percent error path.
  Check for errors in _init_tags() during config loading.
  Always check result of _set_vg_name() in lvcreate.
  Drop unused call to uname() during clvmd initialization.
  Test allocation result in sysfs filter creation.
  Limit sscanf parameters with buffer size in clvmd get_initial_state().
  Use const lv pointer for lv_is_active...() functions. 
  Use same signed numbers in _mirrored_transient_status().
  Support 'pvscan --cache' to update lvmetad state from specific PVs.
  Provide new metadata daemon for testing with configure --enable-lvmetad .
  Integrate client-side lvmetad into build.

Version 2.02.93 - 23rd February 2012
====================================
  Require number of stripes to be greater than parity devices in higher RAID.
  Fix allocation code to allow replacement of single RAID 4/5/6 device.
  Check all tags and LV names are in a valid form in vg_validate.
  Add tmpfiles.d style configuration for lvm2 lock and run directory.
  Add configure --with-tmpfilesdir for dir holding volatile-file configuration.
  Allow 'lvconvert --repair' to operate on RAID 4/5/6.
  Fix build_parallel_areas_from_lv to account correctly for raid parity devices.
  Print message when faulty raid devices have been replaced.

Version 2.02.92 - 20th February 2012
====================================
  Read dmeventd monitoring config settings for every lvm command.
  For thin devices, initialize monitoring only for thin pools not thin volumes.
  Make conversion from a synced 'mirror' to 'raid1' not cause a full resync.
  Properly test buffer for unit check in units_to_bytes().
  Add configure --with-systemdsystemunitdir.
  Add check for allocation failure in _build_matcher().
  Add check for rimage name allocation failure in _raid_add_images().
  Add check for mda_copy failure in _text_pv_setup().
  Add check for _mirrored_init_target failure.
  Add free_orphan_vg.
  Skip pv/vg_set_fid processing if the fid is same.
  Check for foreach loop errors in _vg_read_orphans() (2.02.91).
  Clean error paths for format instance creation (2.02.91).
  Release vg in error path of _format1_vg_read() instead of just free().
  Report allocation failure for allocation of PV structure.
  Add clvmd init dependency on dlm service when running with new corosync.

Version 2.02.91 - 12th February 2012
====================================
  Remove PV-based format instances (which are no longer needed).
  Link all orphan PVs directly to a per-format global orphan VG.
  Refactor lvmcache around an internal API.
  Stop processing lvextend if trying to extend a mirror that is being recovered.
  Add pool_below_threshold() function to check thin pool percent status.
  Fix test for snap percent for failing merge when removing LV.
  Switch int to void return for str_list_del().
  Fix error path handling in _build_desc().
  Add range test for device number in _scan_proc_dev().
  Use signed long for sysconf() call in cmirrord.
  Do not write in front of log buffer in print_log().
  Add boundary test for number of mirror devs and logs.
  Check that whole locking_dir fits _lock_dir buffer in init_file_locking().
  Use list functions for label_exit().
  Ensure strncpy() function always ends with '\0'.
  Set status in _fsadm_cmd() for error path.
  Add missing deps for lvm2api for rebuild when lvm-internal is changed.
  Fix resource leaks for failing allocation of formats (lvm1/2,pool).
  Release allocated resources in error path for composite_filter_create().
  Do not use lstat() results when failed in _rm_link().
  Remove a "waiting for another thread" log message from dmeventd plugins.

Version 2.02.90 - 1st February 2012
===================================
  sync_local_dev_names before (re)activating mirror log for initialisation.
  Disable partial activation for thin LVs and LVs with all missing segments.
  Do not print warning for pv_min_size between 512KB and 2MB.
  Clean up systemd unit ordering and requirements.
  Fix lcov reports when srcdir != builddir.
  Allow ALLOC_NORMAL to track reserved extents for log and data on same PV.
  Automatically detect whether corosync clvmd needs to use confdb or cmap.
  Fix data% report for thin volume used as origin for non-thin snapshot.

Version 2.02.89 - 26th January 2012
===================================
  Add missing check for uname result in clvmd TEST processing.
  Fix memleak in target_version() error path (unsupported LIST_VERSIONS).
  Limit data_alignment and data_alignment_offset to 32bit values.
  Check for correctness of uint64 dev_size value in format_text.
  Thin pools have segment fields thin_count, zero, transaction_id.
  Add data_percent and metadata_percent for thin pools to lvs -v.
  Add data_lv & metadata_lv fields to lvs for thin pools.
  Add data_percent & pool_lv fields to lvs for thin volumes.
  Rename origin_only parm to use_layer for lv_info and use with thin LVs.
  Add lv_thin_pool_transaction_id to read the transaction_id value.
  Use {suspend,resume}_origin_only when up-converting RAID, as mirrors do.
  Always add RAID metadata LVs to deptree (even when origin_only is set).
  Change exclusive LV activation logic to try local node before remote nodes.
  Add CLVMD_FLAG_REMOTE to skip processing on local node.
  Prompt if request is made to remove a snapshot whose "Merge failed".
  Allow removal of an invalid snapshot that was to be merged on next activation.
  Don't allow a user to merge an invalid snapshot.
  Use m and M lv_attr to indicate that a snapshot merge failed in lvs.
  Differentiate between snapshot status of "Invalid" and "Merge failed".
  Report snapshot usage percent of origin volume when a snapshot is merging.
  Require global/lvdisplay_shows_full_device_path for (bogus) lvm1-style paths.
  Do not report linear segtype for non-striped targets.
  Record creation host & time for each LV and report as lv_time & lv_host.
  Make error message hit when preallocated memlock memory exceeded clearer.
  Use R lv_attr to indicate read-only activation of non-read-only device in lvs.
  Show read-only activation override in lvdisplay & add 4 to perms in -c.
  Add activation/read_only_volume_list to override LV permission in metadata.
  Give priority to emcpower devices with duplicate PVIDs.
  Add check for error in _adjust_policy_params() (lvextend --use-policies).
  Round specified percentages upwards (%LV, %VG...) when resizing LVs.
  Use dmeventd_lvm2_command in dmeventd plugins snapshot, raid, mirror.
  Add helper dmeventd_lvm2_command() to libdevmapper-event-lvm2 library.
  Update documentation for dmeventd.
  Remove unnecessary stat before opening device in dev_open_flags.
  Reduce number of lstat calls when selecting device alias.
  Add _dev_init to initialize common struct device members.
  Always zalloc struct device during initialization.
  Fix missing thread list manipulation protection in dmeventd.
  Do not derefence lv pointer in _percent_run() function before NULL check.
  Allow empty strings for description and creation_host config fields.
  Issue deprecation warning when removing last lvm1-format snapshot.
  Reinstate support for snapshot removal with lvm1 format. (2.02.86)
  Add policy-based automated repair of RAID logical volumes.
  Don't allow two images to be split and tracked from a RAID LV at one time.
  Don't allow size change of RAID LV that is tracking changes for a split image.
  Don't allow size change of RAID sub-LVs independently.
  Don't allow name change of RAID LV that is tracking changes for a split image.
  Do not allow users to change the name of RAID sub-LVs independently.
  Do not allow users to change permissions on RAID sub-LVs.
  Allow lvconvert to replace specified devices in a RAID array.
  Add activation/use_linear_target enabled by default.
  Use gcc warning options only with .c to .o compilation.
  Move y/n prompts to stderr and repeat if response has both 'n' and 'y'.
  Replace the unit testing framework with CUnit (--enable-testing).
  Fix dmeventd snapshot monitoring when multiple extensions were involved.
  Don't ignore configure --mandir and --infodir.
  Drop pool memory allocated within lv_has_target_type().
  Reduce stack allocation of some PATH_MAX sized char buffers.
  Unlock memory before writing metadata.
  Add query before removing snapshots when inactive snapshot origin is removed.
  Allow changing availability state of snapshots.
  Skip non-virtual snapshots for availability change for lvchange with vg name.
  Skip adjusting mirror region size unless mirror or raid.
  Reorder prompt conditions for removal of active volumes.
  Avoid 'mda inconsistency' by properly registering UNLABELLED_PV flag.(2.02.86)
  Fix --enable-static_link unless using --enable-dmeventd / --enable-udev_sync.
  Move gentoo MAKEDEV to /sbin in lvm2create_initrd.
  Add filter to avoid scan of device if it is part of active multipath.
  Add missing default $LVM_VG_NAME usage for snapshots.
  Avoid extent_count overflow with lvextend.
  Add missing lvrename mirrored log recursion in for_each_sub_lv.
  Improve lv_extend stack reporting.
  Increase virtual segment size instead of creating multiple segment list.
  Add last_seg(lv) internal function.
  Support empty string for log/prefix.
  Disallow mirrored logs for cluster mirrors. (2.02.72)
  Don't print char type[8] as a plain string in pvck PV type.
  Use vg memory pool implicitly for vg read.
  Always use vg memory pool for allocated lv segment.
  Remove extra 4kB buffer allocated on stack in print_log().
  Make move_lv_segment non-static function and use dm_list function.
  Pass exclusive LV locks to all nodes in the cluster.
  Improve lvcreate chunksize man page description.
  Improve man page style for lvcreate & lvs.
  Avoid recursive calls to dmeventd in its LVM plugins.
  Log dev name now returned to kernel for registering during cmirror CTR.
  Fix lv_info open_count test for disabled verify_udev_operations. (2.02.86)
  Simplify code for lvm worker thread in clvmd.                     
  Use pthread_barrier to synchronize clvmd threads at startup.
  Limit clvmd's thread size to 128KiB and ignore activation/reserved_stack.
  Reduce default preallocated stack size to 64KiB.
  Add check for access through NULL pointer when refresh_filter() fails.
  Use pthread condition for SINGLENODE lock implementation.
  Improve backtrace reporting for some dev_manager_ functions.
  Change message severity to log_warn when symlink creation fails.
  Add ability to convert mirror segtype to RAID1 segtype.
  Add ability to convert from linear to RAID1.
  Add ability to extend mirrors with '--nosync' option.
  Fix splitmirror LV names to maintain consistent state in a cluster.
  Apply appropriate udev flags when suspending/resuming mirror sub-LVs.
  Fix vgsplit to handle mirrored logs.
  Clarify multi-name device filter pattern matching explanation in lvm.conf.
  Introduce revert_lv for better pvmove cleanup.
  Replace incomplete pvmove activation failure recovery code with a message.
  Abort if _finish_pvmove suspend_lvs fails instead of cleaning up incompletely.
  Change suspend_lvs to call vg_revert internally.
  Change vg_revert to void and remove superfluous calls after failed vg_commit.
  Use execvp for CLVMD restart to preserve environment settings.
  Restart CLVMD with same cluster manager.
  Fix log_error() usage in raid and unknown segtype initialisation.
  Improve testing Makefile.
  Fix install_ocf make target when srcdir != builddir. (2.02.80)
  Support env vars LVM_CLVMD_BINARY and LVM_BINARY in clvmd.
  Fix restart of clvmd (preserve exlusive locks). (2.02.64)
  Add 'Volume Type' lv_attr characters for RAID and RAID_IMAGE.
  Add activation/retry_deactivation to lvm.conf to retry deactivation of an LV.
  Replace open_count check with holders/mounted_fs check on lvremove path.
  Disallow the creation of mirrors (mirror or raid1 segtype) with only one leg.
  Cleanup restart clvmd code (no memory allocation, debug print passed args).
  Add all exclusive locks to clvmd restart option args.
  Always send the whole clvmd packet header in refresh commands.
  Add missing error checks for some system calls in cmirrord.
  Add missing log_error() to lvresize command when fsadm tool fails.
  Add support for DM_DEV_DIR device path into fsadm script.
  Support different PATH setting for fsadm script testing.
  Surround all executed commands with quotes in fsadm script.
  Fix missing '$' in test for content of "$LVM" in fsadm script.
  Move debug message in exec_cmd after sync_local_dev_names.
  Fix clvmd processing of invalid request on local socket.
  Fix command line option decoding.
  Reset LV status when unlinking LV from VG.
  Fix overly-strict extent-count divisibility requirements for striped mirrors.
  Fix rounding direction in lvresize when reducing volume size.
  Fix possible overflow of size if %FREE or %VG is used.
  Fix vgchange activation of snapshot with virtual origin.
  Activate virtual snapshot origin exclusively (only on local node in cluster).
  Fix lv_mirror_count to handle mirrored stripes properly.
  Fix failure to down-convert a mirror to linear due to udev "dev open" conflict
  Fix mirrored log creation when PE size is small: use log_size >= region_size.
  Fix log size calculation when only a log is being added to a mirror.
  Add 7th lv_attr char to show the related kernel target.
  Terminate pv_attr field correctly. (2.02.86)
  Fix 'not not' typo in pvcreate man page.
  Improve man page style for fsadm, lvreduce, lvremove, lvrename & lvresize.
  Support break for vgchange and vgrefresh operation.
  Switch int to unsigned type for pvmetadatacopies for pv_create().
  Replace :space: with [\t ] for awk in vgimportclone (not widely supported).
  Begin using 64-bit status field flags.
  Detect sscanf recovering_region input error in cmirrord pull_state().
  Fix error path bitmap leak in cmirrord import_checkpoint().
  Log unlink() error in cmirrord remove_lockfile().
  Remove incorrect requirement for -j or -m from lvchange error message.
  Fix unsafe table load when splitting off smaller mirror from a larger one.
  Use size_t return type for text_vg_export_raw() and export_vg_to_buffer().
  Add configure --enable-lvmetad for building the (experimental) LVMetaD.
  Fix resource leak when strdup fails in _get_device_status() (2.02.85).
  Directly allocate buffer memory in a pvck scan instead of using a mempool.
  Add configure --with-thin for segtypes "thin" and "thin_pool".
  Fix raid shared lib segtype registration (2.02.87).

Version 2.02.88 - 19th August 2011
==================================
  Remove incorrect 'Breaking' error message from allocation code. (2.02.87)
  Add lvconvert --merge support for raid1 devices split with --trackchanges.
  Support lvconvert of -m1 raid1 devices to a higher number.
  Add --trackchanges support to lvconvert --splitmirrors option for raid1.
  Support splitting off a single raid1 rimage in lvconvert --splitmirrors.
  Use sync_local_dev_names when reducing number of raid rimages in lvconvert.
  Add -V as short form of --virtualsize in lvcreate.
  Fix make clean not to remove Makefile.  (2.02.87)

Version 2.02.87 - 12th August 2011
==================================
  Fix make distclean to remove stray dmeventd and exported symbols files.
  Add global/detect_internal_vg_cache_corruption to lvm.conf.
  Use memory pool locking to check for corruption of internal VG structs.
  Cache and share generated VG structs.
  Fix possible format instance memory leaks and premature releases in _vg_read.
  Suppress locking error messages in monitoring init scripts.
  If pipe in clvmd fails return busy instead of using uninitialised descriptors.
  Add ability to reduce the number of mirrors in raid1 arrays to lvconvert.
  Add dmeventd plugin for raid.
  Replace free_vg with release_vg and move it to vg.c.
  Remove INCONSISTENT_VG flag from the code.
  Remove lock from cache in _lock_vol even if unlock fails.
  Initialise clvmd locks before lvm context to avoid open descriptor leaks.
  Remove obsolete gulm clvmd cluster locking support.
  Suppress low-level locking errors and warnings while using --sysinit.
  Remove unused inconsistent_seqno variable in _vg_read().
  Remove meaningless const type qualifiers on cast type.
  Add test for fcntl error in singlenode client code.
  Remove --force option from lvrename manpage.
  Add global/mirror_segtype_default to pick md raid or dm mirror as default.
  Add configure --with-raid for new segtype 'raid' for MD RAID 1/4/5/6 support.
  Change DEFAULT_UDEV_SYNC to 1 so udev_sync is used if there is no config file.
  Add systemd unit file to provide lvm2 monitoring.
  Compare file size (as well as timestamp) to detect changed config file.

Version 2.02.86 - 8th July 2011
===============================
  Remove unnecessary warning in pvcreate for MD linear devices.
  Move snapshot removal activation logic into lib/activate.
  Cope with a PV only discovered missing when creating deptree.
  Abort operation if dm_tree_node_add_target_area fails.
  Add activation/checks to lvm.conf to perform additional ioctl validation.
  Always preload on suspend, even if no metadata changed (lvchange --refresh).
  When suspending, automatically preload newly-visible existing LVs.
  Teardown any stray devices with $COMMON_PREFIX during test runs.
  Reinstate correct permissions when creating mirrors. [2.02.85]
  Append 'm' attribute to pv_attr for missing PVs.
  Annotate CLVMD_CMD_SYNC_NAMES in decode_cmd.
  Remove enforcement of udev verification when using non-standard /dev location.
  Keep an exclusive mirror non-clustered if reloaded e.g. during conversion.
  Reject allocation if number of extents is not divisible by area count.
  Fix cluster mirror creation to work with new mirror allocation algorithm.
  Ignore activation/verify_udev_operations if dm kernel driver vsn < 4.18.
  Add activation/verify_udev_operations to lvm.conf, disabled by default.
  Call vg_mark_partial_lvs() before VG structure is returned from the cache.
  Remove unused internal flag ACTIVATE_EXCL from the code.
  Remove useless test of ACTIVATE_EXCL in lv_add_mirrors() clustered code path.
  Add lv_activate_opts structure for activation (replacing activation flags).
  Ignore inconsistent pre-commit metadata on MISSING_PV devs while activating.
  Add proper udev library context initialization and finalization to liblvm.
  Fix last snapshot removal to avoid table reload while a device is suspended.
  Use dm_get_suspended_counter in replacement critical_section logic.
  Downgrade critical_section errors to debug level until it is moved to libdm.
  Fix ignored background polling default in vgchange -ay.
  Fix pvmove activation sequences to avoid trapped I/O with multiple LVs.
  Annotate critical section debug messages.
  Fix reduction of mirrors with striped segments to always align to stripe size.
  Validate mirror segments size.
  Include lvmetad development code in tree.
  Fix extent rounding for striped volumes never to reduce more than requested.
  Fix create_temp_name to replace any '/' found in the hostname with '?'.
  Always use append to file in lvmdump. selinux policy may ban file truncation.
  Propagate test mode to clvmd to skip activation and changes to held locks.
  Defer writing PV labels until vg_write.
  Store label_sector only in struct physical_volume.
  Permit --available with lvcreate so non-snapshot LVs need not be activated.
  Report sector containing label in verbose message.
  Clarify error message when unable to convert an LV into a snapshot of an LV.
  Add and use dev_open_readonly and variations.
  Do not log a superfluous stack message when the lv is properly processed.
  Do not issue an error message when unable to remove .cache on read-only fs.
  Avoid memlock size mismatch by preallocating stdio line buffers.
  Rewrite vgreduce --removemissing --force to share lvconvert code.
  Reorganize lvconvert --repair code to allow reuse.

Version 2.02.85 - 29th April 2011
=================================
  Add new obtain_device_list_from_udev setting to lvm.conf.
  Obtain device list from udev by default if LVM2 is compiled with udev support.
  Add test for vgimportclone and querying of vgnames with duplicate pvs.
  Avoid use of released memory when duplicate PV is found.
  Add "devices/issue_discards" to lvm.conf.
  Issue discards on lvremove and lvreduce etc. if enabled and supported.
  Add seg_pe_ranges and devices fields to liblvm.
  Fix incorrect tests for dm_snprintf() failure.
  Fix some unmatching sign comparation gcc warnings in the code.
  Support lv_extend() on empty LVs.
  Avoid regenerating cache content when exported VG buffer is unchanged.
  Extend the set of memory regions that are not locked to memory.
  Workaround some problems when compiled for valgrind memcheck.
  Support controlled quit of the lvm_thread_fn function in clvmd.
  Fix reading of unallocated memory in lvm1 format import function.
  Replace several strncmp() calls with id_equal().
  Fix lvmcache_info transfer to orphan_vginfo in _lvmcache_update_vgname().
  Fix -Wold-style-definition gcc warnings.
  Rename MIRROR_NOTSYNCED to LV_NOTSYNCED.
  Fix _move_lv_segments to handle empty LVs.
  Fixes for lvconvert (including --repair) of temporary mirror stacks.
  Avoid potential loop when removing mirror images.
  Fix mirror removal always to take account of preferences as to which.
  Fix MIRRORED flag usage.
  Remove error messages issued by device_is_usable when run as non-root.
  Add missing \0 for grown debug object in _bitset_with_random_bits().
  Fix allocation of system_id buffer in volume_group structure.
  Fix readlink usage inside get_primary_dev().
  Use format instance mempool where possible and adequate.
  Call destroy_instance for any PVs found in VG structure during vg_free call.
  Add new free_pv_fid fn and use it throughout to free all attached fids.
  Use only vg_set_fid and new pv_set_fid fn to assign the format instance.
  Make create_text_context fn static and move it inside create_instance fn.
  Add mem and ref_count fields to struct format_instance for own mempool use.
  Use new alloc_fid fn for common format instance initialisation.
  Optimise _get_token() and _eat_space().
  Add _lv_postorder_vg() to improve efficiency for all LVs in VG.
  Add gdbinit script for debugging.
  Use hash tables to speedup string search in vg_validate().
  Refactor allocation of VG structure adding alloc_vg().
  Avoid possible endless loop in _free_vginfo when 4 or more VGs have same name.
  Use empty string instead of /dev// for LV path when there's no VG.
  Don't allocate unused VG mempool in _pvsegs_sub_single.
  Do not send uninitialised bytes in local clvmd messages.
  Support --help option for clvmd and return error for unknown option.
  Avoid reading freed memory when printing LV segment type.
  Fix syslog initialisation in clvmd to respect lvm.conf setting.
  Fix possible overflow in maximum stripe size and physical extent size.
  Improve pvremove error message when PV belongs to a VG.
  Extend normal policy to allow mirror logs on same PVs as images if necessary.
  Improve cling policy to recognise PVs already used during the transaction.
  Improve normal allocation algorithm to include clinging to existing areas.
  Add allocation/maximise_cling & mirror_logs_require_separate_pvs to lvm.conf.
  Adapt metadata balancing code to work with metadata handling changes.
  Add old_id field to physical_volume and fix pvchange -u for recent changes.
  Allow pvresize on a PV with two metadata areas.
  Change pvcreate to use new metadata handling interface.
  Restructure existing pv_setup and pv_write and add pv_initialise.
  Add internal interface to support adding and removing metadata areas.
  Allow internal indexing of metadata areas (PV id + mda order).
  Generalise internal format_instance infrastrusture for PV and VG use.
  Handle decimal digits with --units instead of ignoring them silently.
  Fix remaining warnings and compile with -Wpointer-arith.
  Fix gcc warnings for unused variables and const casts.
  Add stack backtraces for error paths in process_each_lv().
  Temporarily suppress error from calling yes_no_prompt while locks are held.
  Replace void* with char* arithmetic in _text_write, _text_read & send_message.
  Fix compilation without DEVMAPPER_SUPPORT.
  Remove fs_unlock() from lv_suspend error path.
  Allow memory to stay locked between leaving and re-entering critical sections.
  Rename memlock to critical_section throughout.
  Make pv_min_size configurable and increase to 2048KB to exclude floppy drives.
  Add find_config_tree_int64 to read 64-bit ints from config.
  Ensure resuming exclusive cluster mirror continues to use local mirror target.
  Clear temporary postorder LV status flags to allow re-use with same LV struct.
  Remove invalid snapshot umount mesg which floods syslog from dmeventd plugin.
  Add extended examples to pvmove man page.
  Support LVM_TEST_DEVDIR env var for private /dev during testing.

Version 2.02.84 - 9th February 2011
===================================
  Fix CRC32 calculation on big endian CPU (2.02.75).

Version 2.02.83 - 4th February 2011
===================================
  Allow exclusive activation of snapshots in a cluster.
  Leave EX lock unchanged when suspending a device in clvmd.
  Use sync_dev_names in unlock_vg macro for cluster-wide dev name sync.
  Fix fs operation stack handling when multiple operations on same device.
  Increase hash table size to 1024 lv names and 64 pv uuids.
  Remove fs_unlock() from lv_resume path.
  Fix wipe size when setting up mda.
  Remove unneeded checks for open_count in lv_info().
  Synchronize with udev before checking open_count in lv_info().
  Allow CLVMD_CMD_SYNC_NAMES to be propagated around the cluster if requested.
  Add "dmsetup ls --tree" output to lvmdump.
  Fix udev synchronization with no-locking --sysinit (2.02.80).
  Improve man page style consistency for pvcreate, pvremove, pvresize, pvscan.
  Avoid rebuilding of uuid validation table.
  Improve lvcreate error text from insufficient "extents" to "free space".
  Always use O_DIRECT when opening block devices to check for partitioning.

Version 2.02.82 - 24th January 2011
===================================
  Bring lvscan man page up-to-date.
  Fix lvchange --test to exit cleanly.
  Add change_tag to toollib.
  Allow multiple pvchange command line options to be specified together.
  Do not fail pvmove polling if another process cleaned up first.
  Avoid clvmd incrementing dlm lockspace reference count more than once.
  Add -f (don't fork) option to clvmd and fix clvmd -d<num> description.

Version 2.02.81 - 17th January 2011
===================================
  Do not scan devices in dev_reset_error_count().
  Skip unnecessary LOCK_NULL unlock call during volume deactivation.
  Skip fs_unlock when calling exec_cmd within activation code (for modprobe).
  Extend exec_cmd params to specify when device sync (fs_unlock) is needed.
  Replace fs_unlock by sync_local_dev_names to notify local clvmd. (2.02.80)
  Introduce sync_local_dev_names and CLVMD_CMD_SYNC_NAMES to issue fs_unlock.
  Accept fusion fio in device type filter.
  Add ability to convert mirror log type from disk to mirrored.

Version 2.02.80 - 10th January 2011
===================================
  Use same dm cookie for consecutive dm ops in same VG to reduce udev waits.
  Speed up command processing by caching resolved config tree.
  Pass config_tree to renamed function import_vg_from_config_tree().
  Detect NULL handle in get_property().
  Fix superfluous /usr in ocf_scriptdir instalation path.
  Add --with-ocfdir configurable option.
  Add aclocal.m4 (for pkgconfig).
  Fix memory leak in persistent filter creation error path.
  Check for errors setting up dm_task struct in _setup_task().
  Fail polldaemon creation when lvmcache_init() fails.
  Return PERCENT_INVALID for errors in _copy_percent() and _snap_percent().
  Remove some unused variables.
  Improve general lvconvert man page description.
  Return 0 from cmirrord initscript 'start' if daemon is already running.
  Fix wrongly paired unlocking of VG_GLOBAL in pvchange. (2.02.66)
  Add backtraces for backup and backup_remove fail paths.
  Detect errors from dm_task_set calls in _get_device_info (dmeventd).
  Add backtraces for archive and backup_locally in check_current_backup().
  Fix memory leak in debug mode of restart_clvmd() error path.
  Log error message for pthread_join() failure in clvmd.

Version 2.02.79 - 20th December 2010
====================================
  Remove some unused variables.
  Add missing test for reallocation error in _find_parallel_space().
  Add checks for allocation errors in config node cloning.
  Fix error path if regex engine cannot be created in _build_matcher().
  Use char* arithmetic in target_version(), _process_all() & _targets().
  Fixing const cast gcc warnings in the code.
  Check read() and close() results in _get_cmdline().
  Add const for struct config_node usage.
  Fix NULL pointer check in error path in clvmd do_command(). (2.02.78)
  Fix device.c #include to ensure 64-bit fopen64 use. (2.02.51)
  Add copy_percent and snap_percent to liblvm.
  Enhance vg_validate to ensure integrity of LV and PV structs referenced.
  Enhance vg_validate to check composition of pvmove LVs.
  Create /var/run/lvm directory during clvmd initialisation if missing.
  Use new dm_prepare_selinux_context instead of dm_set_selinux_context.
  Avoid revalidating the label cache immediately after scanning.
  Support scanning for a single VG in independent mdas.
  Don't skip full scan when independent mdas are present even if memlock is set.
  Set cmd->independent_metadata_areas if metadata/dirs or disk_areas in use.
  Cope better with an undefined target_percent operation in _percent_run.
  Avoid writing to freed memory in vg_release and rename to free_vg.  (2.02.78)

Version 2.02.78 - 6th December 2010
===================================
  Abort if segment tag allocation fails in pool format _add_stripe_seg.
  Abort in _mirrored_transient_status if referenced log/image LV is not active.
  Add backtraces for dev_set() and dev_close_immediate() errors in set_lv().
  Log any unlink() error in clvmd remove_lockfile().
  Log any pipe write() or close() errors in clvmd child_init_signal().
  Detect if orphan vginfo was lost from cache before _lvmcache_update_vgname().
  Do a full rescan if some device is missing in lvm1 format read_pvs_in_vg.
  Add missing check that dm_pool_create succeeded in write_config_node().
  Use dm_snprintf in clvmd-command.c to ensure an overlong buffer is truncated.
  Don't write to buffer if its reallocation failed in clvmd do_command().
  Switch from float to fixed point percentage handling.
  Avoid misleading missing PV warnings in vgextend --restoremissing.
  Fix memory leak when VG allocation policy in metadata is invalid.
  Ignore unrecognised allocation policy found in metadata instead of aborting.
  Factor out tag printing into _out_tags and avoid leaking string buffer.
  Remove some unused variables & assignments.
  Add missing vg_release calls in _vg_read_by_vgid.
  Fix debug logging of derived flag LCK_CACHE in clvmd.
  Fix test for no system_dir in _init_backup().
  Disallow lvconvert ops that both allocate & free supplied PEs in a single cmd.
  Fix liblvm seg_size to give bytes not sectors.
  Add functions to look up LV/PV by name/uuid to liblvm.
  Free cmd_context if fallback to LVM1 fails in lvm2_main().
  Free device name buffer in dmsetup parse_loop_device_name() error paths.
  Close format lib if init_format_fn fails in _init_formats().
  Don't leave /proc/mounts open after dmeventd snapshot event processing.
  Fix out-of-scope arg_vgnames use in process_each_lv().
  Remove incorrect dm_task_destroy(NULL) from _node_clear_table() error path.
  Add missing closedir in _rm_blks after removing stray LVM1 VG files.
  Suppress 'No PV label' message when removing several PVs without mdas.
  Fix default /etc/lvm permissions to be 0755. (2.02.66)

Version 2.02.77 - 22nd November 2010
====================================
  Allocate a pool for dummy VG in _pvsegs_sub_single.
  Add PV and LV segment types and functions to liblvm.
  Add set_property functions to liblvm.
  Remove tag length restriction and allow / = ! : # & characters.
  Support repetition of --addtag and --deltag arguments.
  Add infrastructure for specific cmdline arguments to be repeated in groups.
  Split the_args cmdline arguments and values into arg_props and arg_values.
  Fix fsadm no longer to require '-f' to resize an unmounted filesystem.
  Fix fsadm to detect mounted filesystems on older systems. (2.0.75)
  Extend cling allocation policy to recognise PV tags (cling_by_tags).
  Add allocation/cling_tag_list to lvm.conf.
  Regenerate configure with 'autoreconf' for --enable-ocf. (2.02.76)

Version 2.02.76 - 8th November 2010
===================================
  Clarify error messages when activation fails due to activation filter use.
  Add pacemaker script VolumeGroup.ocf with configure --enable-ocf.
  Import make.tmpl into include/ Makefile.
  Fix handling of online filesystem resize (using new fsadm return code).
  Add DIAGNOSTICS section to fsadm man page.
  Modify fsadm to return different status code for check of mounted filesystem.
  Update VG metadata only once in vgchange when making multiple changes.
  Allow independent vgchange arguments to be used together.
  Automatically unmount invalidated snapshots in dmeventd.
  Suppress some superfluous messages from clang static analysis.
  Fix a deadlock caused by double close in clvmd.
  Fix NULL pointer dereference on too-large MDA error path in _vg_read_raw_area.
  Use static for internal _align_chunk() and _new_chunk() from pool-fast.c.
  Fix vgchange to process -a, --refresh, --monitor and --poll like lvchange.
  Add lvm2app functions to query any pv, vg, or lv property / report field.

Version 2.02.75 - 25th October 2010
===================================
  Annotate more variables and parameters as const.
  Fix missing variable initialization in cluster_send() function from cmirrord.
  Fix pointer for VG name in _pv_resize_single error code path.
  Fix warning for changed alignment requirements for dmeventd read/write func.
  Add global/metadata_read_only to use unrepaired metadata in read-only cmds.
  Don't take write lock in vgchange --refresh, --poll or --monitor.
  Skip dm devices in scan if they contain only error targets or are empty.
  Fix strict-aliasing compile warning in partition table scanning.
  Fix pthread mutex usage deadlock in clvmd.
  Automatically extend snapshots with dmeventd according to policy in lvm.conf.
  Add activation/snapshot_autoextend_threshold/percent to lvm.conf.
  Fix liblvm2cmd link order to support --as-needed.
  Remove dependency on libm by replacing floor() by an integer-based algorithm.
  Fix hang when repairing a mirrored-log that had both devs fail.
  Convey need for snapshot-merge target in lvconvert error message and man page.
  Add devices/disable_after_error_count config to limit access to failing devs.
  Give correct error message when creating a too-small snapshot.
  Implement vgextend --restoremissing to reinstate missing devs that return.
  Make lvconvert respect --yes and --force when converting an inactive log.
  Refactor and add 'get' functions for lv properties/fields.
  Update script for fsadm testing.
  Better support of noninteractive shell execution of fsadm.
  Fix usage of --yes flag for ReiserFS resize in fsadm.
  Fix detection of mounted filesystems for fsadm when udev is used.
  Fix assignment of default value to LVM variable in fsadm.
  Fix support for --yes flag for fsadm.
  Do not execute lvresize from fsadm --dry-run.
  Fix fsadm return error code from user's break action.
  Allow CC to be overridden at build time (for 'scan-build make').
  Rename 'flags' to 'status' in struct metadata_area.
  Avoid segfault by limiting partial mode for lvm1 metadata. (2.02.74)
  Use dm_zalloc and dm_pool_zalloc throughout.
  Add pv_get_property and create generic internal _get_property function.
  Add 'get' functions for pv and vg properties/fields.
  Make generic GET_*_PROPERTY_FN macros with secondary macro for vg, pv & lv.
  Add tags_format_and_copy() common function and call from _tags_disp.
  Add id_format_and_copy() common function and call from _uuid_disp.
  Refactor report.c '*_disp' functions to call supporting functions.
  Move parts of metadata*.[ch] into new {pv|vg|lv}.[ch] files.
  Fix vg_read memory leak with directory-based metadata.
  Fix memory leak of config_tree in reinitialization code path.
  Fix pool destruction order in dmeventd_lvm2_exit() to avoid leak debug mesg.
  Read whole /proc/self/maps file before working with maps entries.
  Speed up unquoting of quoted double quotes and backslashes.
  Speed up CRC32 calculations by using a larger lookup table.

Version 2.02.74 - 24th September 2010
=====================================
  Allow : and @ to be escaped with \ in device names of PVs.
  Replace alloca with dm_malloc in _aligned_io to avoid stack corruption.
  Fix partial mode operations for lvm1 metadata format.
  Track recursive filter iteration to avoid refreshing while in use. (2.02.56)
  Revert to old glibc vsnprintf behaviour in emit_to_buffer() to catch overflow.
  Allocate buffer for metadata tags dynamically to remove 4k limit.
  Add random suffix to archive file names to prevent races when being created.
  Reinitialize archive and backup handling on toolcontext refresh.
  Make poll_mirror_progress report PROGRESS_CHECK_FAILED if LV is not a mirror.
  Like mirrors, don't scan origins if ignore_suspended_devices() is set.
  Fix return type qualifier to avoid compiler warning. (2.02.69)
  Automatically generate LSB Requires-Start for clvmd init script.
  Fix return code of pvmove --abort PV.
  Fix pvmove --abort to remove even for empty pvmove LV.
  Add configure --with-default-data-alignment.
  Update heuristic used for default and detected data alignment.
  Add "devices/default_data_alignment" to lvm.conf.
  Add implementation for simple numeric 'get' property functions.
  Define GET_NUM_PROPERTY_FN macro to simplify numeric property 'get' function
  Add properties.[ch] to lib/report using columns.h.
  Add macro definitions to report infrastructure for character array length.
  Remove explicit double quotes from columns.h 'id' entries.
  Add 'flags' field to columns.h and define FIELD_MODIFIABLE.
  Add vg_mda_size and vg_mda_free functions.
  Simplify MD/swap signature detection in pvcreate and allow aborting.
  Allow --yes to be used without --force mode.
  Fix file descriptor leak in swap signature detection error path.
  Detect and allow abort in pvcreate if LUKS signature is detected.
  Always mask lock flags correctly when checking for LCK_WRITE.

Version 2.02.73 - 18th August 2010
==================================
  Fix potential for corruption during cluster mirror device failure.
  Use 'SINGLENODE' instead of 'dead' in clvmd singlenode messages.
  Ignore snapshots when performing mirror recovery beneath an origin.
  Pass LCK_ORIGIN_ONLY flag around cluster.
  Add suspend_lv_origin and resume_lv_origin using LCK_ORIGIN_ONLY.
  Allow internal suspend and resume of origin without its snapshots.
  Fix dev_manager_transient to access -real device not snapshot-origin.
  Monitor origin -real device below snapshot instead of overlay device.
  Don't really change monitoring status when in test mode.
  Fix some exit statuses when starting/stopping monitoring fails.
  Enable snapshot monitoring by default when dmeventd is enabled.
  Move cloned libdevmapper-event client code from segments into lib/activate.
  Fix 'lvconvert --splitmirrors' in cluster operation.
  Fix clvmd init script exit code to return 4 when executed as non-root user.
  Change default alignment of pe_start to 1MB.
  Add --norestorefile option to pvcreate.
  Require --restorefile when using pvcreate --uuid.
  Recognise and give preference to md device partitions (blkext major).
  Never scan internal LVM devices.
  Don't ignore user-specified PVs in split-mirror operations. (2.02.71)
  Fix data corruption bug in cluster mirrors.
  Require logical volume(s) to be explicitly named for lvconvert --merge.
  Avoid changing aligned pe_start as a side-effect of very verbose logging.
  Use built-in rule for device aliases: block/ < dm- < disk/ < mapper/ < other.
  Fix const warning in dev_manager_info() and _dev_manager_lv_rmnodes().
  Fix const warning in archive_file structure from archive.c.
  Clean generated files .exported_symbols_generated, example.conf for distclean.
  Handle failure of all mirrored log devices and all but one mirror leg.
  Disallow 'mirrored' log type for cluster mirrors.
  Do not use VPATH in include/Makefile.
  Fix exported_symbols generation to use standard compiler arguments.
  Use #include <> not "" in lvm2app.h which gets installed on the system.
  Make lib and liblvm.device-mapper wait for include file generation.
  Fix configure to supply DEFAULT_RUN_DIR to Makefiles.
  Fix allocation of wrong number of mirror logs with 'remove' fault policy.

Version 2.02.72 - 28th July 2010  [CVE-2010-2526]
=================================================
  Change clvmd to communicate with lvm2 via a socket in /var/run/lvm.
  Return controlled error if clvmd is run by non-root user.
  Add configure --default-run-dir for /var/run/lvm.
  Never use clvmd singlenode unless explicitly requested with -Isinglenode.

Version 2.02.71 - 28th July 2010
================================
  Document LVM fault handling in doc/lvm_fault_handling.txt.
  Make vgck warn about missing PVs.
  Clarify help text for vg_mda_count.
  Check if cluster log daemon is running before allowing cmirror create.
  Add unit-tests dir.
  Add configure --enable-testing and reports and report-generators dirs.
  Correct LV list order used by lvconvert when splitting a mirror.
  Check if LV with specified name already exists when splitting a mirror.
  Fix suspend/resume logic for LVs resulting from splitting a mirror.
  Update pvcreate, {pv|vg}change, and lvm.conf man pages about metadataignore.
  Switch cmirrord and clvmd to use dm_create_lockfile.
  Allow clvmd pidfile to be configurable.
  Update comments about memory handling in lvm2app.h.
  Add more verbose messages while checking volume_list and hosttags settings.
  Add log_error when strdup fails in {vg|lv}_change_tag().
  Remove unnecessary includes in liblvm files.
  Use __attribute__ consistently throughout.
  Fix redundant declarations and always compile with -Wredundant-decls.
  Fix possible hang when all mirror images of a mirrored log fail.
  Pass metadataignore to pv_create, pv_setup, _mda_setup, and add_mda.
  Init mda->list in mda_copy.
  Do not log backtrace in valid _lv_resume() code path.
  Cleanup help strings in configure.in.
  Prompt if metadataignore with vgextend or pvchange would adjust vg_mda_copies.
  Adjust vg_mda_copies if metadataignore given with vgextend or pvchange.
  Adjust auto-metadata repair and caching logic to try to cope with empty mdas.

Version 2.02.70 - 6th July 2010
===============================
  Remove log directly if all mirror images of a mirrored log fail.
  Randomly select which mdas to use or ignore.
  Add some missing standard configure.in checks.
  Add printf format attributes to yes_no_prompt and fix a caller.
  Always pass unsuspended dm devices through persistent filter to other filters.
  Move test for suspended dm devices ahead of other filters.
  Fix another segfault in clvmd -R if no response from daemon. (2.02.68)
  Remove superfluous suspended device counter from clvmd.
  Fix lvm shell crash when input is entirely whitespace.
  Update partial mode warning message.
  Preserve memlock balance in clvmd when activation triggers a resume.
  Restore the removemissing behaviour of lvconvert --repair --use-policies.

Version 2.02.69 - 30th June 2010
================================
  Fix vgremove to allow removal of VG with missing PVs. (2.02.52)
  Add metadata/vgmetadatacopies to lvm.conf.
  Add --metadataignore to pvcreate and vgextend.
  Add vg_mda_copies, pv_mda_used_count and vg_mda_used_count to reports.
  Describe --vgmetadatacopies in lvm.conf and other man pages.
  Add --[vg]metadatacopies to select number of mdas to use in a VG.
  Make the metadata ignore bit control read/write metadata areas in a PV.
  Add pvchange --metadataignore to set or clear a metadata ignore bit.
  Refactor metadata code to prepare for --metadataignore / --vgmetadatacopies.
  Ensure region_size of mirrored log does not exceed its full size.
  Generate liblvm2app exported symbols from header file.
  Preload libc locale messages to prevent reading it in memory locked state.
  Fix handling of simultaneous mirror image and mirrored log image failure.

Version 2.02.68 - 23rd June 2010
================================
  Fix clvmd initscript status to print only active clustered LVs.
  Add lv_path to reports to offer full /dev pathname.
  Fix typo in warning message about missing device with allocated data areas.
  Add device name and offset to raw_read_mda_header error messages.
  Honour log argument when down-converting stacked mirror.
  Sleep to workaround clvmd -S race: socket closed early and server drops cmd.
  Use early udev synchronisation and update of dev nodes for clustered mirrors.
  Remove incorrect inclusion of kdev_t.h from cmirrord/functions.h.
  Add man pages for lvmconf and non-existent lvmsadc and lvmsar tools.
  Exit successfully when using -o help (but not -o +help) with LVM reports.
  Do not use internal DLM lock definitions in generic LVM2 clvmd code.
  Add --force, --nofsck and --resizefs to lvresize/extend/reduce man pages.
  Fix lvm2cmd example in documentation.
  Allow use of lvm2app and lvm2cmd headers in C++ code.
  Remove unused #includes from clvmd files and introduce clvmd-common.h.
  Move common inclusions to clvmd-common.h.
  Use #include "" for libdevmapper.h and configure.h throughout tree.
  Fix LVM_PATH expansion when exec_prefix=NONE. (2.02.67)
  Fix segfault in clvmd -R if no response from daemon received.

Version 2.02.67 - 4th June 2010
===============================
  Handle failed restart of clvmd using -S switch properly.
  Fix clvmd initscript restart command to start clvmd if not yet running.
  Use built-in absolute paths in clvmd (clvmd restart and PV and LV queries).
  Require partial option in lvchange --refresh for partial LVs.
  Do not fail lvm_init() if init_logging() or _init_rand() generates an errno.
  Don't merge unchanged persistent cache file before dumping if tool scanned.
  Fix incorrect memory pool deallocation while using vg_read for files.
  Add --type parameter description to the lvcreate man page.
  Replace strncmp kernel version number checks with proper ones.
  Avoid selecting names under /dev/block if there is an alternative.
  Update clustered log kernel module name to log-userspace for 2.6.31 onwards.
  Add replicators' LVs to dtree for activation.
  Supress activation message if there is a missing replicator VG.
  Fix scripts/relpath.awk to work in mawk
  Extend lock_vol to check for missing replicator VGs first.
  Update _process_one_vg and process_each_lv_in_vg to populate cmd_vg.
  Add cmd_vg structure and associated functions for replicator.
  Extend _lv_each_dependency() to handle replicator dependencies.
  Add check_replicator_segment() to catch internal replicator errors.
  Initial support for replicator metadata.
  Extend process_each_lv_in_vg() to provide list of failed lvnames.
  Consistently return ECMD_FAILED if process_each_*lv() is interrupted.

Version 2.02.66 - 20th May 2010
===============================
  If unable to obtain snapshot percentage leave value blank on reports.
  Add install_system_dirs and install_initscripts makefile targets.
  Add configure options for system and locking directories.
  Generate example.conf so default lvm.conf contents can be configured.
  Install lvmconf script by default.
  Remove unnecessary versioned dmeventd plugin symlinks.
  Add tests for lvm_vgname_from_{pvid|device}.
  Add lvm2app interfaces to lookup a vgname from a pvid and pvname.
  Update pvchange to always obtain a vg handle for each pv to process.
  Add find_vgname_from_{pvname|pvid} functions.
  Add pvid_from_devname and lvmcache_vgname_from_pvid lvmcache functions.
  Validate orphan and VG_GLOBAL lock order too.
  Accept orphan VG names as parameters to lock_vol() and related functions.
  Use is_orphan_vg in place of hard-coded prefix tests and add is_global_vg.

Version 2.02.65 - 17th May 2010
===============================
  Fix clvmd init script never to deactivate non-clustered volume groups.
  Disallow vgchange --clustered if there are active mirrors or snapshots.
  Introduce lv_is_mirrored.
  Use /bin/bash for scripts with bashisms.
  Skip internal lvm devices in scan if ignore_suspended_devices is set.
  Do not merge old device cache after we run full scan. (2.02.56)
  Add pkgconfigdir Makefile variable for make install override.
  Configure pkgconfig udev and selinux dependencies.
  Switch Libs.private to Requires.private in devmapper.pc and lvm2app.pc.
  Use pkgconfig Requires.private for devmapper-event.pc.
  Add libdevmapper to linked libdevmapper-event.so.
  Link liblvm2cmd.so with libdevmapper-event and libdevmapper.
  Fix truncated total size displayed by pvscan.
  Add new --sysinit compound option to vgchange and lvchange.
  Drop duplicate errors for read failures and missing devices to verbose level.
  Use $(libdir)/lvm2 with make install_lvm2_plugin.
  Use $(libdir)/device-mapper with make install_dm_plugin.
  Add dm_list_splice() function to join two lists together.

Version 2.02.64 - 30th April 2010
=================================
  Avoid pointless initialisation when the 'version' command is run directly.
  Fix memory leak for invalid regex pattern input.
  Display invalid regex pattern for filter configuration in case of error.
  Remove no-longer-used arg_ptr_value.
  Fix -M and --type to use strings, not pointers that change on config refresh.
  Fix lvconvert error message when existing mirrored LV is not found.
  Set appropriate udev flags for reserved LVs.
  Disallow the direct removal of a merging snapshot.
  Don't preload the origin when removing a snapshot whose merge is pending.
  Disallow the addition of mirror images while a conversion is happening.
  Disallow primary mirror image removal when mirror is not in-sync.
  Remove obsolete --name parameter from vgcfgrestore.
  Add -S command to clvmd to restart the daemon preserving exclusive locks.
  Increment lvm2app version from 1 to 2 (memory allocation changes).
  Change lvm2app memory alloc/free for pv/vg/lv properties.
  Change daemon lock filename from lvm2_monitor to lvm2-monitor for consistency.
  Install symbolic .so links with relative paths between usrlibdir and libdir.
  Add awk script relpath.awk to calculate paths for relative symlinks.
  Use @AWK@ in makefiles.
  Fix double DESTDIR usage for infodir and mandir.

Version 2.02.63 - 14th April 2010
=================================
  Rename lvm_dump.sh to lvmdump.sh.
  Allow incomplete mirror restore in lvconvert --repair upon insufficient space.
  Do not reset position in metadata ring buffer on vgrename and vgcfgrestore.
  Allow VGs with active LVs to be renamed.
  Use UUIDs instead of names while processing event handlers.
  Only pass visible LVs to tools in cmdline VG name/tag expansions without -a.
  Use typedefs for toollib process_each functions.
  Use C locales and use_mlockall for clvmd.
  Refactor code related to vg->pvs list and add pv->vg link.
  Mask LCK_HOLD flag in cluster VG locks for backwards compatibility.
  Add activation/polling_interval to lvm.conf as --interval default.
  Don't ignore error if resuming any LV fails in resume_lvs.
  Skip closing persistent filter cache file if open failed.
  Install .a and .so links into $(usrlibdir).
  Add --enable-write_install options to install user-writable files.
  Use INSTALL_PROGRAM/DATA/WDATA target.
  Switch from using VPATH  to vpath in Makefiles.
  Permit mimage LVs to be striped in lvcreate, lvresize and lvconvert.
  Fix pvmove allocation to take existing parallel stripes into account.
  Add pvmove_source_seg to struct lv_segment.
  Fix incorrect removal of symlinks after LV deactivation fails.
  Fix is_partitioned_dev not to attempt to reopen device.
  Fix another thread race in clvmd.
  Refactor management of vg->pvs list.
  Fix lcov rules and generate better coverage report.
  Improve vg_validate to detect some loops in lists.
  Change most remaining log_error WARNING messages to log_warn.
  Always use blocking lock for VGs and orphan locks.
  Allocate all memory for segments from private VG mempool.
  Return newly allocated PV segment after segment split.
  Optimise searching PV segments for seeking the most recently-added.
  Remove vg_validate call when parsing cached metadata.
  Use hash table of LVs to speed up parsing of text metadata with many LVs.
  Fix two vg_validate messages, adding whitespace and parentheses.
  When dmeventd is not forking because of -d flag, don't kill parent process.
  Fix 'make install' when $(builddir) is different from $(srcdir).
  Fix dso resource leak in error path of dmeventd.
  Use C locales and use_mlockall for dmeventd.
  Fix --alloc contiguous policy only to allocate one set of parallel areas.
  Do not allow {vg|lv}change --ignoremonitoring if on clustered VG.
  Improved dependency tracking for dmeventd and liblvm2cmd sources.
  Improved Makefile rules for distclean and cflow targets.
  Add ability to create mirrored logs for mirror LVs.
  Fix clvmd cluster propagation of dmeventd monitoring mode.
  Allow ALLOC_ANYWHERE to split contiguous areas.
  Use INTERNAL_ERROR for internal errors throughout tree.
  Add some assertions to allocation code.
  Introduce pv_area_used into allocation algorithm and add debug messages.
  Add activation/monitoring to lvm.conf.
  Add --monitor and --ignoremonitoring to lvcreate.
  Allow dynamic extension of array of areas selected as allocation candidates.
  Export and use only valid cookie value in test suite.
  Remove const modifier for struct volume_group* from process_each_lv_in_vg().
  Don't allow resizing of internal logical volumes.
  Fix libdevmapper-event pkgconfig version string to match libdevmapper.
  Avoid scanning all pvs in the system if operating on a device with mdas.
  Add configure --with-clvmd=singlenode to use clvmd w/o cluster infrastructure.
  Get stacktrace if testsuite test drops core and lvm was built with debugging.
  Disable long living process flag in lvm2app.
  Fix pvcreate device md filter check.
  Suppress repeated errors about the same missing PV uuids.
  Bypass full device scans when using internally-cached VG metadata.
  Only do one full device scan during each read of text format metadata.
  Remove unnecessary full_scan parameter from get_vgids and get_vgnames calls.
  Look up missing PVs by uuid not dev_name in _pvs_single to avoid invalid stat.
  Make find_pv_in_vg_by_uuid() return same type as related functions.
  Introduce is_missing_pv().
  Fix clvmd Makefile to not overwrite LIBS from template definition.

Version 2.02.62 - 9th March 2010
================================
  Add use_mlockall and mlock_filter to activation section of lvm.conf.
  Add default alternative to mlockall using mlock to reduce pinned memory size.
  Remove -rdynamic from static builds.
  Update checks for pthread, readline & selinux libs and link only when needed.
  Introduce makefile vars UDEV_LIBS, DL_LIBS, SELINUX_LIBS, STATIC_LIBS.
  Introduce makefile vars LVMINTERNAL_LIBS, READLINE_LIBS, PTHREAD_LIBS.
  Toggle configure help to print --disable-fsadm.
  Use $() instead of ${} consistently for all Makefile variables.
  Replace CFLOW_CMD only in make.tmpl and use it as variable elsewhere.
  Use $(top_builddir) for inclusion of make.tmpl in Makefiles.
  Fix autoconf warning about ignored datarootdir.
  Increase AC_PREREQ version to 2.61 (for AC_PROC_SED, AC_PROG_MKDIR_P).
  Handle misaligned devices that report alignment_offset of -1.
  Extend core allocation code in preparation for mirrored log areas.
  Rewrite clvmd init script.
  Remove lvs_in_vg_activated_by_uuid_only call.
  No longer fall back to looking up active devices by name if uuid not found.
  Don't touch /dev in vgmknodes if activation is disabled.
  Update lvm2app.h Doxygen comments and add lvm2app Doxygen config file.
  Update nightly tests and lvm2app unit tests to cover tags.
  Add lvm2app functions lvm_{vg|lv}_{get|add|remove}_tag() functions.
  Add dm_pool_strdup to allocate and copy memory in tag library function.
  Refactor vgcreate, vgchange, and lvchange for tag library function.
  Refactor snapshot-merge deptree and device removal to support info-by-uuid.

Version 2.02.61 - 15th February 2010
====================================
  Fix some consts and floating point gcc warnings.
  Fix dm_report_field_uint64 function to accept 64-bit ints.
  Change readhead display to use 32-bit -1 const instead of 64-bit.
  Add LVM_SUPPRESS_LOCKING_FAILURE_MESSAGES environment variable.
  Remove hard-coding that skipped _mimage devices from 11-dm-lvm.rules.
  Use udev transactions in test suite.
  Set udev state automatically instead of using LVM_UDEV_DISABLE_CHECKING.
  Add lvm_pv_get_size, lvm_pv_get_free and lvm_pv_get_dev_size to lvm2app.
  Change lvm2app to return all sizes in bytes as documented (not sectors).
  Add 'fail_if_percent_unsupported' arg to _percent and _percent_run.
  Remove false "failed to find tree node" error when activating merging origin.
  Exit with success when lvconvert --repair --use-policies performs no action.
  Accept a list of LVs with 'lvconvert --merge @tag' using process_each_lv.
  Avoid unnecessary second resync when adding mimage to core-logged mirror.
  Exclude internal VG names and uuids from lists returned through lvm2app.
  Add %ORIGIN support to lv{create,extend,reduce,resize} --extents.
  Add _mda_copy to clone a struct metadata_area.
  Remove pointless versioned symlinks to dmeventd plugin libraries.
  Fix dmeventd snapshot plugin build dependency.
  Make clvmd -V return status zero.
  Remove unnecessary 'dmsetup resume' following 'dmsetup create' in tests.
  Fix cmirrord segfault in clog_cpg list processing when converting mirror log.
  Deactivate temporary pvmove mirror cluster-wide when activating it fails.
  Always query device by uuid and not name in clvmd.
  Add missing metadata vg_reverts in pvmove error paths.
  Unlock shared lock in clvmd if activation calls fail.
  Return success from dev_manager_info with non-existent uuid if ioctl succeeds.

Version 2.02.60 - 23rd January 2010
===================================
  Extend cmirrord man page.
  Sleep before first progress check if pvmove/lvconvert interval has prefix '+'.
  Default to checking progress before waiting in _wait_for_single_lv.
  Fix cmirror initscript (including syntax error).
  Eliminate avoidable ioctls for checking open_count in _add_new_lv_to_dtree.
  Disable memory debugging if dmeventd is configured. (Not thread-safe.)
  Fix first log message prefix in syslog for dmeventd plugins.
  Fix exported symbols names for dmeventd lvm2 wrapper plugin.
  Make failed locking initialisation messages more descriptive.

Version 2.02.59 - 21st January 2010
===================================
  Add libdevmapper-event-lvm2.so to serialise dmeventd plugin liblvm2cmd use.
  Cleanup memory initialization and freeing in pv_read() and pv_create().
  Clear pointer and counters after their release in _fin_commands().
  Stop dmeventd trying to access already-removed snapshots.
  Remove (fallback) /dev mknod from cmirrord.
  Add t-topology-support.sh and t-snapshot-merge.sh tests.
  Fix clvmd to never scan suspended devices.
  Fix dmeventd build outside source tree.
  Assorted cmirror code changes to remove various compiler warnings.
  Fix detection of completed snapshot merge.
  Add Red Hat cmirror initscript (unfinished).
  Add cmirrord man page (incomplete).
  Make cluster log communication structures architecture independant.
  Fix cluster log in-memory bitmap handling.
  Improve snapshot merge metadata import validation.
  Improve target type compatibility checking in _percent_run().
  Add 'target_status_compatible' method to 'struct segtype_handler'.
  Change underscore to hyphen in table line for clustered log type.

Version 2.02.58 - 14th January 2010
===================================
  Cleanup some minor gcc warnings.
  Add --merge to lvconvert to merge a snapshot into its origin.
  Fix clvmd automatic target module loading crash (no reset_locking fn).
  Fix allocation code not to stop at the first area of a PV that fits.

Version 2.02.57 - 12th January 2010
===================================
  Ensure exactly one process returns from poll_daemon(), never two.
  Reset _vgs_locked in lvmcache_init() in child after forking.
  Define {DM, LVM}_UDEV_DISABLE_CHECKING=1 environment variables during tests.
  Enable udev_sync and udev_rules in lvm.conf by default while running tests.
  If LVM_UDEV_DISABLE_CHECKING in set in environment, disable udev warnings.
  Add --splitmirrors to lvconvert to split off part of a mirror.
  Change background polldaemon's process name to "(lvm2)".
  Allow vgremove to remove a VG with PVs missing after a prompt.
  Return success in lvconvert --repair --use-policies on failed allocation.
  Keep log type consistent when changing mirror image count.
  Always set environment variables for an LVM2 device in 11-dm-lvm.rules.
  Add activation/udev_rules config option in lvm.conf.
  Add consts to text metadata flag structs.
  Add macros outfc, outsize, outhint and function out_text_with_comment.
  Reimplement report FIELD macro using offsetof instead of static structs.
  Fix fsadm man page typo (fsdam).
  Rename mirror_device_fault_policy to mirror_image_fault policy.
  Remove empty PV devices if lvconvert --repair is using defined policies.
  Use fixed buffer to prevent stack overflow in persistent filter dump.
  Use extended status of new kernel snapshot target 1.8.0 to detect when empty.
  Insert stack macros in suspend_lv, resume_lv & (de)activate_lv callers.
  Add --poll flag to vgchange and lvchange to control background daemon launch.
  Propagate metadata commit and revert notifications to other cluster nodes.
  Use proper mask for VG lock mode in clvmd.
  Allow precommitted metadata to be dropped from lvmcache.
  Move processing of VG locks to separate function in clvmd.
  Properly decode all flags in clvmd messages including VG locks.
  Properly handle precommitted cache flag when only committed metadata present.
  Resume renamed volumes in reverse order to preserve memlock pairing.
  Drop cached metadata after device was auto-repaired and removed from VG.
  Clear MISSING_PV flag if PV reappeared and is empty.
  Fix removal of multiple devices from a mirror.
  Also clean up PVs flagged as missing in vgreduce --removemissing --force.
  Introduce INTERNAL_ERROR macro for error messages and use throughout.
  Remove superfluous returns from void functions.
  Destroy allocated mempool in _vg_read_orphans() error path.
  Fix some pvresize and toollib error paths with missing VG releases/unlocks.
  Explicitly call suspend for temporary mirror layer.
  Allow use of precommitted metadata when a PV is missing.
  Add memlock information to do_lock_lv debug output.
  Always bypass calls to remote cluster nodes for non-clustered VGs.
  Permit implicit cluster lock conversion in pre/post callbacks on local node.
  Permit implicit cluster lock conversion to the lock mode already held.
  Fix lock flag masking in clvmd so intended code paths get invoked.
  Replace magic masks in cluster locking code by defined masks.
  Remove newly-created mirror log from metadata if initial deactivation fails.
  Correct activated or deactivated text in vgchange summary message.
  Improve pvmove error message when all source LVs are skipped.
  Fix memlock imbalance in lv_suspend if already suspended.
  Fix pvmove test mode not to poll (and fail).
  Fix vgcreate error message if VG already exists.
  Fix tools to use log_error when aborted due to user response to prompt.
  Fix ignored readahead setting in lvcreate --readahead.
  Fix clvmd memory leak in lv_info_by_lvid by calling release_vg.
  If aborting due to internal error, always send that message to stderr.
  Add global/abort_on_internal_errors to lvm.conf to assist testing.
  Fix test Makefiles when builddir and srcdir differ.
  Impose limit of 8 mirror images to match the in-kernel kcopyd restriction.
  Use locking_type 3 (compiled in) for lvmconf --enable-cluster.
  Remove list.c and list.h with no-longer-used dm_list macros and functions.
  Log failure type and recognise type 'F' (flush) in dmeventd mirror plugin.
  Extend internal PV/VG/LV/segment status variables from 32-bit to 64-bit.

Version 2.02.56 - 24th November 2009
====================================
  Add missing vg_release to pvs and pvdisplay to fix memory leak.
  Do not try to unlock VG which is not locked in _process_one_vg.
  Move is_long_lived persistent_filter_dump to happen after every full scan.
  Refresh device filters before full device rescan in lvmcache.
  Return error status if vgchange fails to activate some volume.
  Fix suspend/resume lock type test causing unbalanced memory locking.
  Revert vg_read_internal change as clvmd was not ready for vg_read. (2.02.55)

Version 2.02.55 - 19th November 2009
====================================
  Fix deadlock when changing mirrors due to unpaired memlock refcount changes.
  Use separate memlock counter for dmeventd handlers to permit device scanning.
  Directly restrict vgchange to activating visible LVs.
  Fix pvmove region_size overflow for very large PVs.
  Fix lvcreate and lvresize %PVS argument always to use sensible total size.
  Tidy some uses of arg_count and introduce arg_is_set.
  Export outnl and indent functions for modules.
  Flush stdout after yes/no prompt.
  Update vgsplit and vgcreate to use vg_set_clustered.
  Add vg_mda_count and vg_set_clustered library functions.
  Add more vgcreate and vgsplit nightly tests.
  Insert some missing stack macros into activation code.
  Recognise DRBD devices and handle them like md devices.

Version 2.02.54 - 26th October 2009
===================================
  Update lvcreate/lvconvert man pages to explain PhysicalVolume parameter.
  Document --all option in man pages, cleanup {pv|vg|lv}{s|display} man pages.
  Permit snapshots of mirrors.
  Cleanup mimagetmp LV if allocation fails for new lvconvert mimage.
  Fix clvmd segfault when refresh_toolcontext fails.
  Remember to clear 'global lock held during cache refresh' state after use.
  Use udev flags support in LVM and apply various fixes to udev rules.
  Delay announcing mirror monitoring to syslog until initialisation succeeded.
  Handle metadata with unknown segment types more gracefully.
  Set default owner and group to null.
  Add dmeventd.static to the build.
  Disable realtime support code by default.
  Make clvmd return 0 on success rather than 1.
  Add --pvmetadatacopies for pvcreate, vgcreate, vgextend, vgconvert.
  Add implict pvcreate support to vgcreate and vgextend.
  Correct example.conf to indicate that lvm2 not lvm1 is the default format.
  Remove an unused stray LVM1_SUPPORT ifdef.
  Only include selinux libs in libdevmapper.pc when selinux build enabled.
  Allow for a build directory separate from the source.
  Update distclean target for rename clogd to cmirrord. (2.02.52)
  Only do lock conversions in clvmd if we are explicitly asked for one.
  Introduce percent_range_t and centralise snapshot full/mirror in-sync checks.
  Factor out poll_mirror_progress and introduce progress_t.
  Distinguish between powers of 1000 and powers of 1024 in unit suffixes.
  Restart lvconverts in vgchange by sharing lv_spawn_background_polling.
  Generalise polldaemon code by changing mirror-specific variable names.
  Don't attempt to deactivate an LV if any of its snapshots are in use.
  Return error if lv_deactivate fails to remove device from kernel.
  Provide alternative implementation of obsolete siginterrupt().
  Consolidate LV allocation into alloc_lv().
  Treat input units of both 's' and 'S' as 512-byte sectors.  (2.02.49)
  Use standard output units for 'PE Size' and 'Stripe size' in pv/lvdisplay.
  Add configure --enable-units-compat to set si_unit_consistency off by default.
  Add global/si_unit_consistency to enable cleaned-up use of units in output.

Version 2.02.53 - 25th September 2009
=====================================
  Create any directories in /dev with DM_DEV_DIR_UMASK (022).
  Enable dmeventd monitoring section of config file by default.
  Update lvm2 monitoring script to lvm2_monitoring_init_red_hat.in.
  Fix lvm2app test to run under test/api subdirectory only when configured.
  Add vg_is_resizeable() and cleanup reference to VG_RESIZEABLE.

Version 2.02.52 - 15th September 2009
=====================================
  Update _process_one_vg to cleanup properly after vg_read_error.
  Add lots of missing stack debug messages to tools.
  Make readonly locking available as locking type 4.
  Fix readonly locking to permit writeable global locks (for vgscan). (2.02.49)
  Add DM_UDEV_RULES_VSN environment variable to udev rules.
  Update vgsplit, vgmerge, and vgrename to obey new vgname ordering rules.
  Make lvm2app pv_t, lv_t, vg_t handle definitions consistent with lvm_t.
  Enforce an alphabetical lock ordering on vgname locking.
  Prioritise write locks over read locks by default for file locking.
  Add local lock files with suffix ':aux' to serialise locking requests.
  Fix global locking in PV reporting commands (2.02.49).
  Fix pvcreate string termination in duplicate uuid warning message.
  Don't loop reading sysfs with pvcreate on a non-blkext partition (2.02.51).
  Fix vgcfgrestore error paths when locking fails (2.02.49).
  Update Makefile distclean target.
  Add libudev configuration check.
  Make clvmd check corosync to see what cluster interface it should use.
  Add clvmd autodetection check and cleanup related configure messages.
  Rewrite clvmd configuration code to cope with all combinations of libs.
  Added configure --enable-cmirrord to build the cluster mirror log daemon.
  Rename clogd to cmirrord.
  Make lvchange --refresh only take a read lock on volume group.
  Fix race where non-blocking file locks could be granted in error.
  Fix vgextend error path - if ORPHAN lock fails, unlock / release vg (2.02.49).
  Fix compile warning in clvmd.
  Clarify use of PE ranges in lv{convert|create|extend|resize} man pages.
  Remove useless _pv_write wrapper.
  Add lvm2app.sh to tests conditional upon configure --enable-applib.
  Add lvm_vg_is_clustered, lvm_vg_is_exported, and lvm_vg_is_partial.
  Update lvm_vg_remove to require lvm_vg_write to commit remove to disk.
  Update test/api/test.c to call lvm_vg_create and lvm_vg_remove.

Version 2.02.51 - 6th August 2009
=================================
  Fix locking in clvmd (2.02.50).
  Add --noudevsync option for relevant LVM tools.
  Add activation/udev_sync to lvm.conf.
  Only change LV symlinks on ACTIVATE not PRELOAD.
  Make lvconvert honour log mirror options combined with downconversion.
  Allow LV suspend while --ignorelockingfailure is in force.
  Update synopsis in lvconvert manpage to mention --repair.
  Set cookies in activation code and wait for udev to complete processing.
  Added configure --enable-udev_rules --enable-udev_sync.
  Added configure --with-udev-prefix --with-udevdir.
  Added udev dir to hold udev rules.
  Add devices/data_alignment_detection to lvm.conf.
  Add devices/data_alignment_offset_detection to lvm.conf.
  Add --dataalignmentoffset to pvcreate to shift start of aligned data area.
  Fix _mda_setup() to not check first mda's size before pe_align rounding.
  Document -I option of clvmd in the man page.
  Fix configure script to handle multiple clvmd selections.
  Fix lvm2app.pc installation filename.
  Remove pv_t, vg_t & lv_t handles from lib.  Only liblvm uses them.
  Rename lvm.h to lvm2app.h for now.

Version 2.02.50 - 28th July 2009
================================
  Change test/api/test.c prompt so it's not confused with the main lvm prompt.
  Update liblvm unit tests in test/api to cover latest liblvm changes.
  Add unimplemented lvm_lv_resize and lvm_pv_resize skeletons to liblvm.
  Add lvm_library_get_version to liblvm.
  Add lvm_config_override to liblvm to allow caller to override LVM config.
  Add lvm_lv_is_active and lvm_lv_is_suspended to liblvm.
  Add lvm_lv_activate and lvm_lv_deactivate to liblvm.
  Add lvm_scan, lvm_vg_reduce and lvm_vg_remove_lv to liblvm.
  Add functions to get numeric properties to liblvm.
  Add lvm_{pv|vg|lv}_get_{name|uuid} to liblvm.
  Add lvm_vg_list_pvs and lvm_vg_list_lvs to liblvm.
  Add lvm_vg_open and lvm_vg_create_lv_linear to liblvm.
  Add lvm_list_vg_names/uuids to liblvm.
  Add lvm_errno and lvm_errmsg to liblvm to obtain failure information.
  Rename lvm_create/destroy to lvm_init/quit.
  Rename lvm_reload_config to lvm_config_reload.
  Refactor _override_settings to use new override_config_tree_from_string.
  Add vg_reduce to metadata.c and metadata-exported.h.
  Update lvm.h to clarify API behavior and return codes.
  Update lvm_vg_extend to do an implicit pvcreate on the device.
  Update display.c to use vg_free(vg) instead of duplicating the calculation.
  Refactor vg_size, vg_free, and pv_mda_count field calculations for liblvm.
  Refactor pvcreate and lvcreate for liblvm.
  Add global/wait_for_locks to lvm.conf so blocking for locks can be disabled.
  All LV locks are non-blocking so remove LCK_NONBLOCK from separate macros.
  Fix race condition with vgcreate and vgextend on same device (2.02.49).
  Remove redundant validate_name call from vgreduce.
  Remove unused handles lvseg, pvseg inside liblvm/lvm.h.
  Add liblvm2app Makefile installation targets.
  Add liblvm pkgconfig file.
  Use newly-independent LVM_LIBAPI in liblvm soname.  E.g. liblvm2app.so.2.1.
  Add an API version number, LVM_LIBAPI, to the VERSION string for liblvm.
  Pass a pointer to struct cmd_context to init_multiple_segtypes
  Return EINVALID_CMD_LINE not success when invalid VG name format is used.
  Remove unnecessary messages after vgcreate/vgsplit refactor (2.02.49).
  Add log_errno to set a specific errno and replace log_error in due course.
  Change create_toolcontext to still return an object if it fails part-way.
  Add EUNCLASSIFIED (-1) as the default LVM errno code.
  Store any errno and error messages issued while processing each command.
  Use log_error macro consistently throughout in place of log_err.

Version 2.02.49 - 15th July 2009
================================
  Add readonly locking type to replace implementation of --ignorelockingfailure.
  Exclude VG_GLOBAL from vg_write_lock_held so scans open devs read-only again.
  Add unit test case for liblvm VG create/delete APIs.
  Add liblvm APIs to implement creation and deletion of VGs.
  Initialize cmd->cmd_line to "liblvm" in new liblvm library.
  Place handles to liblvm objects for pv, vg, lv, lvseg, pvseg inside lvm.h.
  Refactor vgsplit and vgextend to remove READ_REQUIRE_RESIZEABLE flag.
  Use _exit() not exit() after forking to avoid flushing libc buffers twice.
  Add cast to log_info arg in _find_labeller to avoid Sparc64 warning.
  Make cmd->cmd_line const.
  Fix dev name mismatch in vgcreate man page example.
  Refactor vg_remove_single for use in liblvm.
  Make all tools use consistent lock ordering obtaining VG_ORPHAN lock second.
  Check md devices for a partition table during device scan.
  Add extended device (blkext) and md partition (mdp) types to filters.
  Make text metadata read errors for segment areas more precise.
  Fix text segment metadata read errors to mention correct segment name.
  Include segment and LV names in text segment import error messages.
  Add parent node to config_node structure.
  Update vgsplit and vgcreate to call new vg_create and 'set' functions.
  Change vg_create to take minimal parameters, obtain a lock, and return vg_t.
  Refactor vgchange extent_size, max_lv, max_pv, and alloc_policy for liblvm.
  Update t-vgcreate-usage.sh to test for default vg properties.
  Fix memory leak in vgsplit when re-reading the vg.
  Make various exit/cleanup paths more robust after lvm init failures.
  Use LCK_NONBLOCK implicitly instead of explicit vg_read() flag.
  Remove unnecessary locking and existence tests from new vg_read() interface.
  Permit several segment types to be registered by a single shared object.
  Update the man pages to document size units uniformly.
  Allow commandline sizes to be specified in terms of bytes and sectors.
  Update 'md_chunk_alignment' to use stripe-width to align PV data area.
  Update test/t-inconsistent-metadata.sh to match new vg_read interface.
  Add lvmcache_init() to polldaemon initialization.
  Convert tools to use new vg_read / vg_read_for_update.
  Fix segfault in vg_release when vg->cmd is NULL.

Version 2.02.48 - 30th June 2009
================================
  Abort if automatic metadata correction fails when reading VG to update it.
  Explicitly request fallback to default major number in device mapper.
  Ignore suspended devices during repair.
  Call vgreduce --removemissing automatically to fix missing PVs in dmeventd.
  Suggest using lvchange --resync when adding leg to not-yet-synced mirror.
  Destroy toolcontext on clvmd exit to avoid memory pool leaks.
  Fix lvconvert not to poll mirror if no conversion in progress.
  Fix memory leaks in toolcontext error path.
  Reinstate partial activation support in clustered mode. (2.02.40)
  Allow metadata correction even when PVs are missing.
  Use 'lvm lvresize' instead of 'lvresize' in fsadm.
  Do not use '-n' realine option in fsadm for busybox compatiblity.
  Add vg_lock_newname() library function for vgrename, vgsplit and vgcreate.
  Round up requested readahead to at least one page and print warning.
  Try to repair vg before actual vgremove when force flag provided.
  Fix possible double release of VG after recovery.
  Add parameter to process_each_vg specifying what to do with inconsistent VG.
  Unify error messages when processing inconsistent volume group.
  Use lvconvert --repair instead of vgreduce in mirror dmeventd DSO.
  Introduce lvconvert --use_policies (repair policy according to lvm.conf).
  Update clvmd-corosync to match new corosync API.
  Fix lib Makefile to include any shared libraries in default target.
  Fix rename of active snapshot with virtual origin.
  Fix convert polling to ignore LV with different UUID.
  Cache underlying device readahead only before activation calls.
  Fix segfault when calculating readahead on missing device in vgreduce.
  Remove verbose 'visited' messages.
  Handle multi-extent mirror log allocation when smallest PV has only 1 extent.
  Add LSB standard headers and functions (incl. reload) to clvmd initscript.
  When creating new LV, double-check that name is not already in use.
  Remove /dev/vgname/lvname symlink automatically if LV is no longer visible.
  Rename internal vorigin LV to match visible LV.
  Suppress 'removed' messages displayed when internal LVs are removed.
  Fix lvchange -a and -p for sparse LVs.
  Fix lvcreate --virtualsize to activate the new device immediately.
  Make --snapshot optional with lvcreate --virtualsize.
  Generalise --virtualoriginsize to --virtualsize.
  Skip virtual origins in process_each_lv_in_vg() without --all.
  Fix counting of virtual origin LVs in vg_validate.
  Attempt to load dm-zero module if zero target needed but not present.

Version 2.02.47 - 22nd May 2009
===============================
  Rename liblvm.so to liblvm2app.so and use configure --enable-applib.
  Reinstate version in liblvm2cmd.so soname. (2.02.44)

Version 2.02.46 - 21st May 2009
===============================
  Inherit readahead setting from underlying devices during activation.
  Detect LVs active on remote nodes by querying locks if supported.
  Enable online resizing of mirrors.
  Use suspend with flush when device size was changed during table preload.
  Implement query_resource_fn for cluster_locking.
  Support query_resource_fn in locking modules.
  Introduce CLVMD_CMD_LOCK_QUERY command for clvmd.
  Fix pvmove to revert operation if temporary mirror creation fails.
  Fix metadata export for VG with missing PVs.
  Add vgimportclone and install it and the man page by default.
  Force max_lv restriction only for newly created LV.
  Remove unneeded import parameter from lv_create_empty.
  Merge lv_is_displayable and lv_is_visible functions.
  Introduce lv_set_visible & lv_set_hidden functions.
  Fix lv_is_visible to handle virtual origin.
  Introduce link_lv_to_vg and unlink_lv_from_vg functions.
  Remove lv_count from VG and use counter function instead.
  Fix snapshot segment import to not use duplicate segments & replace.
  Do not query nonexistent devices for readahead.
  Remove NON_BLOCKING lock flag from tools and set a policy to auto-set.
  Remove snapshot_count from VG and use function instead.
  Fix first_seg() call for empty segment list.
  Add install_lvm2 makefile target to install only the LVM2 components.
  Reject missing PVs from allocation in toollib.
  Fix PV datalignment for values starting prior to MDA area. (2.02.45)
  Add sparse devices: lvcreate -s --virtualoriginsize (hidden zero origin).
  Fix minimum width of devices column in reports.
  Add lvs origin_size field.
  Fix linux configure --enable-debug to exclude -O2.
  Implement lvconvert --repair for repairing partially-failed mirrors.
  Fix vgreduce --removemissing failure exit code.
  Fix remote metadata backup for clvmd.
  Introduce unlock_and_release_vg macro.
  Introduce vg_release() to be called to free every struct volume_group.
  Alloc PV internal structure from VG mempool if possible.
  Fix metadata backup to run after vg_commit always.
  Tidy clvmd volume lock cache functions.
  Fix pvs report for orphan PVs when segment attributes are requested.
  Fix pvs -a output to not read volume groups from non-PV devices.
  Add MMC (mmcblk) device type to filters.
  Introduce memory pools per volume group (to reduce memory for large VGs).
  Use copy of PV structure when manipulating global PV lists.
  Always return exit error status when locking of volume group fails.
  Fix mirror log convert validation question.
  Avoid referencing files from DESTDIR during build process.
  Avoid creating some static libraries unless configured --enable-static_link.
  Enable use of cached metadata for pvs and pvdisplay commands.
  Add missing 'device-mapper' internal subdir build dependency.
  Fix memory leak in mirror allocation code.
  Save and restore the previous logging level when log level is changed.
  Fix error message when archive initialization fails.
  Make sure clvmd-corosync releases the lockspace when it exits.
  Fix segfault for vgcfgrestore on VG with missing PVs.
  Block SIGTERM & SIGINT in clvmd subthreads.
  Detect and conditionally wipe swapspace signatures in pvcreate.
  Fix maximal volume count check for snapshots if max_lv set for volume group.
  Fix lvcreate to remove unused cow volume if the snapshot creation fails.
  Fix error messages when PV uuid or pe_start reading fails.
  Build new liblvm application-level library.
  Rename liblvm.a to liblvm-internal.a.
  Flush memory pool and fix locking in clvmd refresh and backup command.
  Fix unlocks in clvmd-corosync. (2.02.45)
  Fix error message when adding metadata directory to internal list fails.
  Fix size and error message of memory allocation at backup initialization.
  Remove old metadata backup file after renaming VG.
  Restore log_suppress state when metadata backup file is up-to-date.

Version 2.02.45 - 3rd March 2009
================================
  Avoid scanning empty metadata areas for VG names.
  Attempt proper clean up in child before executing new binary in exec_cmd().
  Do not scan devices if reporting only attributes from PV label.
  Use pkgconfig to obtain corosync library details during configuration.
  Fix error returns in clvmd-corosync interface to DLM.
  Add --refresh to vgchange and vgmknodes man pages.
  Pass --test from lvresize to fsadm as --dry-run.
  Supply argv[] list to exec_cmd() to allow for variable number of parameters.
  Prevent fsadm from checking mounted filesystems.
  No longer treats any other key as 'no' when prompting in fsadm.
  Tidy fsadm command line processing.
  Add lib/lvm.h and lib/lvm_base.c for the new library interface.
  Move tools/version.h to lib/misc/lvm-version.h.
  Split LVM_VERSION into MAJOR, MINOR, PATCHLEVEL, RELEASE and RELEASE_DATE.
  Add system_dir parameter to create_toolcontext().
  Add --dataalignment to pvcreate to specify alignment of data area.
  Exclude LCK_CACHE locks from _vg_lock_count, fixing interrupt unblocking.
  Provide da and mda locations in debug message when writing text format label.
  Mention the restriction on file descriptors at invocation on the lvm man page.
  Index cached vgmetadata by vgid not vgname to cope with duplicate vgnames.
  No longer require kernel and metadata major numbers to match.
  Add a fully-functional get_cluster_name() to clvmd corosync interface.
  Remove duplicate cpg_initialize from clvmd startup.
  Add option to /etc/sysconfig/cluster to select cluster type for clvmd.
  Allow clvmd to start up if its lockspace already exists.
  Separate PV label attributes which do not need parse metadata when reporting.
  Remove external dependency on the 'cut' command from fsadm.
  Fix pvs segfault when pv mda attributes requested for not available PV.
  Add fsadm support for reszing ext4 filesysystems.
  Move locking_type reading inside init_locking().
  Rename get_vgs() to get_vgnames() and clarify related error messages.
  Allow clvmd to be built with all cluster managers & select one on cmdline.
  Mention --with-clvmd=corosync in ./configure.
  Replace internal vg_check_status() implementation.
  Rename vg_read() to vg_read_internal().

Version 2.02.44 - 26th January 2009
===================================
  Fix --enable-static_link after the recent repository changes.
  Add corosync/DLM cluster interface to clvmd.
  Add --nameprefixes, --unquoted, --rows to pvs, vgs, lvs man pages.
  Fix lvresize size conversion for fsadm when block size is not 1K.
  Fix pvs segfault when run with orphan PV and some VG fields.
  Display a 'dev_size' of zero for missing devices in reports.
  Add pv_mda_size to pvs and vg_mda_size to vgs.
  Fix lvmdump /sys listing to include virtual devices directory.
  Add "--refresh" functionality to vgchange and vgmknodes.
  Avoid exceeding LV size when wiping device.
  Calculate mirror log size instead of using 1 extent.
  Ensure requested device number is available before activating with it.
  Fix incorrect exit status from 'help <command>'.
  Fix vgrename using UUID if there are VGs with identical names.
  Fix segfault when invalid field given in reporting commands.
  Move is_static from cmd to global is_static().
  Refactor init_lvm() for lvmcmdline and clvmd.
  Add liblvm interactive test infrastructure to build.
  Add skeleton lvm2.h file in preparation for a shared library interface.
  Use better random seed value in temp file creation.
  Add read_urandom to read /dev/urandom. Use in uuid calculation.
  Use displayable_lvs_in_vg and lv_is_displayable for consistency throughout.
  Fix race in vgcreate that would result in second caller overwriting first.
  Fix uninitialised lv_count in vgdisplay -c.
  Don't skip updating pvid hash when lvmcache_info struct got swapped.
  Add tinfo to termcap search path for pld-linux.
  Fix startup race in clvmd.
  Generate Red Hat clvmd startup script at config time with correct paths.
  Fix clvmd & dmeventd builds after tree restructuring.
  Cope with snapshot dependencies when removing a whole VG with lvremove.
  Make man pages and tool help text consistent using | for alternative options.

Version 2.02.43 - 10th November 2008
====================================
  Merge device-mapper into the lvm2 tree.
  Correct prototype for --permission on lvchange and lvcreate man pages.
  Exit with non-zero status from vgdisplay if couldn't show any requested VG.
  Move list.c into libdevmapper and rename functions.
  Rename a couple of variables that matched function names.
  Use simplified x.y.z version number in libdevmapper.pc.
  Remove ancient debian directory.
  Split out lvm-logging.h from log.h and lvm-globals.[ch] from log.[ch].

Version 2.02.42 - 26th October 2008
===================================
  Accept locking fallback_to_* options in the global section as documented.
  Fix temp table activation in mirror conversions not to happen in other cmds.
  Fix temp table in mirror conversions to use always-present error not zero.

Version 2.02.41 - 17th October 2008
===================================
  Use temp table to set device size when converting mirrors.
  In resume_mirror_images replace activate_lv with resume_lv as workaround.
  Avoid overwriting in-use on-disk text metadata by forgetting MDA_HEADER_SIZE.
  Fix snapshot monitoring library to not cancel monitoring invalid snapshot.
  Generate man pages from templates and include version.
  Add usrlibdir and usrsbindir to configure.
  Fix conversion of md chunk size into sectors.
  Free text metadata buffer after a failure writing it.
  Fix misleading error message when there are no allocatable extents in VG.
  Fix handling of PVs which reappeared with old metadata version.
  Fix mirror DSO to call vgreduce with proper parameters.
  Fix validation of --minor and --major in lvcreate to require -My always.
  Fix release: clvmd build, vgreduce consolidate & tests, /dev/ioerror warning.

Version 2.02.40 - 19th September 2008
=====================================
  Allow lvremove to remove LVs from VGs with missing PVs.
  In VG with PVs missing, by default allow activation of LVs that are complete.
  Track PARTIAL_LV and MISSING_PV flags internally.
  Require --force with --removemissing in vgreduce to remove partial LVs.
  No longer write out PARTIAL flag into metadata backups.
  Treat new default activation/missing_stripe_filler "error" as an error target.
  Remove internal partial_mode.
  Add devices/md_chunk_alignment to lvm.conf.
  Pass struct physical_volume to pe_align and adjust for md chunk size.
  Store sysfs location in struct cmd_context.
  Avoid shuffling remaining mirror images when removing one, retaining primary.
  Add missing LV error target activation in _remove_mirror_images.
  Prevent resizing an LV while lvconvert is using it.
  Avoid repeatedly wiping cache while VG_GLOBAL is held in vgscan & pvscan.
  Fix pvresize to not allow resize if PV has two metadata areas.
  Fix setting of volume limit count if converting to lvm1 format.
  Fix vgconvert logical volume id metadata validation.
  Fix lvmdump metadata gather option (-m) to work correctly.
  Fix allocation bug in text metadata format write error path.
  Fix vgcfgbackup to properly check filename if template is used.
  configure aborts if lcov or genhtml are missing with --enable-profiling
  vgremove tries to remove lv snapshot first.
  Added function lv_remove_with_dependencies().
  Improve file descriptor leak detection to display likely culprit and filename.
  Change clustered mirror kernel module name from cmirror to dm-log-clustered.
  Avoid looping forever in _pv_analyze_mda_raw used by pvck.
  Change lvchange exit status to indicate if any part of the operation failed.
  Fix pvchange and pvremove to handle PVs without mdas.
  Refactor _text_pv_read and always return mda list if requested.
  Fix configure to work w/o readline unless --enable-readline used. (2.02.39)
  Remove is_lvm_partition template which has not yet been coded.
  Refactor pvcreate to separate parameter parsing from validation logic.
  Check for label_write() failure in _text_pv_write().
  Add pvcreate tests and update vgsplit tests to handle lvm1 and lvm2 metadata.
  Fix pvchange -M1 -u to preserve existing extent locations when there's a VG.
  Cease recognising snapshot-in-use percentages returned by early devt kernels.
  Add backward-compatible flags field to on-disk format_text metadata.
  Fix dmeventd monitoring libraries to link against liblvm2cmd again. (2.02.39)

Version 2.02.39 - 27th June 2008
================================
  Enable readline by default if available.
  Update autoconf to 2008-01-16.
  Add $DISTCLEAN_DIRS to make.tmpl.in.
  Create coverage reports with --enable-profiling and make lcov or lcov-dated.
  Fix up cache for PVs without mdas after consistent VG metadata is processed.
  Update validation of safe mirror log type conversions in lvconvert.
  Fix lvconvert to disallow snapshot and mirror combinations.
  Fix reporting of LV fields alongside unallocated PV segments.
  Add --unquoted and --rows to reporting tools.
  Add and use uninitialized_var() macro to suppress invalid compiler warnings.
  Introduce enum for md minor sb version to suppress compiler warning.
  Avoid undefined return value after _memlock manipulation in lvm2_run.
  Avoid link failure if configured without --enable-cmdlib or --enable-readline.
  Make clvmd return at once if other nodes down in a gulm or openais cluster.
  Fix and improve readahead 'auto' calculation for stripe_size.
  Fix lvchange output for -r auto setting if auto is already set.
  Add test case for readahead.
  Avoid ambiguous use of identifier error_message_produced.
  Begin syncing configure.in for merge/unification with device-mapper.
  Fix add_mirror_images not to dereference uninitialized log_lv upon failure.
  Don't call openlog for every debug line output by clvmd.
  Add --force to lvextend and lvresize.
  Fix vgchange not to activate component mirror volumes directly.
  Fix test directory clean up in make distclean.

Version 2.02.38 - 11th June 2008
================================
  Fix tracking of validity of PVs with no mdas in lvmcache.
  Fix return values for reporting commands when run with no PVs, LVs, or VGs.
  Add omitted unlock_vg() call when sigint_caught() during vg processing.
  Fix free_count when reading pool metadata.
  Fix segfault when using pvcreate on a device containing pool metadata.
  Fix segfault after _free_vginfo by remembering to remove vginfo from list.
  Tweak detection of invalid fid after changes to PVs in VG in _vg_read.
  Revert assuming precommitted metadata is live when activating (unnecessary).
  Drop cached metadata for disappearing VG in vgmerge.
  In script-processing mode, stop if any command fails.
  Warn if command exits with non-zero status code without a prior log_error.
  Check lv_count in vg_validate.
  Add --nameprefixes to reporting tools for field name prefix output format.

Version 2.02.37 - 6th June 2008
===============================
  Make clvmd-cman use a hash rather than an array for node updown info.
  Correct config file line numbers in messages when parsing comments.
  Drop cached metadata when renaming a VG.
  Allow for vginfo changing during _vg_read.
  Decode numbers in clvmd debugging output.
  Add missing deactivation after activation failure in lvcreate -Zy.
  When activating, if precommitted metadata is still cached, assume it's live.
  When removing LV symlinks, skip any where the VG name is not determined.
  Drop metadata cache if update fails in vg_revert or vg_commit.
  Avoid spurious duplicate VG messages referring to VGs that are gone.
  Drop dev_name_confirmed error message to debug level.
  Fix setpriority error message to signed int.
  Temporarily disable dmeventd mirror monitoring during lvchange --resync.
  Refactor some vginfo manipulation code.
  Add assertions to trap deprecated P_ and V_ lock usage.
  Add missing mutex around clvmd lvmcache_drop_metadata library call.
  Fix uninitialised mutex in clvmd if all daemons are not running at startup.
  Avoid using DLM locks with LCK_CACHE type P_ lock requests.
  When asked to drop cached committed VG metadata, invalidate cached PV labels.
  Drop metadata cache before writing precommitted metadata instead of after.
  Don't touch /dev in vgrename if activation is disabled.

Version 2.02.36 - 29th April 2008
=================================
  Fix fsadm.sh to work with older blockdev, blkid & readlink binaries.
  Fix lvresize to pass new size to fsadm when extending device.
  Remove unused struct in clvmd-openais, and use correct node count.
  Fix nodes list in clvmd-openais, and allow for broadcast messages.
  Exclude VG_GLOBAL from internal concurrent VG lock counter.
  Fix vgsplit internal counting of snapshot LVs.
  Fix vgmerge snapshot_count when source VG contains snapshots.
  Simplify clvmd-openais by using non-async saLckResourceLock.
  Fix internal LV counter when a snapshot is removed.
  Fix metadata corruption writing lvm1-formatted metadata with snapshots.
  Fix lvconvert -m0 allocatable space check.

Version 2.02.35 - 15th April 2008
=================================
  Drop cached VG metadata before and after committing changes to it.
  Rename P_global to P_#global.
  Don't attempt remote metadata backups of non-clustered VGs. (2.02.29)
  Don't store fid in VG metadata cache to avoid clvmd segfault. (2.02.34)
  Update vgsplit tests to verify loosening of active LV restriction.
  Update vgsplit to only restrict split with active LVs involved in split.
  Add lv_is_active() to determine whether an lv is active.

Version 2.02.34 - 10th April 2008
=================================
  Improve preferred_names lvm.conf example.
  Fix vgdisplay 'Cur LV' field to match lvdisplay output.
  Fix lv_count report field to exclude hidden LVs.
  Add vg_is_clustered() helper function.
  Fix vgsplit to only move hidden 'snapshotN' LVs when necessary.
  Update vgsplit tests for lvnames on the cmdline.
  Update vgsplit man page to reflect lvnames on the cmdline.
  Update vgsplit to take "-n LogicalVolumeName" on the cmdline.
  Use clustered mirror log with pvmove in clustered VGs, if available.
  Fix some pvmove error status codes.
  Fix vgsplit error paths to release vg_to lock.
  Indicate whether or not VG is clustered in vgcreate log message.
  Mention default --clustered setting in vgcreate man page.
  Add config file overrides to clvmd when it reads the active LVs list.
  Fix vgreduce to use vg_split_mdas to check sufficient mdas remain.
  Add (empty) orphan VGs to lvmcache during initialisation.
  Fix orphan VG name used for format_pool.
  Create a fid for internal orphan VGs.
  Update lvmcache VG lock state for all locking types now.
  Fix output if overriding command_names on cmdline.
  Add detection of clustered mirror log capability.
  Add check to vg_commit() ensuring VG lock held before writing new VG metadata.
  Add validation of LV name to pvmove -n.
  Make clvmd refresh the context correctly when lvm.conf is updated.
  Add some basic internal VG lock validation.
  Add per-command flags to control which commands use the VG metadata cache.
  Fix vgsplit locking of new VG (2.02.30).
  Avoid erroneous vgsplit error message for new VG. (2.02.29)
  Suppress duplicate message when lvresize fails because of invalid vgname.
  Cache VG metadata internally while VG lock is held.
  Fix redundant lvresize message if vg doesn't exist.
  Fix another allocation bug with clvmd and large node IDs.
  Add find_lv_in_lv_list() and find_pv_in_pv_list().
  Fix uninitialised variable in clvmd that could cause odd hangs.
  Add vgmerge tests.
  Add pvseg_is_allocated() for identifying a PV segment allocated to a LV.
  Add list_move() for moving elements from one list to another.
  Add 'is_reserved_lvname()' for identifying hidden LVs.
  Correct command name in lvmdiskscan man page.
  clvmd no longer crashes if it sees nodeids over 50.
  Fix potential deadlock in clvmd thread handling.
  Refactor text format initialisation into _init_text_import.
  Escape double quotes and backslashes in external metadata and config data.
  Add functions for escaping double quotes in strings.
  Rename count_chars_len to count_chars.
  Use return_0 in a couple more places.
  Correct a function name typo in _line_append error message.
  Include limits.h in clvmd so it compiles with newer headers.
  Add VirtIO disks (virtblk) to filters.
  Fix resetting of MIRROR_IMAGE and VISIBLE_LV after removal of LV. (2.02.30)
  Fix remove_layer_from_lv to empty the LV before removing it. (2.02.30)
  Add missing no-longer-used segs_using_this_lv test to check_lv_segments.
  Remove redundant non-NULL tests before calling free in clvmd.c.
  Avoid a compiler warning: make is_orphan's parameter const.
  Fix lvconvert detection of mirror conversion in progress. (2.02.30)
  Avoid automatic lvconvert polldaemon invocation when -R specified. (2.02.30)
  Fix 'pvs -a' to detect VGs of PVs without metadata areas.
  Divide up internal orphan volume group by format type.
  Update usage message for clvmd.
  Fix clvmd man page not to print <br> and clarified debug options.
  Fix lvresize to support /dev/mapper prefix in the LV name.
  Fix unfilled parameter passed to fsadm from lvresize.
  Update fsadm to call lvresize if the partition size differs (with option -l).
  Fix fsadm to support VG/LV names.

Version 2.02.33 - 31st January 2008
===================================
  Fix mirror log name construction during lvconvert. (2.02.30)
  Make monitor_dev_for_events recurse through the stack of LVs.
  Clean up some more compiler warnings.
  Some whitespace tidy-ups.
  Use stack return macros throughout.
  Rely upon internally-cached PV labels while corresponding VG lock is held.

Version 2.02.32 - 29th January 2008
===================================
  Fix two check_lv_segments error messages to show whole segment.
  Refactor mirror log attachment code.
  Fix internal metadata corruption in lvchange --resync. (2.02.30)
  Fix new parameter validation in vgsplit and test mode. (2.02.30)
  Remove redundant cnxman-socket.h file from clvmd directory.
  Fix pvs, vgs, lvs error exit status on some error paths.

Version 2.02.31 - 19th January 2008
===================================
  Fix lvcreate --nosync not to wait for non-happening sync. (2.02.30)
  Add very_verbose lvconvert messages.
  Avoid readahead error message with default setting of lvcreate -M1. (2.02.29)

Version 2.02.30 - 17th January 2008
===================================
  Set default readahead to twice maximium stripe size.
  Reinstate VG extent size and stripe size defaults (halved). (2.02.29)
  Add lists of stacked LV segments using each LV to the internal metadata.
  Change vgsplit -l (for unimplemented --list) into --maxlogicalvolumes.
  Fix process_all_pvs to detect non-orphans with no MDAs correctly.
  Don't use block_on_error with mirror targets version 1.12 and above.
  Update vgsplit to accept vgcreate options when new VG is destination.
  Update vgsplit to accept existing VG as destination.
  lvconvert waits for completion of initial sync by default.
  Refactor vgcreate for parameter validation and add tests.
  Add new convert_lv field to lvs output.
  Print warning when lvm tools are running as non-root.
  Add snapshot dmeventd library (enables dmeventd snapshot monitoring).
  Prevent pvcreate from overwriting MDA-less PVs belonging to active VGs.
  Fix a segfault if using pvs with --all argument. (2.02.29)
  Update --uuid argument description in man pages.
  Fix vgreduce PV list processing not to process every PV in the VG. (2.02.29)
  Extend lvconvert to use polldaemon.
  Add support for stacked mirrors.
  Major restructuring of pvmove and lvconvert layer manipulation code.
  Replace tools/fsadm with scripts/fsadm.sh.
  Append fields to report/pvsegs_cols_verbose.
  Permit LV segment fields with PV segment reports.
  Add seg_start_pe and seg_pe_ranges to reports.

Version 2.02.29 - 5th December 2007
===================================
  Make clvmd backup vg metadata on remote nodes.
  Refactor pvmove allocation code.
  Decode cluster locking state in log message.
  Change file locking state messages from debug to very verbose.
  Fix --addtag to drop @ prefix from name.
  Stop clvmd going haywire if a pre_function fails.
  Convert some vg_reads into vg_lock_and_reads.
  Avoid nested vg_reads when processing PVs in VGs and fix associated locking.
  Accept sizes with --readahead argument.
  Store size arguments as sectors internally.
  Attempt to remove incomplete LVs with lvcreate zeroing/activation problems.
  Add read_ahead activation code.
  Add activation/readahead configuration option and FMT_RESTRICTED_READAHEAD.
  Extend readahead arg to accept "auto" and "none".
  Add lv_read_ahead and lv_kernel_read_ahead fields to reports and lvdisplay.
  Prevent lvconvert -s from using same LV as origin and snapshot.
  Fix human-readable output of odd numbers of sectors.
  Add pv_mda_free and vg_mda_free fields to reports for raw text format.
  Add LVM2 version to 'Generated by' comment in metadata.
  Show 'not usable' space when PV is too large for device in pvdisplay.
  Ignore and fix up any excessive device size found in metadata.
  Fix error message when fixing up PV size in lvm2 metadata (2.02.11).
  Fix orphan-related locking in pvdisplay and pvs.
  Fix missing VG unlocks in some pvchange error paths.
  Add some missing validation of VG names.
  Rename validate_vg_name() to validate_new_vg_name().
  Change orphan lock to VG_ORPHANS.
  Change format1 to use ORPHAN as orphan VG name.
  Convert pvchange, pvdisplay, pvscan to use is_orphan()
  Add is_orphan_vg() and change all hard-coded checks to use it.
  Detect md superblocks version 1.0, 1.1 and 1.2.
  Add _alloc_pv() and _free_pv() from _pv_create() code and fix error paths.
  Add pv_dev_name() to access PV device name.
  Add const attributes to pv accessor functions.
  Refactor vg_add_snapshot() and lv_create_empty().
  Handle new sysfs subsystem/block/devices directory structure.
  Run test with LVM_SYSTEM_DIR pointing to private root and /dev dirs.
  Fix a bug in lvm_dump.sh checks for lvm/dmsetup binaries.
  Fix underquotations in lvm_dump.sh.
  Refactor lvcreate stripe and mirror parameter validation.
  Print --help output to stdout, not stderr.
  After a cmdline processing error, don't print help text but suggest --help.
  Add %PVS extents option to lvresize, lvextend, and lvcreate.
  Add 'make check' to run tests in new subdirectory 'test'.
  Moved the obsolete test subdirectory to old-tests.
  Cope with relative paths in configure --with-dmdir.
  Remove no-longer-correct restrictions on PV arg count with stripes/mirrors.
  Fix strdup memory leak in str_list_dup().
  Link with -lpthread when static SELinux libraries require that.
  Detect command line PE values that exceed their 32-bit range.
  Include strerror string in dev_open_flags' stat failure message.
  Move guts of pvresize into library.
  Avoid error when --corelog is provided without --mirrorlog. (2.02.28)
  Correct --mirrorlog argument name in man pages (not --log).
  Clear MIRROR_NOTSYNCED LV flag when converting from mirror to linear.
  Modify lvremove to prompt for removal if LV active on other cluster nodes.
  Add '-f' to vgremove to force removal of VG even if LVs exist.

Version 2.02.28 - 24th August 2007
==================================
  Fix clvmd logging so you can get lvm-level debugging out of it.
  Introduce VG_GLOBAL lock type for vgscan/pvscan to trigger clvmd -R.
  Change locking_flags from int to uint32_t.
  Fix clvmd -R, so it fully refreshes the caches.
  Change lvconvert_mirrors to use mirror segtype not striped.
  Fix lvconvert_mirrors detection of number of existing mirrors.
  Clean up numerous compiler warnings that appeared in recent releases.
  Remove several unused parameters from _allocate().
  Only permit --force, --verbose and --debug arguments to be repeated.
  Fix inconsistent licence notices: executables are GPLv2; libraries LGPLv2.1.
  Move guts of vgremove and lvremove into library, including yes_no_prompt.
  Allow clvmd debug to be turned on in a running daemon using clvmd -d [-C].
  Update to use autoconf 2.61, while still supporting 2.57.
  Add more cluster info to lvmdump.
  Add further const attributes throughout.
  Add support for renaming mirrored LVs.
  Factor out core of lvrename() to library function.
  Add --mirrorlog argument to specify log type for mirrors.
  Don't attempt to monitor devices if their creation failed in _lv_activate.
  Don't leak a file descriptor in fcntl_lock_file() when fcntl fails.
  Replace create_dir with dm_create_dir.
  Detect stream write failure reliably with lvm_fclose using dm_fclose.
  Fix clvmd if compiled with gulm support. (2.02.26)
  Fix lvdisplay man page to say LV size is reported in sectors, not KB.
  Add vg_lock_and_read() external library function.
  Fix loading of persistent cache if cache_dir is used. (2.02.23)
  Reduce _compare_paths lstat error message from log_error to log_very_verbose.
  Create util.h with last_path_component replacing strdup + basename.
  Use gcc's printf attribute wherever possible.
  In _line_append, use "sizeof buf - 1" rather than equivalent "4095".
  Introduce is_same_inode macro, now including a comparison of st_dev.
  Don't leak a file descriptor in _lock_file() when flock fails.
  Add SUN's LDOM virtual block device (vdisk) and ps3disk to filters.
  Split metadata-external.h out from metadata.h for the tools to use.

Version 2.02.27 - 17th July 2007
================================
  Fix snapshot cow area deactivation if origin is not active. (2.02.13)
  Fix configure libdevmapper.h check when --with-dmdir is used.
  Turn _add_pv_to_vg() into external library function add_pv_to_vg().
  Add pv_by_path() external library function.
  Tidy clvmd-openais of redundant bits, and improve an error report.
  Cope with find_seg_by_le() failure in check_lv_segments().
  Call dev_iter_destroy() if _process_all_devs() is interrupted by sigint.
  Add vg_mda_count and pv_mda_count columns to reports.
  Fix dumpconfig to use log_print instead of stdout directly.
  Remove unused parameter 'fid' from _add_pv_to_vg.
  Add kernel and device-mapper targets versions to lvmdump.
  Replace BSD (r)index with C89 str(r)chr.
  Handle vgsplit of an entire VG as a vgrename.
  Reinitialise internal lvmdiskscan variables when called repeatedly.
  Fix missing lvm_shell symbol in lvm2cmd library. (2.02.23)
  Add vg_status function and clean up vg->status in tools directory.
  Add --ignoremonitoring to disable all dmeventd interaction.
  Remove get_ prefix from get_pv_* functions.
  clvmd-openais now uses cpg_local_get() to get nodeid, rather than Clm.
  Print warnings to stderr instead of stdout.

Version 2.02.26 - 15th June 2007
================================
  Update vgcfgrestore man page.
  Allow keyboard interrupt during user prompts when appropriate.
  Remove unused clvmd system-lv code.
  Replace many physical_volume struct dereferences with new get_pv_* functions.
  Suppress a benign compile-time warning.
  Convert find_pv_in_vg_by_uuid and pv_create to use PV handles.
  Add wrappers to some functions in preparation for external LVM library.
  Add -f to vgcfgrestore to list metadata backup files.
  Add vg_check_status to consolidate vg status checks and error messages.
  Add pvdisplay --maps implementation.
  Remove unsupported LVM1 options from vgcfgrestore man page.
  Update vgcfgrestore man page to show mandatory VG name.
  Update vgrename man page to include UUID and be consistent with lvrename.
  Add (experimental) OpenAIS support to clvmd.
  Fix deactivation code to follow dependencies and remove symlinks.
  Fix and clarify vgsplit error messages.
  Fix a segfault in device_is_usable() if a device has no table.
  Add some more debug messages to clvmd startup.
  Misc clvmd cleanups.

Version 2.02.25 - 27th April 2007
=================================
  Fix get_config_uint64() to read a 64-bit value not a 32-bit one.
  Add -Wformat-security and change one fprintf() to fputs().
  Move regex functions into libdevmapper.
  Change some #include lines to search only standard system directories.
  Add devices/preferred_names config regex list for displayed device names.
  Free a temporary dir string in fcntl_lock_file() after use.
  Fix a dm_pool_destroy() in matcher_create().
  Introduce goto_bad macro.
  Fix warnings on x86_64 involving ptrdiff_t in log_error messages.
  Update pvck to include text metadata area and record detection.
  Add support functions for token counting in config file extracts.
  Update pvck to read labels on disk, with --labelsector parameter.
  Add count_chars and count_chars_len functions.
  Add /sys/block listings to lvm_dump.sh.
  Make lvm_dump.sh list /dev recursively.
  Fix thread race in clvmd.
  Add scan_sector param to label_read and _find_labeller.
  Make clvmd cope with quorum devices.
  Add extra internal error checking to clvmd.
  Add dev_read_circular.
  Add pvck command stub.
  Update lists of attribute characters in man pages.
  Change cling alloc policy attribute character from 'C' to l'.
  Fix creation and conversion of mirrors with tags.
  Fix vgsplit for lvm1 format (set and validate VG name in PVs metadata).
  Split metadata areas in vgsplit properly.

Version 2.02.24 - 19th March 2007
=================================
  Fix processing of exit status in init scripts
  Fix vgremove to require at least one vg argument.
  Fix reading of striped LVs in LVM1 format.
  Flag nolocking as clustered so clvmd startup sees clustered LVs. (2.02.10)
  Add a few missing pieces of vgname command line validation.
  Support the /dev/mapper prefix on most command lines.

Version 2.02.23 - 8th March 2007
================================
  Fix vgrename active LV check to ignore differing vgids.
  Remove no-longer-used uuid_out parameter from activation info functions.
  Fix two more segfaults if an empty config file section encountered.
  Move .cache file into a new /etc/lvm/cache directory by default.
  Add devices/cache_dir & devices/cache_file_prefix, deprecating devices/cache.
  Create directory in fcntl_lock_file() if required.
  Exclude readline support from lvm.static.
  Fix a leak in a reporting error path (2.02.19).

Version 2.02.22 - 13th February 2007
====================================
  Correct -b and -P on a couple of man pages.
  Add global/units to example.conf.
  Fix loading of segment_libraries.
  If a PV reappears after it was removed from its VG, make it an orphan.
  Don't update metadata automatically if VGIDs don't match.
  Fix some vgreduce --removemissing command line validation.

Version 2.02.21 - 30th January 2007
===================================
  Add warning to lvm2_monitoring_init_rhel4 if attempting to stop monitoring.
  Fix vgsplit to handle mirrors.
  Reorder fields in reporting field definitions.
  Fix vgs to treat args as VGs even when PV fields are displayed.
  Fix md signature check to handle both endiannesses.

Version 2.02.20 - 25th January 2007
===================================
  dmeventd mirror sets ignore_suspended_devices and avoids scanning mirrors.
  Add devices/ignore_suspended_devices to ignore suspended dm devices.
  Add some missing close() and fclose() return code checks.
  Fix exit statuses of reporting tools (2.02.19).
  Add init script for dmeventd monitoring.
  lvm.static no longer interacts with dmeventd unless explicitly asked to.
  Add field definitions to report help text.
  Remove unnecessary cmd arg from target_*monitor_events().
  Add private variable to dmeventd shared library interface.
  Long-lived processes write out persistent dev cache in refresh_toolcontext().
  Fix refresh_toolcontext() always to wipe persistent device filter cache.
  Add is_long_lived to toolcontext.
  Add --clustered to man pages.
  Streamline dm_report_field_* interface.
  Change remaining dmeventd terminology 'register' to 'monitor'.
  Update reporting man pages.
  No longer necessary to specify alignment type for report fields.

Version 2.02.19 - 17th January 2007
===================================
  Fix a segfault if an empty config file section encountered.
  Move basic reporting functions into libdevmapper.
  Fix partition table processing after sparc changes (2.02.16).
  Fix cmdline PE range processing segfault (2.02.13).
  Some libdevmapper-event interface changes.
  Report dmeventd mirror monitoring status.
  Fix dmeventd mirror status line processing.

Version 2.02.18 - 11th January 2007
===================================
  Revised libdevmapper-event interface for dmeventd.
  Remove dmeventd mirror status line word limit.
  Use CFLAGS when linking so mixed sparc builds can supply -m64.
  Prevent permission changes on active mirrors.
  Print warning instead of error message if lvconvert cannot zero volume.
  Add snapshot options to lvconvert man page.
  dumpconfig accepts a list of configuration variables to display.
  Change dumpconfig to use --file to redirect output to a file.
  Avoid vgreduce error when mirror code removes the log LV.
  Remove 3 redundant AC_MSG_RESULTs from configure.in.
  Free memory in _raw_read_mda_header() error paths.
  Fix ambiguous vgsplit error message for split LV.
  Fix lvextend man page typo.
  Add configure --with-dmdir to compile against a device-mapper source tree.
  Use no flush suspending for mirrors.
  Add dmeventd_mirror register_mutex, tidy initialisation & add memlock.
  Fix create mirror with name longer than 22 chars.
  Fix some activate.c prototypes when compiled without devmapper.
  Fix dmeventd mirror to cope if monitored device disappears.

Version 2.02.17 - 14th December 2006
====================================
  Add missing pvremove error message when device doesn't exist.
  When lvconvert allocates a mirror log, respect parallel area constraints.
  Use loop to iterate through the now-ordered policy list in _allocate().
  Check for failure to allocate just the mirror log.
  Introduce calc_area_multiple().
  Support mirror log allocation when there is only one PV: area_count now 0.
  Fix detection of smallest area in _alloc_parallel_area() for cling policy.
  Add manpage entry for clvmd -T
  Fix gulm operation of clvmd, including a hang when doing lvchange -aey
  Fix hang in clvmd if a pre-command failed.

Version 2.02.16 - 1st December 2006
===================================
  Fix VG clustered read locks to use PR not CR.
  Adjust some alignments for ia64/sparc.
  Fix mirror segment removal to use temporary error segment.
  Always compile debug logging into clvmd.
  Add startup timeout to RHEL4 clvmd startup script.
  Add -T (startup timeout) switch to clvmd.
  Improve lvm_dump.sh robustness.
  Update lvm2create_initrd to support gentoo.

Version 2.02.15 - 21st November 2006
====================================
  Fix clvmd_init_rhel4 line truncation (2.02.14).
  Install lvmdump by default.
  Fix check for snapshot module when activating snapshot.
  Fix pvremove error path for case when PV is in use.
  Warn if certain duplicate config file entries are seen.
  Enhance lvm_dump.sh for sysreport integration and add man page.
  Fix --autobackup argument which could never disable backups.
  Fix a label_verify error path.

Version 2.02.14 - 10th November 2006
====================================
  Fix adjusted_mirror_region_size() to handle 64-bit size.
  Add some missing bounds checks on 32-bit extent counters.
  Add Petabyte and Exabyte support.
  Fix lvcreate error message when 0 extents requested.
  lvremove man page: volumes must be cluster inactive before being removed.
  Protect .cache manipulations with fcntl locking.
  Change .cache timestamp comparisons to use ctime.
  Fix mirror log LV writing to set all bits in whole LV.
  Fix clustered VG detection and default runlevels in clvmd_init_rhel4.
  Fix high-level free space check for partial allocations.

Version 2.02.13 - 27th October 2006
===================================
  Add couple of missing files to tools/Makefile CLEAN_TARGETS.
  When adding snapshot leave cow LV mapped device active after zeroing.
  Fix a clvmd debug message.
  Add dev_flush() to set_lv().
  Add lvchange --resync.
  Perform high-level free space check before each allocation attempt.
  Don't allow a node to remove an LV that's exclusively active on anther node.
  Cope if same PV is included more than once in cmdline PE range list.
  Set PV size to current device size if it is found to be zero.
  Add segment parameter to target_present functions.

Version 2.02.12 - 16th October 2006
===================================
  Fix pvdisplay to use vg_read() for non-orphans.
  Fall back to internal locking if external locking lib is missing or fails.
  Retain activation state after changing LV minor number with --force.
  Propagate clustered flag in vgsplit and require resizeable flag.

Version 2.02.11 - 12th October 2006
===================================
  Add clvmd function to return the cluster name. not used by LVM yet.
  Add cling allocation policy.
  Change _check_contiguous() to use _for_each_pv().
  Extend _for_each_pv() to allow termination without error.
  Abstract _is_contiguous().
  Remove duplicated pv arg from _check_contiguous().
  Accept regionsize with lvconvert.
  Add report columns with underscore before field names ending 'size'.
  Correct regionsize default on lvcreate man page (MB).
  Fix clvmd bug that could cause it to die when a node with a long name crashed.
  Add device size to text metadata.
  Fix format_text mda_setup pv->size and pv_setup pe_count calculations.
  Fix _for_each_pv() for mirror with core log.
  Add lvm_dump.sh script to create a tarball of debugging info from a system.
  Capture error messages in clvmd and pass them back to the user.
  Remove unused #defines from filter-md.c.
  Make clvmd restart init script wait until clvmd has died before starting it.
  Add -R to clvmd which tells running clvmds to reload their device cache.
  Add LV column to reports listing kernel modules needed for activation.
  Show available fields if report given invalid field. (e.g. lvs -o list)
  Add timestamp functions with --disable-realtime configure option.
  Add %VG, %LV and %FREE suffices to lvcreate/lvresize --extents arg.
  Fix two potential NULL pointer derefs in error cases in vg_read().
  Separate --enable-cluster from locking lib options in lvmconf.sh.
  Add a missing comma in lvcreate man page.

Version 2.02.10 - 19th September 2006
=====================================
  Fix lvconvert mirror change case detection logic.
  Fix mirror log detachment so it correctly becomes a standalone LV.
  Extend _check_contiguous() to detect single-area LVs.
  Include mirror log (untested) in _for_each_pv() processing.
  Use MIRROR_LOG_SIZE constant.
  Remove struct seg_pvs from _for_each_pv() to generalise.
  Avoid adding duplicates to list of parallel PVs to avoid.
  Fix several incorrect comparisons in parallel area avoidance code.
  Fix segment lengths when flattening existing parallel areas.
  Log existing parallel areas prior to allocation.
  Fix mirror log creation when activation disabled.
  Don't attempt automatic recovery without proper locking.
  When using local file locking, skip clustered VGs.
  Add fallback_to_clustered_locking and fallback_to_local_locking parameters.
  lvm.static uses built-in cluster locking instead of external locking.
  Don't attempt to load shared libraries if built statically.
  Change default locking_lib to liblvm2clusterlock.so.
  Add skip_dev_dir() to process command line VGs.
  Stop clvmd complaining about nodes that have left the cluster.
  Move lvm_snprintf(), split_words() and split_dm_name() into libdevmapper.
  Add lvconvert man page.
  Add mirror options to man pages.
  Prevent mirror renames.
  Move CMDLIB code into separate file and record whether static build.

Version 2.02.09 - 17th August 2006
==================================
  Fix PE_ALIGN for pagesize over 32KB.
  Separate out LVM1_PE_ALIGN and pe_align().
  Add lvm_getpagesize wrapper.
  Add --maxphysicalvolumes to vgchange.

Version 2.02.08 - 15th August 2006
==================================
  Add checks for duplicate LV name, lvid and PV id before writing metadata.
  Report all sanity check failures, not just the first.
  Fix missing lockfs on first snapshot creation.
  Add unreliable --trustcache option to reporting commands.
  Fix locking for mimage removal.
  Fix clvmd_init_rhel4 'status' exit code.

Version 2.02.07 - 17th July 2006
================================
  Fix activation logic in lvchange --persistent.
  Don't ignore persistent minor numbers when activating.
  Use RTLD_GLOBAL when loading shared libraries.
  Add some forgotten memlock checks to _vg_read to protect against full scans.
  Add mutex to dmeventd_mirror to avoid concurrent execution.
  Fix vgreduce --removemissing to return success if VG is already consistent.
  Fix return code if VG specified on command line is not found.
  Fix PV tools to include orphaned PVs in default output again.
  Fixed unaligned access when using clvm.
  Fix an extra dev_close in a label_read error path.
  Append patches to commit emails.
  Fix target_register_events args.
  Prevent snapshots of mirrors.
  Add DISTCLEAN_TARGETS to make template for configure.h.
  More fixes to error paths.
  Fix lvcreate corelog validation.
  Add --config for overriding most config file settings from cmdline.
  Quote arguments when printing command line.
  Remove linefeed from 'initialising logging' message.
  Add 'Completed' debug message.
  Don't attempt library exit after reloading config files.
  Always compile with libdevmapper, even if device-mapper is disabled.

Version 2.02.06 - 12th May 2006
===============================
  Propagate --monitor around cluster.
  Add --monitor to vgcreate and lvcreate to control dmeventd registration.
  Filter LCK_NONBLOCK in clvmd lock_vg.
  Add --nosync to lvcreate with LV flag NOTSYNCED.
  Use mirror's uuid for a core log.
  Add mirror log fault-handling policy.
  Improve mirror warning messages and tidy dmeventd syslog output.
  Propagate nosync flag around cluster.
  Allow vgreduce to handle mirror log failures.
  Add --corelog to lvcreate and lvconvert.
  Create a log header for replacement in-sync mirror log.
  Use set_lv() and dev_set() to wipe sections of devices.
  Add mirror_in_sync() flag to avoid unnecessary resync on activation.
  Add mirror_library description to example.conf.
  Fix uuid_from_num() buffer overrun.
  Make SIZE_SHORT the default for display_size().
  Fix some memory leaks in error paths found by coverity.
  Use C99 struct initialisers.
  Move DEFS into configure.h.
  Clean-ups to remove miscellaneous compiler warnings.
  Improve stripe size validation.
  Increase maximum stripe size limit to physical extent size for lvm2 metadata.
  Fix activation code to check for pre-existing mirror logs.
  Tighten region size validation.
  Ignore empty strings in config files.
  Require non-zero regionsize and document parameter on lvcreate man page.
  Invalidate cache if composition of VG changed externally.

Version 2.02.05 - 21st April 2006
=================================
  Fix vgid string termination in recent cache code.

Version 2.02.04 - 19th April 2006
=================================
  Check for libsepol.
  Add some cflow & scope support.
  Separate out DEFS from CFLAGS.
  Remove inlines and use unique function names.

Version 2.02.03 - 14th April 2006
=================================
  vgrename accepts vgid and exported VG.
  Add --partial to pvs.
  When choosing between identically-named VGs, also consider creation_host.
  Provide total log suppression with 2.
  Fix vgexport/vgimport to set/reset PV exported flag so pv_attr is correct.
  Add vgid to struct physical_volume and pass with vg_name to some functions.
  If two or more VGs are found with the same name, use one that is not exported.
  Whenever vgname is captured, also capture vgid and whether exported.
  Remove an incorrect unlock_vg() from process_each_lv().
  Update extent size information in vgchange and vgcreate man pages.
  Introduce origin_from_cow() and lv_is_visible().
  pvremove without -f now fails if there's no PV label.
  Support lvconvert -s.
  Suppress locking library load failure message if --ignorelockingfailure.
  Propagate partial mode around cluster.
  Fix archive file expiration.
  Fix dmeventd build.
  clvmd now uses libcman rather than cman ioctls.
  clvmd will allow new cman to shutdown on request.

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!
