Version 2.02.163 - 
=================================

Version 2.02.162 - 28th July 2016
=================================
  Extend vg_validate also to check raid configurations thoroughly.
  Support lvconvert -Zn also when doing full cache pool conversion.
  Suppress not zeroing warn when converting to thin LV for non-zeroing tpool.
  Fix automatic updates of PV extension headers to newest version.
  Improve lvconvert --trackchanges validation to require --splitmirrors 1.
  Add note about lastlog built-in command to lvm man page.
  Fix unrecognised segtype flag message.
  lvconvert not clears cache pool metadata ONLY with -Zn.
  Add allocation/raid_stripe_all_devices to reinstate previous behaviour.
  Create raid stripes across fixed small numbers of PVs instead of all PVs.
  Enabled lvconvert --uncache to work with partial VG.
  Disallow lvconvert --replace with raid0* LVs.
  Fix some lvmetad changed VG metadata notifications that sent uncommitted data.

Version 2.02.161 - 15th July 2016
=================================
  Prohibit some lvchange/lvresize that were failing on raid0 volumes.
  Fix segfaults in complex vgsplits. (2.02.159)
  Reformat unwieldy lvconvert man page.
  Allow --force to be passed through to pvcreate from vgcreate. (2.02.144)
  Fix lvresize of filesystem when LV has already right size (2.02.141)
  New LVM_LOG_FILE_MAX_LINES env var to limit max size of created logs.

Version 2.02.160 - 6th July 2016
================================
  Minor fixes from coverity.

Version 2.02.159 - 6th July 2016
================================
  Add raid0_meta segment type that provides metadata space for raid conversions.
  Fix created link for a used pool for vgmknode.
  Introduce and use is_power_of_2 macro.
  Support conversions between striped and raid0 segment types.
  Add infrastructure for raid takeover lvconvert options.

Version 2.02.158 - 25th June 2016
=================================
  Add a more efficient native vgimportclone command to replace the script.
  Make lvmlockd always attempt to connect to lvmetad if no connection exists.
  Let lvmetad handle new connections after shutdown signal.
  Disable lvmetad when vgcfgrestore begins and enable it again after.
  Make pvscan do activation if lvmetad is configured but not running.
  Fix rescanning the PVs for a single VG when using lvmetad.
  Pool metadata lvresize uses now same code as resize of normal volume.
  Preserve monitoring status when updating thin-pool metadata.
  Return 0 (inactive) when status cannot be queried in _lv_active().
  Switch to log_warn() for failing activation status query.
  Replace vgimportclone script with binary.
  While lvmetad is shutting down, continue handling all connections cleanly.
  Refactor lvconvert argument handling code.
  Notify lvmetad when vgcfgrestore changes VG metadata.
  Add --logonly option to report only cmd log for a command, not other reports.
  Add log/command_log_selection to configure default selection used on cmd log.
  Use 'orphan' object type in cmd log for groups to collect PVs not yet in VGs.
  Add lvm lastlog command for query and display of last cmd's log in lvm shell.
  Report per-object return codes via cmd log while processing multiple objects.
  Annotate processing code with log report hooks for per-object command log.
  Also pass common printed messages (besides warnings and errors) to log report.
  Log warnings and errors via report during cmd processing if this is enabled.
  Make it possible to iterate over internal 'orphan' VGs in process_each_vg fn.
  Make -S|--select option groupable that allows this option to be repeated.
  Make -O|--sort option groupable that allows this option to be repeated.
  Add --configreport option to select report for which next options are applied.
  Add support for priorities on grouping command arguments.
  Add report/{pvs,vgs,lvs,pvsegs,segs}_{cols,sort}_full to lvm.conf.
  Add lvm fullreport command for joined PV, VG, LV and segment report per VG.
  Integrate report group handling and cmd log report into cmd processing code.
  Add log/report_command_log to lvm.conf to enable or disable cmd log report.
  Add log/report_output_format to lvm.conf for default report output format.
  Recognize --reportformat {basic|json} option to select report output format.
  Add log/command_log_{sort,cols} to lvm.conf to configure command log report.
  Add log_object_{type,name,id,group,group_id} fields to cmd log.
  Add log_{seq_num,type,context,message,errno,ret_code} fields to cmd log.
  Add CMDLOG report type - a separate report type for command logging.

Version 2.02.157 - 17th June 2016
=================================
  Change pvscan --cache -aay to scan locally if lvmetad fails.

Version 2.02.156 - 11th June 2016
=================================
  Don't allow duplicate orphan PVs to be used with vgcreate/vgextend/pvcreate.
  Improve handling of lvmetad update failures.
  Yes/No prompt accepts '^[ ^t]*([Yy]([Ee]([Ss]|)|)|[Nn]([Oo]|))[ ^t]*$'.
  If available, also collect output from lsblk command when running lvmdump -s.

Version 2.02.155 - 3rd June 2016
================================
  Reject PV tags on pvmove cmdline because only 1 PV is supported. (2.02.141)
  Fix compilation error when building with configure --disable-devmapper.
  Fix lvmconfig --type diff to display complete diff if config cascade used.
  Automatically filter out partitioned loop devices with partscan (losetup -P).
  Fix lvm devtypes internal error if -S used with field name from pvs/vgs/lvs.
  When reporting Data%,Snap%,Meta%,Cpy%Sync use single ioctl per LV.
  Add lvseg_percent_with_info_and_seg_status() for percent retrieval.
  Enhance internal seg_status handling to understand snapshots better.
  When refresh failed in suspend, call resume upon error path.
  Support passthrough cache mode when waiting for clean cache.
  Check cache status only for 'in-use' cache pools.
  Extend setup_task() to preset flushing for dm_task object.
  When checking LV is a merging COW, validate its a COW LV first.
  Correcting value in copy_percent() for 100%.
  Update vgreduce to use process_each_vg.
  Update lvconvert to use process_each_lv.
  Update pvscan to use process_each_vg for autoactivation.
  Add basic support for --type raid0 using md.
  Add support for lvchange --cachemode for cached LV.
  Fix liblvm2app error handling when setting up context.
  Delay liblvm2app init in python code until it is needed.
  Simplify thread locking in lvmetad to fix locking problems.
  Allow pvremove -ff to remove a duplicate PV.
  Fix lvm2-activation-generator to read lvm.conf without full command setup.
  Allow a minimal context to be used in lvm2app for reading lvm.conf.

Version 2.02.154 - 14th May 2016
================================
  Fix liblvm segfault after failure initialising lvmetad connection.
  Retry open without O_NOATIME if it fails (not file owner/CAP_FOWNER).
  Split _report into one fn for options and arguments and one for processing.

Version 2.02.153 - 7th May 2016
===============================
  Change warning messages related to duplicate PVs.
  A named device is always processed itself, not switched for a duplicate.
  Add PV attr "d" and report field "duplicate" for duplicate PVs.
  Add config setting to disallow VG changes when duplicate PVs exist.
  Use device size and active LVs to choose the preferred duplicate PV.
  Disable lvmetad when duplicate PVs are seen.
  Support --chunksize option also when caching LV when possible.
  Add function to check for target presence and version via 1 ioctl.

Version 2.02.152 - 30th April 2016
==================================
  Use any inherited tags when wiping metadata sub LVs to ensure activation.
  Add str_list_wipe.
  Improve support for interrupting procesing of volumes during lvchange.
  Use failed command return code when lvchanging read-only volume.
  Show creation transaction_id and zeroing state of pool with thin volume.
  Stop checking for dm_cache_mq policy with cache target 1.9 (alias to smq).
  Check first /sys/module/dm_* dir existance before using modprobe.
  Remove mpath from 10-dm.rules, superseded by 11-dm-mpath.rules (mpath>=0.6.0).

Version 2.02.151 - 23rd April 2016
==================================
  Fix error path after reusing of _setup_task (2.02.150).
  Fix memory access for empty sysfs values (2.02.149).
  Disable lvmetad when lvm1 metadata is seen, so commands revert to scanning.
  Suppress errors when snapshot merge gets delayed because volume is in use.
  Avoid internal snapshot LV names in messages.
  Autodetect and use /run/lock dir when available instead of /var/lock.
  lvchange --refresh for merging thin origin will retry to deactivate snapshot.
  Recognize in-progress snapshot merge for thin volumes from dm table.
  Avoid deciding to initiate a pending snapshot merge during resume.
  Improve retrying lvmetad requests while lvmetad is being updated.
  Read devices instead of using the lvmetad cache if rescan fails.
  Move lvmetad token/filter check and device rescan to the start of commands.
  Don't try deactivating fictional internal LV before snapshot merge. (2.02.105)
  When not obtaining devs from udev, check they exist before caching them.
  Detect device mismatch also when compiling without udev support.

