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 device/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!