Version 2.02.150 - 9th April 2016
=================================
  Avoid using flushing dm status ioctl when checking for usable DM device.
  Check for devices without LVM- uuid prefix only with kernels < 3.X.
  Reuse %FREE size aproximation with lvcreate -l%PVS thin-pool.
  Allow the lvmdump directory to exist already provided it is empty.
  Show lvconverted percentage with 2 decimal digits.
  Fix regression in suspend when repairing --type mirror (2.02.133).

Version 2.02.149 - 1st April 2016
=================================
  Do not flush thin-pool when checking metadata fullness.
  Remove spurious error about no value in /sys/dev/block/major:minor/dm/uuid.
  Fix device mismatch detection for LV if persistent .cache file is used.
  Fix holder device not being found in /dev while sysfs has it during dev scan.

Version 2.02.148 - 26th March 2016
==================================
  Introduce TARGET_NAME and MODULE NAME macros.
  Replace hard-coded module and target names with macros.
  Add pv_major and pv_minor report fields.
  Detect and warn about mismatch between devices used and assumed for an LV.

Version 2.02.147 - 19th March 2016
==================================
  If available, use /proc/self/mountinfo to detect mounted volume in fsadm.
  Fix resize of stacked raid thin data volume (2.02.141).
  Fix test for lvremove failure in lvconvert --uncache (2.02.146).

Version 2.02.146 - 11th March 2016
==================================
  More man page cleanups in lvconvert.
  Fix makefile vpath in /udev when generating udev rules files.
  Another attempt to improve VG name parsing for lvconvert (2.02.144).
  Use new cache status info and skip flushing for failed cache.
  Support --uncache with missing PVs.
  Tidy report field names, headings and widths.
  Add vgscan --notifydbus to send a dbus notification.
  Add dbus notification from commands after a PV/VG/LV changes state.

Version 2.02.145 - 4th March 2016
=================================
  Make it possible to use lvremove and lvrename on historical LVs.
  For historical LVs, report 'none' for lv_layout and 'history' for lv_role.
  Add full_{ancestors,descendants} fields to report LV ancestry with history.
  Report (h)istorical state within 5th bit (State) of the lv_attr field.
  Add lv_historical reporting field to report if LV is historical or not.
  Add lv_time_removed reporting field to display removal time for hist. LVs.
  Report lv_name, lv_uuid, vg_name, lv_time for historical LVs.
  Add --nohistory switch to lvremove to disable history recording on demand.
  Add -H|--history switch to lvs and lvdisplay to include historical LVs.
  Create historical LVs out of removed thin snapshot LVs and record in history.
  Add metadata/lvs_history_retention_time for automatic removal of hist. LVs.
  Add metadata/record_lvs_history config for switching LV history recording.
  Add support and infrastructure for tracking historical LVs.
  Improve lvconvert man page.
  Add kernel_cache_policy lvs field.
  Display [unknown] instead of 'unknown device' in pvs output.
  Fix error path when pvcreate allocation fails (2.02.144).
  Display [unknown] instead of blank for unknown VG names in pvs output.

Version 2.02.144 - 26th February 2016
=====================================
  Use new PV processing code in pvcreate/vgcreate/vgextend/pvremove.
  Add new PV processing code that prompts user without locks held.
  Prevent lvmlockd blocking with new flag requiring sanlock 3.3.0.
  Only show (u)sed pv_attr char when PV is not (a)llocatable. (2.02.143)
  Update makefile to generate lcov output also for lvmpolld and lvmlockd.
  Fix SystemdService lvm2-lvmdbusd.service name.
  Improve support for env LVM_VG_NAME for reference VG name in lvconvert.
  Fix regression when lvresize accepted zero sizes. (2.02.141)
  Always warn user about PV in use even when pvremove uses --force --force.
  Use uninitialized pool header detection in all cases.
  Fix read error detection when checking for uninitialized thin-pool header.
  Fix error path for internal error in lvmetad VG lookup code.

Version 2.02.143 - 21st February 2016
=====================================
  Fix error path when sending thin-pool message fails in update_pool_lv().
  Support reporting CheckNeeded and Fail state for thin-pool and thin LV.
  For failing thin-pool and thin volume correctly report percentage as INVALID.
  Report -1, not 'unkown' for lv_{snapshot_invalid,merge_failed} with --binary.
  Add configure --enable-dbus-service for an LVM D-Bus service.
  Replace configure --enable-python_bindings with python2 and python3 versions.
  If PV belongs to some VG and metadata missing, skip it if system ID is used.
  Automatically change PV header extension to latest version if writing PV/VG.
  Identify used PVs in pv_attr field by new 'u' character.
  Add pv_in_use reporting field to report if PV is used or not.
  Add pv_ext_vsn reporting field to report PV header extension version.
  Add protective flag marking PVs as used even if no metadata available.

Version 2.02.142 - 15th February 2016
=====================================
  Fix memory pool corruption in pvmove (2.02.141).
  Support control of spare metadata creation when repairing thin-pool.
  Fix config type of 'log/verbose' from bool to int (2.02.99).
  Fix inverted data LV thinp watermark calc for dmeventd response (2.02.133).
  Use use_blkid_wiping=0 if not defined in lvm.conf and support not compiled in.
  Do not check for suspended devices if scanning for lvmetad update.
  Clear cached bootloader areas when PV format changed.
  Fix partn table filter with external_device_info_source="udev" and blkid<2.20.

Version 2.02.141 - 25th January 2016
====================================
  Add metadata/check_pv_device_sizes switch to lvm.conf for device size checks.
  Warn if device size is less than corresponding PV size in metadata.
  Cache device sizes internally.
  Restore support for command breaking in process_each_lv_in_vg() (2.02.118).
  Use correct mempool when process_each_lv_in_vg() (2.02.118).
  Fix lvm.8 man to show again prohibited suffixes.
  Fix configure to set proper use_blkid_wiping if autodetected as disabled.
  Initialise udev in clvmd for use in device scanning. (2.02.116)
  Add seg_le_ranges report field for common format when displaying seg devices.
  Honour report/list_item_separator for seg_metadata_le_ranges report field.
  Don't mark hidden devs in -o devices,metadata_devices,seg_pe_ranges.(2.02.140)
  Change LV sizes in seg_pe_ranges report field to match underlying devices.
  Add kernel_cache_settings report field for cache LV settings used in kernel.

Version 2.02.140 - 16th January 2016
====================================
  Fix lvm2app to return either 0 or 1 for lvm_vg_is_{clustered,exported}.
  Add kernel_discards report field to display thin pool discard used in kernel.
  Correct checking of target presence when driver access is disabled.
  Eval poolmetadatasize arg earlier in lvresize.
  Fix vgcfgrestore to respect allocatable attribute of PVs.
  Add report/mark_hidden_devices to lvm.conf.
  Use brackets consistently in report fields to mark hidden devices.
  Restore background polling processing during auto-activation (2.02.119).
  Fix invalid memory read when reporting cache LV policy_name (2.02.126).

Version 2.02.139 - 8th January 2016
===================================
  Update lvmlockd with the new VG seqno before devices are suspended.
  Rework vgrename to use the common processing code in toollib.
  Make pvs show new devices on the system since the last .cache update.
  Document F,D and M thin pool health status chars for lv_attr in lvs man page.
  Also add lvm2-activation{-early,-net}.service systemd status for lvmdump -s.

Version 2.02.138 - 14th December 2015
=====================================
  Support lvrename for hidden (used) cache pools.
  Fix lvrename for stacked cache pools.

Version 2.02.137 - 5th December 2015
====================================
  Restore archiving before changing metadata in vgextend (2.02.117).
  Dropped internal usage of log_suppress(2).
  Cleaned logging code for buffer size usage.
  Added internal id_read_format_try() function to check and read valid UUID.
  Change lvcreate, lvrename, lvresize to use process_each_vg.
  Change process_each_vg to handle single VG as separate arg.
  Issue error if ambiguous VG name is supplied in most commands.
  Make process_each fns always work through full list of known VG names.
  Use dm_get_status_mirror() instead of individual parsers.
  Add mem pool arg for check_transient_status() target function.
  Avoid misleading error with -m is omitted with lvconvert to raid types.
  Add system_id to vginfo cache.

Version 2.02.136 - 28th November 2015
=====================================
  Add new --sinceversion option for lvmconfig --type new.
  Fix inactive table loaded for wrapping thin-pool when resizing it.
  Extend the list of ignored libraries when locking memory.

Version 2.02.135 - 23rd November 2015
=====================================
  Add a model file for Coverity.
  Show correct error message for unsupported yet cache pool repair.
  Allow lvconvert cache pools' data and metadata LV to raid.
  Fix reading of old metadata with missing cache policy or mode settings.
  Issue error if external_device_info_source=udev and udev db record incomplete.
  Update lvmetad duplicate VG name handling to use hash function extensions.
  Detect invalid vgrenames by vgid where the name is unchanged.
  Fix passing of 32bit values through daemons (mostly lvmlockd).
  Use local memory pool for whole alloc_handle manipulation.
  Add missing pointer validation after dm_get_next_target().
  Do not deref NULL pointer in debug message for _match_pv_tags().
  Drop unneeded stat() call when checking for sysfs file.
  Fix memory leak on error path of failing thin-pool percentage check.
  Add missing test for failing node allocation in lvmetad.
  Correct configure messages when enabling/disabling lvmlockd.

Version 2.02.134 - 9th November 2015
====================================
  Refactor some lvmetad code and adjust some duplicate PV messages.
  No longer repair/wipe VG/PVs if inaccessible because foreign or shared.
  Pass correct data size to mirror log calc so log can be bigger than 1 extent.

Version 2.02.133 - 30th October 2015
====================================
  Support repeated -o|--options for reporting commands.
  Support -o- and -o# for reporting commands to remove and compact fields.
  Fix missing PVs from pvs output if vgremove is run concurrently.
  Remove unwanted error message when running pvs/vgs/lvs and vgremove at once.
  Check newly created VG's metadata do not overlap in metadata ring buffer.
  Check metadata area size is at least the minimum size defined for the format.
  Thin pool targets uses low_water_mark from profile.
  Dropping 'yet' from error of unsupported thick snapshot of snapshots.
  Do not support unpartitioned DASD devices with CDL formatted with pvcreate.
  For thins use flush for suspend only when volume size is reduced.
  Enable code which detects the need of flush during suspend.
  Ensure --use-policy will resize volume to fit below threshold.
  Correct percentage evaluation when checking thin-pool over threshold.
  Fix lvmcache to move PV from VG to orphans if VG is removed and lvmetad used.
  Fix lvmcache to not cache even invalid info about PV which got removed.
  Support checking of memlock daemon counter.
  Allow all log levels to be used with the lvmetad -l option.
  Add optional shutdown when idle support for lvmetad.
  Fix missing in-sync progress info while lvconvert used with lvmpolld.
  Add report/compact_output_cols to lvm.conf to define report cols to compact.
  Do not change logging in lvm2 library when it's already set.
  Check for enough space in thin-pool in command before creating new thin.
  Make libblkid detect all copies of the same signature if use_blkid_wiping=1.
  Fix vgimportclone with -n to not add number unnecessarily to base VG name.
  Cleanup vgimportclone script and remove dependency on awk, grep, cut and tr.
  Add vg_missing_pv_count report field to report number of missing PVs in a VG.
  Properly identify internal LV holding sanlock locks within lv_role field.
  Add metadata_devices and seg_metadata_le_ranges report fields for raid vols.
  Fix lvm2-{activation,clvmd,cmirrord,monitor} service to exec before mounting.

Version 2.02.132 - 22nd September 2015
======================================
  Fix lvmconf to set locking_type=2 if external locking library is requested.
  Remove verbose message when rescanning an unchanged device. (2.02.119)
  Add origin_uuid, mirror_log_uuid, move_pv_uuid, convert_lv_uuid report fields.
  Add pool_lv_uuid, metadata_lv_uuid, data_lv_uuid reporting fields.
  Fix PV label processing failure after pvcreate in lvm shell with lvmetad.

Version 2.02.131 - 15th September 2015
======================================
  Rename 'make install_full_man' to install_all_man and add all_man target.
  Fix vgimportclone cache_dir path name (2.02.115).
  Swapping of LV identifiers handles more complex LVs.
  Use passed list of PVS when allocating space in lvconvert --thinpool.
  Disallow usage of --stripe and --stripesize when creating cache pool.
  Warn user when caching raid or thin pool data LV.
  When layering LV, move LV flags with segments.
  Ignore persistent cache if configuration changed. (2.02.127)
  Fix devices/filter to be applied before disk-accessing filters. (2.02.112)
  Make tags only when requested via 'make tags'.
  Configure supports --disable-dependency-tracking for one-time builds.
  Fix usage of configure.h when building in srcdir != builddir.

Version 2.02.130 - 5th September 2015
=====================================
  Fix use of uninitialized device status if reading outdated .cache record.
  Restore support for --monitor option in lvcreate (2.02.112).
  Read thin-pool data and metadata percent without flush.
  Detect blocked thin-pool and avoid scanning their thin volumes.
  Check if dm device is usable before checking its size (2.02.116).
  Extend parsing of cache_check version in configure.
  Make lvpoll error messages visible in lvmpolld's stderr and in syslog.
  Add 'make install_full_man' to install all man pages regardless of config.

Version 2.02.129 - 26th August 2015
===================================
  Drop error message when vgdisplay encounters an exported VG. (2.02.27)
  Fix shared library generation to stop exporting internal functions.(2.02.120)
  Accept --cachemode with lvconvert.
  Fix and improve reporting properties of cache-pool.
  Enable usage of --cachepolicy and --cachesetting with lvconvert.
  Don't allow to reduce size of thin-pool metadata.
  Fix debug buffer overflows in cmirrord logging.
  Add --foreground and --help to cmirrord.

Version 2.02.128 - 17th August 2015
===================================
  Allocation setting cache_pool_cachemode is replaced by cache_mode.
  Don't attempt to close config file that couldn't be opened.
  Check for valid cache mode in validation of cache segment.
  Change internal interface handling cache mode and policy.
  When no cache policy specified, prefer smq (if available) over mq.
  Add demo cache-mq and cache-smq profiles.
  Add cmd profilable allocation/cache_policy,cache_settings,cache_mode.
  Require cache_check 0.5.4 for use of --clear-needs-check-flag.
  Fix lvmetad udev rules to not override SYSTEMD_WANTS, add the service instead.

Version 2.02.127 - 10th August 2015
===================================
  Do not init filters, locking, lvmetad, lvmpolld if command doesn't use it.
  Order fields in struct cmd_context more logically.
  Add lock_type to lvmcache VG summary and info structs.
  Fix regression in cache causing some PVs to bypass filters (2.02.105).
  Make configure --enable-realtime the default now.
  Update .gitignore and configure.in files to reflect usage of current tree.

Version 2.02.126 - 24th July 2015
=================================
  Fix long option hyphen removal. (2.02.122)
  Fix clvmd freeze if client disappears without first releasing its locks.
  Fix lvconvert segfaults while performing snapshots merge.
  Ignore errors during detection if use_blkid_wiping=1 and --force is used.
  Recognise DM_ABORT_ON_INTERNAL_ERRORS env var override in lvm logging fn.
  Fix alloc segfault when extending LV with fewer stripes than in first seg.
  Fix handling of cache policy name.
  Set cache policy before with the first lvm2 cache pool metadata commit.
  Fix detection of thin-pool overprovisioning (2.02.124).
  Fix lvmpolld segfaults on 32 bit architectures.
  Add lvmlockd lock_args validation to vg_validate.
  Fix ignored --startstopservices option if running lvmconf with systemd.
  Hide sanlock LVs when processing LVs in VG unless named or --all used.

Version 2.02.125 - 7th July 2015
================================
  Fix getline memory usage in lvmpolld.
  Add support --clear-needs-check-flag for cache_check of cache pool metadata.
  Add lvmetactl for developer use only.
  Rename global/lock_retries to lvmlockd_retries.
  Replace --enable-lvmlockd by --enable-lockd-sanlock and --enable-lockd-dlm.

Version 2.02.124 - 3rd July 2015
================================
  Move sending thin pool messages from resume to suspend phase.
  Report warning when pool is overprovisioned and not auto resized.
  Recognize free-form date/time values for lv_time field in selection criteria.
  Added experimental lvmlockd with configure --enable-lvmlockd.
  Fix regression in select to match string fields if using synonyms (2.02.123).
  Fix regression when printing more lv names via display_lvname (2.02.122).
  Add missing error logging to unlock_vg and sync_local_dev_names callers.

Version 2.02.123 - 30th June 2015
=================================
  Add report/time_format lvm.conf option to define time format for report.
  Fix makefile shell compare == when building lvmetad lvmpolld (2.02.120).
  Add --type full to lvmconfig for full configuration tree view.
  Add undocumented environment variables to lvm man page. (2.02.119)
  Add device synchronization point before activating a new snapshot.
  Add --withspaces to lvmconfig to add spaces in output for better readability.
  Add custom main function to libdaemon.
  Use lvmetad to track out-of-date metadata discovered.

Version 2.02.122 - 20th June 2015
=================================
  Flush stdout before printing to stderr.
  Use pre-allocated buffer for printed LV names in display_lvname.
  Support thins with size of external origin unaligned with thin pool chunk.
  Allow extension of reduced thin volumes with external origins.
  Consider snapshot and origin LV as unusable if component devices suspended.
  Fix lvmconfig segfault on settings with undefined default value (2.02.120).
  Add explicit 's' (shared) LV activation mode.
  Ignore hyphens in long options names (i.e. --long-option == --longoption).

Version 2.02.121 - 12th June 2015
=================================
  Distinguish between on-disk and lvmetad versions of text metadata.
  Remove DL_LIBS from Makefiles for daemons that don't need them.
  Zero errno in before strtoul call in dmsetup if tested after the call.
  Zero errno in before strtoul call in lvmpolld.
  Fix a segfault in pvscan --cache --background command.
  Fix test for AREA_PV when checking for failed mirrors.
  Do not use --sysinit in lvm2-activation{-early,-net}.service if lvmpolld used.
  Maintain outdated PV info in lvmetad till all old metadata is gone from disk.
  Do not fail polling when poll LV not found (already finished or removed).
  Replace poll_get_copy_vg/lv fns with vg_read() and find_lv() in polldaemon.
  Close all device fds only in before sleep call in polldaemon.
  Simplify Makefile targets that generate exported symbols.
  Move various -D settings from Makefiles to configure.h.

Version 2.02.120 - 15th May 2015
================================
  Make various adjustments to Makefile compilation flags.
  Add lvmpolld debug message class.
  Add lvmpolld client mode for querying running server instance for status info.
  Fix some libdaemon socket creation and reuse error paths.
  Daemons (libdaemon) support exit on idle also in non-systemd environment.
  Provide make dist and make rpm targets
  Configure lvm.conf for use_lvmetad and use_lvmpolld.
  Add lvpoll for cmdline communication with lvmpolld.
  Add lvmpolld acting as a free-standing version of polldaemon.
  Avoid repeated identical lvmetad VG lookups in commands processing all VGs.
  Handle switches to alternative duplicate PVs efficiently with lvmetad.
  Properly validate PV size for pvcreate --restorefile.
  Fix check if pvcreate wiped device (2.02.117).
  Fix storing of vgid when caching metadata (2.02.118).
  Fix recursive lvm-config man page. (2.02.119)
  Refactor polldaemon interfaces to poll every operation by VG/LV couple
  Skip wait after testing in _wait_for_single_lv when polling finished
  Return 'None' in python for empty string properties instead of crashing.
  Distinguish signed numerical property type in reports for lvm2app library.
  Reread raid completion status immediately when progress appears to be zero.
  lvm2app closes locking on lvm_quit().
  Configure detects /run or /var/run.
  Add missing newline in clvmd --help output.

Version 2.02.119 - 2nd May 2015
===============================
  New LVM_LOG_FILE_EPOCH, LVM_EXPECTED_EXIT_STATUS env vars. Man page to follow.
  Remove detailed content from lvm.conf man page: use lvmconfig instead.
  Generate complete config files with lvmconfig or 'make generate'.
  Also display info on deprecated config with lvmconfig --withcomments.
  Display version since which config is deprecated in lvmconfig --withversions.
  Add --showdeprecated to lvmconfig to also display deprecated settings.
  Hide deprecated settings in lvmconfig output for all types but current,diff.
  Introduce support for exit on idle feature in libdaemon
  Add --showunsupported to lvmconfig to also display unsupported settings.
  Display unsupported settings for lvmconfig --type current,diff only by default
  Honour lvmconfig --ignoreunsupported and --ignoreadvanced for all --type.
  Make python bindings usable with python3 (and compatible with 2.6 & 2.7).
  Add lvmconfig -l|--list as shortcut for lvmconfig --type list --withsummary.
  Add lvmconfig --type list to display plain list of configuration settings.
  Introduce lvmconfig as the preferred form of 'lvm dumpconfig'.
  Add lv_ancestors and lv_descendants reporting fields.
  Add --ignorelocal option to dumpconfig to ignore the local section.
  Close connection to lvmetad after fork.
  Make lvchange able to resume background pvmove polling again.
  Split pvmove update metadata fn in an initial one and a subsequent one.
  Refactor shared pvmove and lvconvert code into new _poll files.
  Add --unconfigured option to dumpconfig to print strings unconfigured.
  Add --withsummary option to dumpconfig to print first line - summary comment.
  Use number of device holders to help choose between duplicate PVs.
  Try to make lvmetad and non-lvmetad duplicate PV handling as similar as poss.
  Issue warnings about duplicate PVs discovered by lvmetad.
  Track alternative devices with matching PVIDs in lvmetad.
  Check for lvm binary in blkdeactivate and skip LVM processing if not present.
  Add --enable-halvm and --disable-halvm options to lvmconf script.
  Add --services, --mirrorservice and --startstopservices option to lvmconf.
  Use proper default value of global/use_lvmetad when processing lvmconf script.
  Respect allocation/cling_tag_list during intial contiguous allocation.
  Add A_PARTITION_BY_TAGS set when allocated areas should not share tags.
  Make changes persist with python addTag/removeTag.
  Set correct vgid when updating cache when writing PV metadata.
  More efficient clvmd singlenode locking emulation.
  Reject lvcreate -m with raid4/5/6 to avoid unexpected layout.
  Don't skip invalidation of cached orphans if vg write lck is held (2.02.118).
  Log relevant PV tags when using cling allocation.
  Add str_list_add_list() to combine two lists.
  Fix LV processing with selection to always do the selection on initial state.
  Add internal LV_REMOVED LV status flag.

Version 2.02.118 - 23rd March 2015
==================================
  Store metadata size + checksum in lvmcache and add struct lvmcache_vgsummary.
  Remove inaccessible clustered PVs from 'pvs -a'.
  Don't invalidate cached orphan information while global lock is held.
  Avoid rescan of all devices when requested pvscan for removed device.
  Measure configuration timestamps with nanoseconds when available.
  Disable lvchange of major and minor of pool LVs.
  Fix pvscan --cache to not scan and read ignored metadata areas on PVs.
  Add After=iscsi-shutdown.service to blk-availability.service systemd unit.
  Disallow vgconvert from changing metadata format when lvmetad is used.
  Don't do a full read of VG when creating a new VG with an existing name.
  Reduce amount of VG metadata parsing when looking for vgname on a PV.
  Avoid reparsing same metadata when reading same metadata from multiple PVs.
  Save extra device open/close when scanning device for size.
  Fix seg_monitor field to report status also for mirrors and thick snapshots.
  Replace LVM_WRITE with LVM_WRITE_LOCKED flags in metadata if system ID is set.
  Remove ACCESS_NEEDS_SYSTEM_ID VG status flag. (2.02.117)
  Enable system ID features.

Version 2.02.117 - 4th March 2015
=================================
  Add CFG_DISABLED for new system ID config settings that must not yet be used.
  Preserve original format type field when processing backup files.
  Implement status action for lvm2-monitor initscript to display monitored LVs.
  Allow lvchange -p to change kernel state only if metadata state differs.
  Fix incorrect persistent .cache after report with label fields only (2.02.106).
  Reinstate PV tag recognition for pvs if reporting label fields only (2.02.105).
  Rescan devices before vgimport with lvmetad so exported VG is seen.
  Fix hang by adjusting cluster mirror regionsize, avoiding CPG msg limit.
  Do not crash when --cachepolicy is given without --cachesettings.
  Add NEEDS_FOREIGN_VGS flag to vgimport so --foreign is always supplied.
  Add --foreign to the 6 display and reporting tools and vgcfgbackup.
  Install /etc/lvm/lvmlocal.conf template with local section for systemid.
  Record creation_host_system_id in lvm2 metadata (never set yet).
  Reinstate recursive config file tag section processing. (2.02.99)
  Add 'lvm systemid' to display the current system ID (never set yet).
  Fix configure to properly recognize --with-default-raid10-segtype option.
  Do not refresh filters/rescan if no signature is wiped during pvcreate.
  Enforce none external dev info for wiping during pvcreate to avoid races.
  Add global/system_id_source and system_id_file to lvm.conf (disabled).
  Add support for VG system_id to control host access to VGs.
  Update vgextend to use process_each_vg.
  Add --ignoreskippedcluster to pvchange.
  Allow pvchange to modify several properties at once.
  Update pvchange to use process_each_pv.
  Fix pvs -a used with lvmetad to filter out devices unsuitable for PVs.
  Fix selection to recognize units for ba_start, vg_free and seg_start fields.
  Add support for -S/--select to vgexport and vgimport.
  Add support for -S/--select to vgdisplay, lvdisplay and pvdisplay without -C.
  Add support for -S/--select to vgremove and lvremove.
  Add support for -S/--select to vgchange,lvchange and pvchange.
  Add infrastructure to support selection for non-reporting tools.
  Add LVM_COMMAND_PROFILE env var to set default command profile name to use.
  Set CLOEXEC flag on file descriptors originating in libdaemon.

Version 2.02.116 - 30th January 2015
====================================
  Deactivate unused thin pools activated with lvm2 pre-2.02.112 versions.
  Check lock holding LV when lvconverting stacked raid LV in cluster.
  Support udev external dev info for filters: PV min size, mpath, md, partition.
  Add fw_raid_component_detection lvm.conf option to enable FW raid detection.
  Add devices/external_device_info_source lvm.conf option ("none" by default).
  Scan pools in for_each_sub_lv() and add for_each_sub_lv_except_pools().
  Fix lvm2app lvm_lv_get_property return value for fields with info/status ioctl.
  Fix lvm2app regression in lvm_lv_get_attr causing unknown values (2.02.115).
  Set default cache_mode to writehrough when missing in metadata.
  Preserve chunk size with repair and metadata swap of a thin pool.
  Fix raid --splitmirror 1 functionality (2.02.112).
  Fix tree preload to handle splitting raid images.
  Do not support unpartitioned DASD devices.
  Improve config validation to check if setting with string value can be empty.

Version 2.02.115 - 21st January 2015
====================================
  Report segment types without monitoring support as undefined.
  Support lvchange --errorwhenfull for thin pools.
  Improve the processing and reporting of duplicate PVs.
  Report lv_health_status and health attribute also for thin pool.
  Add lv_when_full reporting field.
  Add support for lvcreate --errorwhenfull y|n for thin pools.
  Fix lvconvert --repair to honour resilience requirement for segmented RAID LV.
  Filter out partitioned device-mapper devices as unsuitable for use as PVs.
  Also notify lvmetad about filtered device if using pvscan --cache DevicePath.
  Use LVM's own selection instead of awk expressions in clvmd startup scripts.
  Do not filter out snapshot origin LVs as unusable devices for an LVM stack.
  Fix incorrect rimage names when converting from mirror to raid1 LV (2.02.112).
  Introduce pvremove_many to avoid excessive metadata re-reading and messages.
  Check for cmirror availability during cluster mirror creation and activation.
  Add cache_policy and cache_settings reporting fields.
  Add missing recognition for --binary option with {pv,vg,lv}display -C.
  Fix vgimportclone to notify lvmetad about changes done if lvmetad is used.
  Fix vgimportclone to properly override config if it is missing in lvm.conf.
  Fix automatic use of configure --enable-udev-systemd-background-jobs.
  Correctly rename active split LV with -splitmirrors for raid1.
  Add report/compact_output to lvm.conf to enable/disable compact report output.
  Still restrict mirror region size to power of 2 when VG extent size is not.

Version 2.02.114 - 28th November 2014
=====================================
  Release socket in daemon_close and protocol string in daemon_open error path.
  Add --cachepolicy and --cachesettings to lvcreate.
  Fix regression when parsing /dev/mapper dir (2.02.112).
  Fix missing rounding to 64KB when estimating optimal thin pool chunk size.
  Fix typo in clvmd initscript causing CLVMD_STOP_TIMEOUT var to be ignored.
  Fix size in pvresize "Resizing to ..." verbose msg to show proper result size.

Version 2.02.113 - 24th November 2014
=====================================
  Add --cachepolicy and --cachesettings options to lvchange.
  Validate that converted volume and specified pool volume differ in lvconvert.
  Fix regression in vgscan --mknodes usage (2.02.112).
  Respect --prefix when setting CLMVD_PATH configure (2.02.89).
  Default to configure --enable-udev-systemd-background-jobs for systemd>=205.
  Fix ignore_vg() to properly react on various vg_read errors (2.02.112).
  Failed recovery returns FAILED_RECOVERY status flag for vg_read().
  Exit with non-zero status code when pvck encounters a problem.
  Fix clean_tree after activation/resume for cache target (2.02.112).

Version 2.02.112 - 11th November 2014
=====================================
  Add cache_{read,write}_{hits,misses} reporting fields.
  Add cache_{total,used,dirty}_blocks reporting fields.
  Add _corig as reserved suffix.
  Reduce number of VG writes and commits when creating spare volumes.
  When remove_layer_from_lv() removes layer, restore subLV names.
  Cache-pool in use becomes invisible LV.
  Don't prompt for removal of _pmspare in VG without pool metadata LV.
  Deactivation of snapshot origin detects and deactivates left-over snapshots.
  Properly report error when taking snapshot of any cache type LV.
  Add basic thread debugging messages to dmeventd.
  Include threads being shutdown in dmeventd device registration responses.
  Inital support for external users of thin pools based on transaction_id.
  Report some basic percentage info for cache pools.
  Introduce size_mb_arg_with_percent() for advanced size arg reading.
  Add extra support for '.' as decimal point in size args.
  Add configure parameters for default segment type choices.
  Add global/sparse_segtype_default setting to use thin for --type sparse.
  Update and correct lvcreate and lvcovert man pages.
  Mark pools and snapshots as unzeroable volumes.
  Check for zeroing of volume after segment type is fully detected.
  Better support for persistent major and minor options with lvcreate.
  Refactor lvcreate towards more complete validation of all supported options.
  Support lvcreate --type linear.
  Improve _should_wipe_lv() to warn with message.
  Inform about temporarily created volumes only in verbose mode.
  Better support for --test mode with pool creation.
  Query lock holding LV when replacing and converting raid volumes.
  Add extra validate for locked lv within validate_lv_cache_create().
  Add internal lvseg_name() function.
  Skip use of lock files for virtual internal VG names.
  Fix selection on {vg,lv}_permissions fields to properly match selection criteria.
  Fix lv_permissions reporting to display read-only{-override} instead of blank.
  Fix liblvm2cmd and lvm shell to respect quotes around args in cmd line string.
  Permit extent sizes > 128KB that are not power of 2 with lvm2 format.
  Remove workaround for lvm2-monitor.service hang on stop if lvmetad stopped.
  Change vgremove to use process_each_lv_in_vg.
  Allow lvconvert --repair and --splitmirrors on internal LVs.
  Introduce WARN_ flags to control some metadata warning messages.
  Use process_each_pv in vgreduce.
  Refactor process_each_pv in toollib.
  Introduce single validation routine for pool chunk size.
  Support --yes like --force in vg/lvremove to skip y|n prompt.
  Support --yes with lvconvert --splitsnapshot.
  Fix detection of unsupported thin external lvconversions.
  Fix detection of unsupported cache and thin pool lvconversions.
  Fix detection of unsupported lvconversion of cache to snapshot.
  Improve code for creation of cache and cache pool volumes.
  Check cluster-wide (not local) active status before removing LV.
  Properly check if activation of removed cached LV really activated.
  lvremove cached LV removes cachepool (keep with lvconvert --splitcache).
  Always remove spare LV with last removed pool volume.
  Support lvconvert --splitcache and --uncache of cached LV.
  Option --cache has also shortcut -H (i.e. lvcreate -H).
  Refactor lvcreate code and better preserve --type argument.
  Refactor filter processing around lvmetad.
  Refactor process_each_lv in toollib.
  Refactor process_each_vg in toollib.
  Pools cannot be used as external origin.
  Use lv_update_and_reload() for snapshot reload.
  Don't print message in adjusted_mirror_region_size() in activation.
  Improve lv_update_and_reload() to find out proper lock holding LV.
  Improve search of LV in lv_ondisk().
  Do not scan sysfs in lv_check_not_in_use() when device is closed.
  Backup final metadata after resync of mirror/raid.
  Unify handling of --persistent option for lvcreate and lvchange.
  Validate major and minor numbers stored in metadata.
  Use -fPIE when linking -pie executables.
  Support DEBUG_MEMLOCK to trap unsupported mmap usage.
  Enable cache segment type by default.
  Ensure only supported volume types are used with cache segments.
  Fix inablility to specify cachemode when 'lvconvert'ing to cache-pool.
  Grab cluster lock for active LVs when setting clustered attribute.
  Use va_copy to properly pass va_list through functions.
  Add function to detect rotational devices.
  Review internal checks for mirror/raid/pvmove volumes.
  Track mirror segment type with separate MIRROR flag.
  Fix cmirror endian conversions.
  Introduce lv_is_pvmove/locked/converting/merging macros.
  Avoid leaving linear logical volume when thin pool creation fails.
  Don't leak alloc_handle on raid target error path.
  Properly validate raid leg names.
  Archive metadata before starting their modification in raid target.
  Add missing vg_revert() in suspend_lv() raid and snapshot error path.
  Add missing backup of lvm2 metadata after some raid modifications.
  Use vg memory pool for extent allocation.
  Add allocation/physical_extent_size config option for default PE size of VGs.
  Demote an error to a warning when devices known to lvmetad are filtered out.
  Re-order filter evaluation, making component filters global.
  Fix logic that checks for full scan before iterating through devices.
  Introduce common code to modify metadata and reload updated LV.
  Fix rename of active snapshot volume in cluster.
  Make sure shared libraries are built with RELRO option.

Version 2.02.111 - 1st September 2014
=====================================
  Pass properly sized char buffers for sscanf when initializing clvmd.
  Reinstate nosync logic when extending mirror. (2.02.110)
  Fix total area extent calculation when allocating cache pool. (2.02.110)

Version 2.02.110 - 26th August 2014
===================================
  Fix manipulation with thin-pools which are excluded via volume_list.
  Support lv/vgremove -ff to remove thin vols from broken/inactive thin pools.
  Fix typo breaking configure --with-lvm1=shared.
  Modify lvresize code to handle raid/mirrors and physical extents.
  Don't allow pvcreate to proceed if scanning or filtering fails.
  Cleanly error when creating RAID with stripe size < PAGE_SIZE.
  Print name of LV which on activation triggers delayed snapshot merge.
  Add lv_layout and lv_role LV reporting fields.
  Properly display lvs lv_attr volume type and target type bit for cache origin.
  Fix pvcreate_check() to update cache correctly after signature wiping.
  Fix primary device lookup failure for partition when processing mpath filter.
  If LV inactive and non-clustered, do not issue "Cannot deactivate" on -aln.
  Remove spurious "Skipping mirror LV" message on pvmove of clustered mirror.

Version 2.02.109 - 5th August 2014
==================================
  Remove lv_volume_type field from reports. (2.02.108)
  Fix a segfault in lvscan --cache when devices were already missing. (2.02.108)
  Fix incorrect persistent .cache after vgcreate with PV creation. (2.02.108)
  Display actual size changed when resizing LV.
  Allow approximate allocation with +%FREE in lvextend.
  Remove possible spurious "not found" message on PV create before wiping.
  Handle upgrade from 2.02.105 when an LV now gaining a uuid suffix is active.

Version 2.02.108 - 23rd July 2014
=================================
  Add lvscan --cache which re-scans constituents of a particular LV.
  Make dmeventd's RAID plugin re-scan failed PVs when lvmetad is in use.
  Improve code sharing for lvconvert and lvcreate and pools (cache & thin).
  Improve lvconvert --merge validation.
  Improve lvconvert --splitsnapshot validation.
  Add report/list_item_separator lvm.conf option.
  Add lv_active_{locally,remotely,exclusively} LV reporting fields.
  Comment out devices/{preferred_names,filter} in default lvm.conf file.
  Enhance lvconvert thin, thinpool, cache and cachepool command line support.
  Display 'C' only for cache and cache-pool target types in lvs.
  Prompt for confirmation before change LV into a snapshot exception store.
  Return proper error codes for some failing lvconvert funtions.
  Add initial code to use cache tools (cache_check|dump|repair|restore).
  Support lvdisplay --maps for raid.
  Add --activationmode degraded to activate degraded raid volumes by default.
  Add separate lv_active_{locally,remotely,exclusively} LV reporting fields.
  Recognize "auto"/"unmanaged" values in selection for appropriate fields only.
  Add report/binary_values_as_numeric lvm.conf option for binary values as 0/1.
  Add --binary arg to pvs,vgs,lvs and {pv,vg,lv}display -C for 0/1 on reports.
  Add separate reporting fields for each each {pv,vg,lv}_attr bit.
  Separate LV device status reporting fields out of LV fields.
  Fix regression causing PVs not in VGs to be marked as allocatable (2.02.59).
  Fix VG component of lvid in vgsplit/vgmerge and check in vg_validate.
  Add lv_full_name, lv_parent and lv_dm_path fields to reports.
  Change lv_path field to suppress devices that never appear in /dev/vg.
  Postpone thin pool lvconvert prompts (2.02.107).
  Require --yes option to skip prompt to lvconvert thin pool chunksize.
  Support lvremove -ff to remove thin volumes from broken thin pools.
  Require --yes to skip raid repair prompt.
  Change makefile %.d generation to handle filename changes without make clean.
  Fix use of buildir in make pofile.
  Enhance private volumes UUIDs with suffixed for easier detection.
  Do not use reserved _[tc]meta volumes for temporary LVs.
  Leave backup pool metadata with _meta%d suffix instead of reserved _tmeta%d.
  Allow RAID repair to reuse PVs from same image that suffered a failure.
  New RAID images now avoid allocation on any PVs in the same parent RAID LV.
  Always reevaluate filters just before creating PV.

Version 2.02.107 - 23rd June 2014
=================================
  Introduce LCK_ACTIVATION to avoid concurrent activation of basic LV types.
  Fix open_count test for lvchange --refresh or mirrors and raids.
  Update pvs,vgs,lvs and lvm man page for selection support.
  Add -S/--select to lvm devtypes for report selection.
  Add -S/--select to pvs,vgs,lvs and {pv,vg,lv}display -C for report selection.
  Use dm_report_init_with_selection now, implicit "selected" field appears.
  Make use of libdm's DM_REPORT_FIELD_TYPE{SIZE,PERCENT,STRING_LIST} for fields.
  Support all-or-nothing pvmove --atomic.
  Automatically add snapshot metadata size for -l %ORIGIN calculation.
  When converting RAID origin to cache LV, properly rename sub-LVs.
  Use RemoveOnStop for lvm2-lvmetad.socket systemd unit.
  Add thin-generic configuration profile for generic thin settings.
  Fix crash when reporting empty labels on pvs.
  Use retry_deactivation also when cleaning orphan devices.
  Wait for client threads when shutting down lvmetad.
  Remove PV from cache on pvremove.
  Avoid repeatedly reporting of failure to connect to lvmetad.
  Introduce MDA_FAILED to permit metadata updates even if some mdas are missing.
  Prompt when setting the VG cluster attr if the cluster is not setup.
  Allow --yes to skip prompt in vgextend (worked only with -f).
  Don't use name mangling for LVM - it never uses dm names with wrong char set.
  Remove default.profile and add {command,metadata}_profile_template.profile.
  Use proper umask for systemd units generated by lvm2-activation-generator.
  Check for failing mirror_remove_missing() function.
  Prompt before converting volumes to thin pool and thin pool metadata.
  Add dumpconfig --type profilable-{metadata,command} to select profile type.
  Exit immediately with error if command profile is found invalid.
  Separate --profile cmd line arg into --commandprofile and --metadataprofile.
  Strictly separate command profiles and per-VG/LV profiles referenced in mda.
  Fix dumpconfig --type diff when run as second and later cmd in lvm shell.
  Fix wrong profile reuse from previous run if another cmd is run in lvm shell.
  Move cache description from lvm(8) to new lvmcache(7) man page.
  Display skipped prompt in silent mode.
  Make reporting commands show help about possible sort keys on '-O help'.
  Add metadata_percent to lvs_cols.
  Take account of parity areas with alloc anywhere in _calc_required_extents.
  Use proper uint64 casting for calculation of cache metadata size.
  Better support for nesting of blocking signals.
  Use only sigaction handler and drop duplicate signal handler.
  Separate signal handling and flock code out into lib/misc.
  Don't start dmeventd checking seg_monitor and monitoring is disabled.
  Catch CTRL-c during pvremove prompts.
  Show correct availability status for snapshot origin in lvscan.
  Move segment thin pool/volume info into segment display 'lvdisplay --maps'.
  Display thin pool usage even when just thin volume is available.
  Display monitoring status for monitorable segments in 'lvdisplay --maps'.
  Display virtual extents for virtual LVs in 'lvdisplay --maps'.
  Make vgsplit fail cleanly when not all PVs are specified for RAID 4/5/6.
  Make vgsplit work on mirrors with logs that share PVs with images.
  Use devices/ignore_suspended_devices=0 by default if not defined in lvm.conf.
  Use proper libmem mempool for allocation of unknown segment name.
  Add --readonly to reporting and display tools for lock-free metadata access.
  Add locking_type 5 for dummy locking for tools that do not need any locks.
  Fix _recover_vg() error path when lock conversion fails.
  Use X for LV attributes that are unknown when activation disabled.
  Only output lvdisplay 'LV Status' field when activation is enabled.
  Use lvmetad_used() in pvscan instead of config_tree.
  Configure --enable-udev-systemd-background-jobs if not disabled explicitly.
  Add lvmdump -s to collect system info and context (currently systemd only).
  Refactor allocation code to make A_POSITIONAL_FILL explicit.
  Use thread-safe ctime_r() for clvmd debug logging.
  Skip adding replies to already finished reply thread.
  Use mutex to check number of replies in request_timed_out() in clvmd.
  Drop usage of extra reply_mutex for localsock in clvmd.
  Protect manipulation with finished flag with mutex in clvmd. 
  Shift mutex creation and destroy for localsock in clvmd to correct place.
  Fix usage of --test option in clvmd.
  Skip more libraries to be mlocked in memory.
  Remove LOCKED flag for pvmove replaced with error target.
  Return invalid command when specifying negative polling interval.

Version 2.02.106 - 10th April 2014
==================================
  Fix ignored --dataalignment/dataalignment offset for pvcreate --restorefile.
  Fix lost information about bootloader area when using lvmetad.
  Don't require --major to be specified when using -My option on kernels > 2.4.
  Add configure --disable-thin_check_needs_check to support old thin_check.
  Use thin_check --clear-needs-check-flag by default.
  Export lvm_even_rand() for controlled provision of random numbers.
  Add lvmthin man page to section 7.
  Ensure mapped device names are not too long in vg_validate and lvrename.
  Ensure resume failure in lvrename results in command failure.
  Add explicit error message when using lvdisplay -c -m.
  Report error if superfluous argument (e.g. PV name) supplied to pvscan.
  Fix error message for pvdisplay -c -m and add one for pvdisplay -c -s.
  Use EINVALID_CMD_LINE correctly instead of ECMD_FAILED in vgimport/export.
  Obtain list of known VGs from lvmetad for pvchange --all.
  Add man page for lvm-dumpconfig to section 8.
  Drop unused cmd pointer for internal function for_each_sub_lv().
  Validate name for renamed sub LVs.
  When lvrename fails on argument parsing return EINVALID_CMD_LINE.
  Fix exit code regression in failing pvchange command (2.02.66).
  Include 'lvm dumpconfig --type missing' and '--type diff' output to lvmdump.
  Return failure when specifying negative size for pvresize.
  Fix memory corruption in cmd context refresh if clvmd leaks opened device.
  Reinitialise lvmcache properly on fork to fix premature polldaemon exit.
  Add 'lvm dumpconfig --type diff' to show differences from defaults.
  Fix swap signature detection for devices smaller then 2MB.
  Use dm_malloc function in clvmd.c.
  Resolve memory release order for clvmd shutdown.
  Report error when lvm2 activation is released in critical_section.
  Fix memory corruption when pvscan reports long pv names.
  Do not report internal orphan VG names when reporting pvdisplay/pvscan.
  Fix pvdisplay -c man page referencing KB instead of sectors.
  Skip redundant synchronization calls on local clvmd.
  Use correct PATH_MAX for locking dir path.
  Do not check for backups when when its creation is disabled.
  Don't allow --mergedconfig without --type current in dumpconfig. Fix memleak.
  Make global/lvdisplay_shows_full_device_path lvm.conf setting profilable.
  Make global/{units|si_unit_consistency|suffix} lvm.conf setting profilable.
  Validate minimal chunk size for snapshot COW volume in lvconvert.
  Disallow lvconvert of origin to snapshot COW volume.
  Make report lvm.conf settings profilable.
  Add existing report settings to lvm.conf.
  Use VG read lock during 'pvscan --cache -aay' autoactivation.
  Issue a VG refresh before autoactivation only if the PV has changed/is new.
  Add flag to lvmetad protocol to indicate the PV scanned has changed/is new.
  Also add vgname to lvmetad protocol when referencing VGs for PVs scanned.
  Add man page for lvm2-activation-generator.
  Don't print an error and accept empty value for global/thin_disabled_features.
  Update API for internal function build_dm_uuid().
  Do not try to check empty pool with scheduled messages.
  Fix return value in pool_has_message() when quering for any message.
  Cleanup all client resources on clvmd exit.
  Use dm_zalloc to clear members of clvmd client struct.
  Use BLKID_CFLAGS when compiling with blkid support.
  Use correct rl_completion_func_t typedef for new readline.
  Make lvm 'dumpconfig --type default' complete for it to be consumed by lvm.
  Run pvscan --cache via systemd-run in udev if the PV label is detected lost.
  Fix memleak when lvmetad discovers PV to appear on another device.
  Fix calculation of maximum size of COW device for snapshot (2.02.99).
  Do not allow stripe size to be bigger then extent size for lvresize.
  Zero snapshot COW header when creating read-only snapshot.
  Comment out config lines in dumpconfig output without default values defined.
  Improve detection of clustered mirror support.
  Enhance raid code with feature flags, for now checks for raid10.
  Move parsing of VG metadata from vg_commit() back to vg_write() (2.02.99)
  Avoid a PV label scan while in a critical section.
  Remove (always 0) skip argument from lv_activation_skip().
  Create /dev/disk/by-id/lvm-pv-uuid-<PV_UUID> symlink for each PV via udev.
  lvcreate computes RAID4/5/6 stripes if not given from # of allocatable PVs.
  Fix merging of old snapshot into thin volume origin.
  Use --ignoreskippedcluster in lvm2-monitor initscript/systemd unit.
  Do not use VG read/write state for LV read/write state.
  Use --ignoreskippedcluster in activation systemd units if use_lvmetad=0.
  Allow approximate allocation when specifying size in percentage terms.
  Add basic LVM support for cache[pool] segment types.
  Use local exclusive activation for creation of raid in cluster.
  Use correctly signed 64b constant when selecting raid volumes.
  Add systemd native service for clvmd, cmirrord and clustered LV activation.
  Remove ExecReload from lvmetad systemd unit: lvmetad -R undefined. (2.02.98)
  Do not fork lvmetad if running under systemd.
  Wipe DM_snapshot_cow signature without prompt in new LVs with blkid wiping.
  Avoid exposing temporary devices when initializing raid metadata volumes.
  Add internal tags command to display any tags defined on the host.
  Prohibit use of external origin with size incompatible with thin pool.
  Avoid trying to convert single to thin pool and volume at the same time.
  Add support for partitions on ZFS zvol.
  Fix unwanted drop of hold flocks on forked children.
  Respect LVM_LVMETAD_PIDFILE env var for lvm command.
  Avoid exposing temporary devices when initializing thin pool volume.
  Fix test when checking target version for available thin features.
  Detect thin feature external_origin_extend and limit extend when missing.
  Rename internal pool_can_resize_metadata() to thin_pool_feature_supported().
  Issue error if libbblkid detects signature and fails to return offset/length.
  Update autoconf config.guess/sub to 2014-01-01.
  Online thin pool metadata resize requires 1.10 kernel thin pool target.

Version 2.02.105 - 20th January 2014
====================================
  Fix thin LV flagging for udev to skip scanning only if the LV is wiped.
  Replace use of xfs_check with xfs_repair in fsadm. 
  Mark lvm1 format metadata as FMT_OBSOLETE. Do not use it with lvmetad.
  Invalidate cached VG struct after a PV in it gets orphaned. (2.02.87)
  Mark pool format metadata as FMT_OBSOLETE.
  Use major:minor in lvm2-pvscan@.service for proper global_filter application.
  Syntax and spelling fixes in some man pages.
  Dependency scan counts with snapshots and external origins.
  Make sure VG extent size is always greater or equal to PV phys. block size.
  Optimize double call of stat() for cached devices.
  Enable support for thin provisioning for default configuration.
  Improve process_each_lv_in_vg() tag processing.
  Reordered and simplified logging code.
  Fix SYSTEMD_READY assignment for foreign devices in lvmetad udev rules.
  Disable online thin pool metadata resize for 1.9 kernel thin target.
  Shortened code for initialization of raid segment types.
  Cache global library dir in command context.
  Return success when inserting dirs and links into device cache.
  Test for remote exclusive activation after activation fails.
  Support lvconvert --merge for thin snapshots.
  Add support to read thin device id from table line entry.
  Drop extra test for origin when testing merging origin in lv_refresh().
  Extend lv_remove_single() to not print info about removed LV.
  Replace open_count check with lv_check_not_in_use() for snapshot open test.
  Add error messages with LV names for failing lv refresh.
  Compile/link executables with new RELRO and PIE options (non-static builds).
  Support per-object compilation cflags via CFLAGS_object.o.
  Automatically detect support for compiler/linker options to use RELRO and PIE.
  Add --splitsnapshot to lvconvert to separate out cow LV.
  Reinstate origin reload to complete lvconvert -s with active LVs. (2.02.98)
  Select only active volume groups if vgdisplay -A is used.
  Add -p and LVM_LVMETAD_PIDFILE env var to lvmetad to change pid file.
  Allow lvmetad to reuse stale socket.
  Only unlink lvmetad socket on error if created by the same process.
  Append missing newline to lvmetad missing socket path error message.
  Check for non-zero aligment in _text_pv_add_metadata_area() to not div by 0.
  Add allocation/use_blkid_wiping to lvm.conf to enable blkid wiping.
  Enable blkid_wiping by default if the blkid library is present.
  Add configure --disable-blkid_wiping to disable libblkid signature detection.
  Add -W/--wipesignatures lvcreate option to support wiping on new LVs.
  Add allocation/wipe_signatures_when_zeroing_new_lvs to lvm.conf.
  Do not fail the whole autoactivation if the VG refresh done before fails.
  Do not connect to lvmetad on vg/lvchange --sysinit -aay and socket absent.
  Use lv_check_not_in_use() when testing device in use before merging.
  Move test for target present from init_snapshot_merge() to lvconvert.
  Check for failure of lvmcache_add_mda() when writing pv.
  Check for failure of dev_get_size() when reporting device size.
  Drop extra unneeded '/' when scanning sysfs directory.
  Fix undef value if skipped clustered VG ignored for toollib PV seg. (2.02.103)
  Support validation of VG/LV names in liblvm/python.
  Allow creation of PVs with arguments to liblvm/python.
  Ensure sufficient metadata copies retained in liblvm/python vgreduce.
  Fix installation of profiles from conf subdir when not building in srcdir.
  Show UUIDs for missing PVs in reports.
  Change dev_size/name, pv_fmt/mda_free/mda_size/uuid fields from pv to label.
  Add struct device *dev to struct label.
  Introduce process_each_label.
  Change void *private to struct format_type *fmt in struct labeller.
  Remove pv_read.
  Add reporting of thin_id device id for thin volumes.
  Fix reporting of empty numerical values for recently-added fields.
  Use _field_set_percent/value in reporting code.

Version 2.02.104 - 13th November 2013
=====================================
  Workaround VG refresh race during autoactivation by retrying the refresh.
  Handle failures in temporary mirror used when adding images to mirrors.
  Fix and improve logic for implicitely exclusive activations.
  Return success when LV cannot be activated because of volume_list filter.
  Return proper error state for remote exclusive activation.
  Fix missing lvmetad scan for PVs found on MD partitions.
  Respect DM_UDEV_DISABLE_OTHER_RULES_FLAG in lvmetad udev rules.
  Fix clvmd message verification to not reject REMOTE flag. (2.02.100)
  Compare equality of double values with DBL_EPSILON predefined constant.
  Use additional gcc warning flags by default.
  Add ignore_lvm_mirrors to config file to read/ignore labels on mirrors.
  Add internal flag for temporary LVs to properly direct udev to not interfere.
  Fix endless loop in blkdeactivate <device>... if unable to umount/deactivate.
  Add dev-block-<major>:<minor>.device systemd alias for complete PV tracking.
  Use major:minor as short form of --major and --minor arg for pvscan --cache.
  Remove 2>/dev/null from three lvm commands executed by vgimportclone.
  Add configure --enable-udev-systemd-background-jobs.
  Add lvm2-pvscan@.service to run pvscan as a service for lvmetad/autoactivation.
  Use #ifdef __linux__ instead of linux throughout.
  Fix lvconvert swap of poolmetadata volume for active thin pool.
  Check for open count with a timeout before removal/deactivation of an LV.
  Report RAID images split with tracking as out-of-sync ("I").
  Improve parsing of snapshot lv segment.
  Add workaround for deactivation problem of opened virtual snapshot.
  Disable unsupported merge for virtual snapshot.
  Move code to remove virtual snapshot from tools to lib for lvm2app.
  Fix possible race during daemon worker thread creation (lvmetad).
  Fix possible deadlock while clearing lvmetad cache for full rescan.
  Recognise NVM Express devices in filter.
  Fix failing metadata repair when lvmetad is used.
  Fix incorrect memory handling when reading messages from lvmetad.
  Fix locking in lvmetad when handling the PV which is gone.
  Recognize new flag to skip udev scanning in udev rules and act appropriately.
  Add support for flagging an LV to skip udev scanning during activation.
  Improve message when unable to change discards setting on active thin pool.
  Run full scan before vgrename operation to avoid any cache name collision.
  Fix lvconvert when converting to a thin pool and thin LV at once. (2.02.99)

Version 2.02.103 - 4th October 2013
===================================
  Ensure vgid matches before removing vgname entry from lvmetad cache.
  Add --ignoreskippedcluster for exit status success when clustered VGs skipped.
  Fix 3 minute udev timeout so that it is applied for all LVM volumes.
  Fix thin/raid & activation config defaults with configure --disable-devmapper.
  Fix RAID calculation for sufficient allocatable space.
  lvconvert from linear to mirror or RAID1 now honors mirror_segtype_default.
  Add thin-performance configuration profile.
  Add lvm.conf allocation/thin_pool_chunk_size_policy option.
  Fix contiguous & cling allocation policies for parity RAID.  (2.02.100)
  Have lvmconf --enable/disable-cluster reset/set use_lvmetad.
  Don't install separate command symlink for 'lvm devtypes'. (2.02.101)
  Add seg_size_pe field to reports.
  Support start+length notation with command line PE ranges.
  Exit cleanly with message when pvmove cannot restart because LV is inactive.

Version 2.02.102 - 23rd September 2013
======================================
  Fix missing build dependency for scripts subdir in Makefile.
  Extend lv_info() for more efficient lv_is_active_locally() check.
  Fix node up/down handling in clvmd corosync module.

Version 2.02.101 - 20th September 2013
======================================
  Fix 3-thread clvmd deadlock triggered by cleanup on EOF from client.
  Remove VG from lvmetad before restoring it with vgcfgrestore.
  Use strtoull instead of strtol in _get_int_arg.
  Add devtypes report command to display built-in recognised block device types.
  Fix CC Makefile override which had reverted to using built-in value. (2.02.75)
  Recognise bcache block devices in filter (experimental).
  Run lvm2-activation-net after lvm2-activation service to prevent parallel run.
  Add man page entries for lvmdump's -u and -l options.
  Fix lvm2app segfault while using lvm_list_pvs_free fn if there are no PVs.
  Improve of clvmd singlenode locking simulation.
  lvconvert no longer converts LVs of "mirror" segment type to thinpool.
  lvconvert no longer converts thinpool sub-LVs to "mirror" segment type.
  Direct udev to use 3min timeout for LVM devices. Recent udev has default 30s.
  Do not scan multipath or RAID components and avoid incorrect autoactivation.
  Fix MD/loop udev handling to fire autoactivation after setup or coldplug only.
  Make RAID capable of single-machine exclusive operations in a cluster.
  Drop calculation of read ahead for deactivated volume.
  Check for exactly one lv segment in validation of thin pools and volumes.
  Fix dmeventd unmonitoring of thin pools.
  Fix lvresize for stacked thin pool volumes (i.e. mirrors).
  Write Completed debug message before reinstating log defaults after command.
  Refresh existing VG before autoactivation (event retrigger/device reappeared).
  Use pvscan -b in udev rules to avoid a deadlock on udev process count limit.
  Add pvscan -b/--background for the command to be processed in the background.
  Don't assume stdin file descriptor is readable.
  Avoid unlimited recursion when creating dtree containing inactive pvmove LV.
  Require exactly 3 arguments for lvm2-activation-generator. Remove defaults.
  Inform lvmetad about any lost PV label to make it in sync with system state.
  Support most of lvchange operations on stacked thin pool meta/data LVs.
  Enable non-clustered pvmove of snapshots and snapshot origins.
  Add ability to pvmove non-clustered RAID, mirror, and thin volumes.
  Make lvm2-activation-generator silent unless it's in error state.
  Remove "mpath major is not dm major" msg for mpath component scan (2.02.94).
  Prevent cluster mirror logs from being corrupted by redundant checkpoints.
  Fix ignored lvmetad update on loop device configuration (2.02.99).
  Use LVM_PATH instead of hardcoded value in lvm2 activation systemd generator.
  Fix vgck to notice on-disk corruption even if lvmetad is used.
  Move mpath device filter before partitioned filter (which opens devices).
  Split partitioned filter out of lvm_type filter.
  Merge filter*.h into a single filter.h.
  Require confirmation for vgchange -c when no VGs listed explicitly.
  Also skip /var and /var/log by default in blkdeactivate when unmounting.
  Add support for bind mounts in blkdeactivate.
  Add blkdeactivate -v/--verbose for debug output from external tools used.
  Add blkdeactivate -e/--errors for error messages from external tools used.
  Suppress messages from external tools called in blkdeactivate by default.

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!
