						27/05/1998 -
						$Date: 2001/04/10 15:05:02 $
Logical Volume Manager Changelog

Changelog for 0.9.1_beta6 to 0.9.1_beta7
----------------------------------------

LVM
---

Driver
------

o defer write[a] requests to an extent that is being moved until the move
  has completed.  Needed to support pvmove of a live LV.

o use b_rdev and b_rsector rather than b_dev and b_blocknr
  in lvm_map() in order to make stacking devices more happy

o Added display of stripes and stripe size of an LV

Tools
-----

lvmcreate_initrd - problems with monolithic kernels

lvrename - extra checking of command line paramters

Many usage message updates and man page changes

Library
-------

vgcreate_remove.c - Add some backward compatibility for the VG_CREATE
ioctl so that the new tools will work with older kernels.

Install
-------

PATCHES/Makefile no longer deals with 'new raid', see PATCHES/README for
more info.


Changelog for 0.9.1_beta5 to 0.9.1_beta6
----------------------------------------

LVM
---

o **IMPORTANT** IOP version has moved back to 10, make sure tools and
kernel driver are both upgraded to beta6, if you are running beta5.

Driver
------

o Fixes to get LVM working on UltraSPARC boxes.  Note this requires an
  additional kernel patch.

o Fixed bug in lvm_do_lvcreate() in order to avoid invalid accesses
  to user space addresses in vg->lv[]
  
o factored lvm_get_snapshot_use_rate out of blk_ioctl

o introduced the P_DEV macro and changed some internal functions to be static

o Added VG_CREATE_OLD ioctl for IOP 10 compatibility

o Reverted IOP back to 10

o lvextend/reduce was stamping over the snapshot semaphore causing an oops.
  This fixes the reiserfs + lvextend problem reported on the mailing list

o status that a snapshot was dropped is now stored on disk in order to be
  restored correctly by vgchange

o new lvm-release.h include reflecting the version

o lvm locking is now fixed

o bmap IOCTL changes for LILO support

Tools
-----

o pvdata -U now works

o lvdisplay on an original LV no lists the active/inactive status per snapshot

o lvscan now shows the target for a snapshot LV

o vgchange now informs the administrator about dropped snapshots and restores
  them correctly in order to be able to lvremove them


Library
-------

o -fPIC flag now used when building shared libs.

Install
-------


===============================================================================

Changelog for 0.9.1_beta4 to 0.9.1_beta5
----------------------------------------

LVM
---

o **IMPORTANT** IOP version has moved to 11, make sure tools and kernel driver
  are both upgraded to beta5.

o New VFS patch for 2.4.1

Driver
------

o lvm-snap.h -> lvm-internal.h

o lvm_map function has been tidied

o new file lvm-fs.c contains procfs and devfs code behind a common interface

o Preallocate buffers for rawio under 2.2 to avoid deadlock with snapshots

o devfs handles now indexed by MINOR(lv->lv_dev)

o remove modversions.h

o change LVM_SNAPSHOT_MIN_CHUNK to one page

o tidy blk.h macros

Tools
-----

o vgscan can be run more than once on a devfs system :)

o various man page tidy-ups and usage message improvements

o more devfs support

o fixes to e2fsadm

Library
-------

o various tidy ups

o vg_create() does it's ioctl on /dev/lvm rather than /dev/vg/group

Install
-------

o exec_prefix defaults to prefix when doing a ./configure if prefix is
  explicitly set

===============================================================================


Changelog for 0.9.1_beta3 to 0.9.1_beta4
----------------------------------------

LVM
---

o Changed the configure process so the default location for the tools is
  /sbin, the default location for the libs is /lib, and the default location
  for the man pages is /usr/man.  This required a hack to the
  prefix/exec_prefix variables, so if you build packages, you need to be
  aware of how this changed things.

Driver
------

o fixed oops renaming inactive VG

Tools
-----

Library
-------

o Switched the shared lib naming scheme to reflect the IOP version.

lvm_check_dev
lvm_check_partitioned_dev
lvm_dir_cache	- added compaq SMART2 & CISS support

pv_read_all_pv_of_vg
		- fixed bug causing rare loss of a valid PV structure;
                  vgscan couldn't find the VG


===============================================================================

Changelog for 0.9.1_beta2 to 0.9.1_beta3
----------------------------------------

LVM
---
o corrected max chunk size value in lvcreate(8) man page

Driver
------
o page lock bug fixed by backing up to former page locking
o fixed lvchange activation/decativation bug


Tools
-----

lvcreate	- fixed chunk size related default unit size bug
		- fixed return value bug with lvm_check_number()

vgcreate	- fixed PE size related default unit size bug

===============================================================================

Changelog for 0.9.1_beta1 to 0.9.1_beta2
----------------------------------------

LVM
---

o Shared library version numbers now automatically reflects the LVM
  version number (eg, liblvm.so.0.9.1_beta2)

Driver
------

o Synchronisation fixes for snapshot lists.

o Removed lvm_init from ll_rw_block

Tools
-----

vgexport	- segfault fixed.

Library
-------

pv_read_all_pv_of_vg.c
		- changed to stop segfault appearing in vgexport.

pv_read_all_pv_of_vg.c
		- sorting of PV's corrected.

pv_copy		- version is 16 bits, not 32.



===============================================================================

Changelog for 0.9 to 0.9.1 beta1
--------------------------------

LVM
---


Driver
------
lvm_do_create_proc_entry_of_pv
		- fixed buffer tampering BUG

lvm_do_lv_remove
		- fixed race condition in case of snapshot remove (PC)

lvm_do_pv_create
		- fixed double increment BUG

lvm_do_vg_extend
		- NULL pointer BUGNULL pointer bug fixed

2.2.18 patch	- will allow LVM to run on software raid.

lvm-snap.h	- created to seperate snapshot function definitions (JT)


Tools
-----

lvmdiskscan	- fixed LVM_WHOLE_disk macro 

vgscan		- reworded backup message (JT)


Library
-------

liblvm.h	- added prototype for vg_setup_pointers_for_snapshots()

lv_show		- display snapshot information correctly (PC)
                - use structure pointers provided by
                  vg_setup_pointers_for_snapshots() now

vg_check_consistency_with_pv_and_lv
		- returns correct error code now

vg_cfgrestore
vg_read_with_pv_and_lv
vg_status_with_pv_and_lv
		- use new lib function vg_setup_pointers_for_snapshots()

vg_setup_pointers_for_snapshots
		- created; sets up pointers between logical volume snapshot structures



===============================================================================

Changelog for 0.8final to 0.9
-----------------------------

LVM
---

Driver
------
General		- changed proc filesystem interface to a /dev/lvm/ hierarchy;
                  see "man lvm" for further details

		- new header file lvm-snap.h

		- Removed userland include (endian.h) and moved the
		  core <-> data macros to liblvm.h

lvm_proc_read_vg_group_info
lvm_proc_read_lv_info
lvm_proc_read_pv_info
lvm_do_create_proc_entry_of_vg
lvm_do_remove_proc_entry_of_vg
lvm_do_create_proc_entry_of_lv
lvm_do_remove_proc_entry_of_lv
lvm_do_create_proc_entry_of_pv
lvm_do_remove_proc_entry_of_pv
		- implemented to support the proc filesystem hierarchy

lvm_do_lv_create
		- extended to fill hash table in case of activation
		  of an existing snapshot logical volume
		- calls to set_device_ro()
		- PE used count is adjusted when creating snapshots

lvm_do_lv_remove
		- PE used count is adjusted when releasing snapshots

lvm_init	- Turned of elevator algorithm for LVM block device

lvm_blk_ioctl
		- calls to set_device_ro() in case of access change

lvm_blk_open	- Permissions bug on the block device

lvm_do_lv_extend_reduce
		- fixed bug which exposed i/o errors while resizing logical
		  volumes under heavy load
		- enhanced to support resizing of snapshot logical volumes


lvm_do_lv_rename
		- enhancement for renaming active logical volumes (rather than
                  lvm_do_lv_remove()/lvm_do_lv_create() pair of calls)

lvm_do_vg_rename
		- enhancement for renaming active volume groups

lvm_write_COW_table_block
		- implemented; write single copy on write exception table
		  block to the disk



Tools
-----

vgcreate
lvcreate	- fixed size bug in case of SECTOR_SIZE != 512
		- used lv_setup_COW_table_for_create() after name change

lvchange
lvcreate
lvdisplay
lvextend
lvreduce
lvremove
lvrename	- support for LV_VG_NAME environment variable

lvmcreate_initrd
		- use temprary loop device rather than ram disk for creation 
		  now
		- changed the kernel module name to lvm-mod.o
		- changed the location of the kernel module for 2.4.0

lvremove	- no need to unlink the lv if we're using devfs
		- removing a snapshot now updates the source lv so it can
		  be subsequently removed as well.

lvrename	- changed to use new lv_rename() library function to
		  rename active logical volumes

vgchange	- removed vg_deactivate() calls

vgrename	- changed to use new vg_rename() library function to
		  rename active volume groups

vgscan		- avoided continue after call
                  to vg_remove_dir_and_group_and_nodes()
		- deleted snapshot reset stuff
                - removed vg_deactivate() calls
		- reworded VGDA not backed up message

Library
-------

lvm.h		- changed structure member name pv_name to pv_uuid

liblvm.h	- declared lvm_check_devfs

lv_show		- added output of space used for COW table

lvm_create_uuid	- implemented; creates a 32 byte long UUID

lvm_check_dev
lvm_check_partitioned_dev
		- added DASD major support


lvm_dir_cache	- avoided caching in case of reading /proc/partitons or devfs

lvm_remove_recursive
		- fixed returning an erorcode if file/directory
		  don't exist

pv_read_all_pv_of_vg
		- avoided double entries for PVs with multiple access pathes 

pv_get_kdev_t_by_number
		- implemented; gets the kdev_t address of a physical
                  volume given its internal number

pv_setup_for_create
		- initialize UUID in VG structure with lvm_create_uuid()

pv_write	- support automatic creation of PV UUIDs
		- use new function lvm_create_uuid()

lv_init_COW_table
		- implemented to zero the copy on write exception table
                  on physical volume(s)

lv_rename	- implemented to support kernel ioctl to rename an active
		  logical volume

lv_setup_snapshot_exception_table
		- fixed size bug in case of SECTOR_SIZE != 512
		- renamed to lv_setup_COW_table_for_create

lv_setup_COW_table_for_create
		- enhanced to take COW exception table at the beginning
		  of each physical extent into account

vg_cfgrestore	- implemented check for invalid backup in case
		  of changed structure sizes

vg_deactivate	- obsolete; removed

vg_rename	- implemented to support kernel ioctl to rename an active
		  volume group

vg_setup_for_create
		- initialize UUID in VG structure with lvm_create_uuid()
		- move start of LV structure array to sector boundary

vg_write	- support automatic creation of VG UUIDs
		- use new function lvm_create_uuid()

===============================================================================


Changelog for 0.8-pre02.10.1999 (included with SuSE 6.3) to 0.8final
--------------------------------------------------------------------

LVM
---
/usr/src/linux/drivers/block/ll_rw_blk.c
		- changed to support stacking of volume drivers (MD(LVM)

/usr/src/linux/fs/partitions/check.c
		- added /proc/partition support for LVM

Driver
------
do_lv_remove	- enhanced to support removal of snapshot logical volumes

general		- added lvm-snap.c with Andrea Arcangeli's (THX Andrea!)
                  snapshot support functions

Tools
-----

All tools	- implemented support for long options
                - additional exit states

Makefile	- avoided dynamic library search into generate directory

lvmcreate_initrd
		- kernel version parameter support

lvdisplay
pvdisplay
vgdisplay	- implemented option -c for colon seperated output
                  enabling easy parsing

lvmdiskscan	- fixed partition count bug

lvchange
lvcreate
lvextend
lvreduce
lvremove
lvrename
pvchange
pvmove
vgchange
vgcreate
vgextend
vgmerge
vgreduce
vgrename
vgsplit		- added support for LVM_AUTOBACKUP environment variable
		  (thx to Torsten Neuman <torsten@londo.rhein-main.de>)

vgscan		- use lvm_remove_recursive() instead of system ( "rm -fr ...

vgcfgrestore	- deleted check of lvmtab to avoid catch 22 situation


Library
-------
All functions	- changed to use debug_enter()/debug_leave()

debug_enter
debug_leave	- implemented to support better tracing

lvm_dir_cache	- added /proc/partitions support to gain performance

lvm_error	- implemented to support plan text error messages rather
                  than numbers

lvm_remove_recursive
		- created to avoid system("rm -fr ...

vg_status	- added malloc() of volume group structure

vg_cfgbackup	- implemented support for environment variable
		  LVM_VG_MAX_BACKUPS to set maximum backup history depth

vg_remove_dir_and_group_and_nodes
		- use lvm_remove_recursive() instead of system ( "rm -fr ...


===============================================================================
Changelog for LVM 0.7 to 0.8-pre02.10.1999
------------------------------------------

LVM
---

Driver
------
do_lv_create
lvm_map
lvm_snapshot_remap_block
lvm_snapshot_remap_new_block
		- enhanced to support creation of snapshot logical volumes

Tools
-----
lvcreate	- enhanced to support creation of snapshot logical volumes

lvmdiskscan	- added support for DAC960
		- changed open optimization because it fails in non
                  standard environments

lvremove	- enhanced to support deletion of snapshot logical volumes

lvchange	- enhanced to block attribute changes on snapshot LVs

lvextend
lvreduce	- enhanced to block resizing on snapshot LVs

pvcreate
vgremove	- additional exit codes


Library
-------
lvm_check_whole_disk_dev
		- implemeted; checks, if device mapps a whole disk

lvm_dir_cache_find
		- implemented; finds a slot in the directory cache
                  by giving the device name

lvm_partition_count
		- implemeted;
		  gets partition count (for eg. 16 for IDE or 8 for DAC960)

lvm_check_extended_partition
		- implemeted; checks, if device mapps an extended partition

lvm_check_kernel_lvmtab_consistency
		- implemented; checks, if lvmtab and kernel VG namelists
                  are consistent (names of active VGs _must_ exits in lvmtab).

lvm_dir_cache_select
		- deleted; internal support function for scandir()

lvm_tab_vg_check_exist_all_vg
		- free unused memory if recalled

pv_check_part.c	- rewritten using lvm_dir_cache_find()

pv_move		- fixed move bug on loop devices
                  (thx to Johannes Deisenhofer jo@hexmac.com)

pv_read_all_pv	- avoided open optimization because it fails in non
                  standard environments

lv_setup_for_extend.c
lv_setup_for_reduce.c
lvm_dir_cache.c
lvm_get_col_numbers.c
lvm_tab_get_free_blk_dev.c
lvm_tab_vg_check_exist_all_vg.c
lvm_tab_vg_insert.c
pv_find_all_pv_names.c
pv_move.c
pv_read_all_pv.c
pv_read_already_red.c
pv_reserve_release_pe.c
pv_status.c
vg_check_active.c
vg_check_exist.c
vg_setup_for_reduce.c
		- fixed potential NULL pointer free() calls
===============================================================================
Changelog for LVM 0.6 to 0.7
----------------------------

LVM
---
drivers/block/genhd.c
		- added function pointer call to lvm_hd_name ()

/usr/src/linux/drivers/block/ll_rw_blk.c
                - enhanced to support PVs on loop devices for
		  test/evaluation purposes


Driver
------
module_init/lvm_init
		- fixed a NULL pointer in case of LVM activated
                  without any previously existing gendisks
		- added lvm_hd_name_ptr setup

cleanup_module
		- added lvm_hd_name_ptr setup


Tools
-----
ALL		- added exit code 95 for driver/module not in kernel

lvmcreate_initrd
		- script to create an initial ram disk image containing
                  all neccessary files to change to a root filesystem
                  contained in a LV

lvmdiskscan	- enhanced to support loop devices

lvscan		- added total capacity display
pvscan

vgdisplay	- reformated option -s output

vgimport	- fixed MAX_LV bug

vgscan		- added VG and LV minor correction in case they overlap


Library-Functions
-----------------
liblvm.h	- rearanged includes due to 2.3.x changes

pv_get_size	- enhanced to support loop devices

lv_check_stripesize
		- fixed size bug

lvm_check_special
		- implemented; checks for and optionaly creates /dev/lvm

lvm_check_partitioned_dev
		- implemented; checks for a partitioned physical volume
                  (used by pv_get_size() and lvmdiskscan now)

lvm_dir_cache	- avoided useless allocation if cache was hit
                - added /dev/rd/

vg_read_with_pv_and_lv
		- added correction of block device major in case
                  of old logical volume major number

lvm_check_chars
lv_check_name
vg_check_name	- allowed '.' as valid character and checked for
                  invalid "." and ".." VG and LV names

pv_reserve_release_pe
		- fixed striped LV shrink bug

vg_check_exist_all_vg
		- fixed NULL pointer bug



===============================================================================
Changelog for LVM 0.5alpha to 0.6
---------------------------------

LVM
---
general         - changed to deal with up to 256 logical volumes
                  per volume group

Driver
------
lvm_chr_open    - moved spinlock code to lvm_chr_ioctl()

lvm_chr_ioctl   - added spinlock code and allowed some ioctl's
                  while another process holds the lock
                - fixed NULL pointer buf with VG_REDUCE
                - added LVM_LOCK_LVM ioctl

lvm_blk_ioctl   - enhanced BLKRASET/BLKRAGET ioctl to support
                  read ahead sectors per logical volume

do_vg_remove	- using do_lv_remove() avoided some code


Tools
-----
general		- changed to new LVM_LOCK_LVM

e2fsadm
lvcreate
Ivextend
lvreduce
lvmchange
vgreate          - added units to size option arguments to allow
                   kilo-/mega-/giga- and terabyte entries

lvmchange        - removed option r for read ahead sectors
                   (now implemented on a per logical volume base)

lvchange
lvcreate         - implemented option r (read ahead)

lvremove         - added linefeeds to stderr

pvscan           - added options s and n for short display and no volume group

vgchange         - added option l for changeing maximum logical volume number


Library-Functions
-----------------
lvm_check_number - supports units [mM] for megabyte, [gG] for gigabyte
                   and [tT] for terabyte now

lvm_lock         - changed to new LVM_LOCK_LVM ioctl

lvm_show_size    - fixed presentation bug with zero

lvm_tab_get_blk_dev
                 - implemented; gets an existing/new block device major/minor
                   based on the lvm_tab information

lv_change_read_ahead
                 - implemented to change lgocal volume read ahead
                   sector count (BLKRASET/BLKRAGET)

lv_create_dev_t  - obsoleted

lv_show          - added output of block device MAJOR:MINOR

lvm_tab_get_free_blk_dev
                 - created to deal with the free block special pool

lv_copy_from_disk
lv_copy_to_disk
pe_copy_from_disk
pe_copy_to_disk
pv_copy_from_disk
pv_copy_to_disk
vg_copy_from_disk
vg_copy_to_disk  - avoided conversion if architecture is __LITTLE_ENDIAN

vg_check_exist_all_vg
                 - changed to support free volume group names



===============================================================================
Changelog for LVM 0.4alpha to 0.5alpha
--------------------------------------

LVM
---
general          - ported to 2.2.x
                 - integrated with stock 2.0/2.1/2.2 kernels;
                   files involved:
                   - CREDITS
                   - MAINTAINERS
                   - Documentation/Configure.help
                   - drivers/block/Config.in
                   - drivers/block/Makefile
                   - drivers/block/README.lvm
                   - drivers/block/ll_rw_blk.c
                   - drivers/block/lvm.c
                   - include/linux/lvm.h
                   - include/linux/major.h
                   - kernel/ksyms.c

                 - obsoleted lvm_version.h
                 - ported to libc6

Driver
------
general          - implemented i/o statistic for logical volumes
                 - used __initfunc macro (>=2.1.x) to free some initial
                   functions memory
                 - fixed lvm_gendisk.part[] index error
                 - changed to official major numbers and removed use
                   of lvm_MajorNumber variable previously defined in
                   lvm_kernel.h

lvm.h            - enhaced pe_t structure definition by ios member
                   to hold i/o operations till logical volume activation
                 - removed LVM_MAJOR to use official
                   LVM_CHAR_MAJOR/LVM_BLOCK_MAJOR defind in
                   /usr/src/linux/include/linux/major.h
                 - implemented seperated disk and core VGDA structures
                   to support exchange of volume groups between
                   different platforms
                 - moved internal driver function prototypes to lvm.c

lvm_kernel.h     - removed lvm_MajorNumber
                 - obsoleted by merging into lvm.h

lvm_map          - added I/O statistic for reads and writes per
                   logical extent

do_lv_extend_reduce
                 - saved i/o statistics across logical volume extensions
                   and reductions

do_lv_create     - fixed LV index bug in case of renaming an LV

lvm_proc_get_info
                 - implemented line split in case of long LV name


Tools
-----
general          - corrected messages in many tools
                 - added exit states to all tools including man pages

e2fsadm          - implemented; uses e2fsck, lvextend, lvreduce and resize2fs
                   and /proc/mounts to resize ext2 filesystem and containing
                   logical volume

lvchange         - added check for volume group existence

lvcreate
lvrename
vgrename         - logical volume path length bug fixed

lvrename         - command line handling bug fixed

lvmsadc          - new logical volume manager system activity daemon

lvmsar           - new logical volume manager system activity reporter

pvmove           - enhanced to handle LE/PE move lists/ranges

vgextend         - avoided unecessary volume group exixtence check

lvcreate.c
lvrename.c
pvmove.c
vgcreate.c
vgmknodes.c
vgrename.c       - make volume group directory a preprocessor option



Library-Functions
-----------------
general          - implemented data layer functions (see below)

lvm_check_chars  - implemented to check allowed characters in VG, LV
                   and PV names

lv_check_on_pv   - fixed bug in PE loop

lv_check_consistency_all_lv
                 - added LV number check

lv_create_node   - added unlink() error return

lvm_lock.c
lv_create_kdev_t
vg_create_dir_and_group.c
                 - changed to official major numbers

lvm_dir_cache
pv_check_name    - corrected handling of devfs names

lv_read_all_lv_of_vg
                 - fixed free() bug

lv_setup_for_extend
                 - fixed contiguous allocation extension bug if logical
                   volume not starting on first physical volume

lv_show_current_pe_text
                 - output # of PVs for LV distribution
                 - output # of i/o operations with option -v for
                   each logical extent and each physical volume; output
                   a total i/o summary

lv_status_byindex
lv_status_byname - enhanced to get lv_current_pe array from kernel too
                   (lv_status_with_pe() only did that before)
 
lv_status_with_pe
                 - obsoleted (has been used in lvdisplay.c only)

lvm_lock         - added creation of device special /dev/lvm (if missing)

lvm_get_col_numbers
                 - implemented (used by pvmove.c) to parse lists/ranges
                   of logical/physical extent numbers in the command line

lvm_tab_lv_read_by_name
                 - implemented (used by e2fsadm.c) to read LV VGDA part
                   from lvmtab.

pv_move_pes      - enhanced to handle LE/PE move lists

pv_reserve       - fixed contiguous logical volume allocation bug
                   in case of extension

vg_cfgbackup     - implemeted deeper backup history; now up to 10
                   backup files for each volume group are available in
                   /etc/lvmconf/


lv_check_name
pv_check_name
vg_check_name    - used new lvm_check_chars()

lv_copy_from_disk
lv_copy_to_disk
pe_copy_from_disk
pe_copy_to_disk
pv_copy_from_disk
pv_copy_to_disk
vg_copy_from_disk
vg_copy_to_disk  - implemented to convert between disk and core structures
                   (necessary to support exchange of volume groups between
                    different platforms); data layer functions

pv_check_consistency
                 - enhanced to check PE structure

pv_check_number  - fixed array index bug

pv_show_pe_text  - added output of disk offset in sectors of 512B

lv_read_all_lv_of_vg
lv_write_all_lv_of_vg
lv_write
pv_read
pv_write 
vg_read
vg_write         - seperated disk and core structures by using
                   new functions ??_copy_{from/to}_disk()

vg_read          - hand back VG pointer in vg_read() in case of exported VG

lv_check_name.c
lv_create_remove.c
lv_extend_reduce.c
lv_le_remap.c
lv_setup_for_create.c
lv_status.c
pe_lock.c
pv_change.c
pv_status.c
vg_check_name.c
vg_create_dir_and_group.c
vg_create_dir_and_group_and_nodes.c
vg_extend_reduce.c
vg_set_clear_extendable.c
vg_setup_for_merge.c
vg_status.c
liblvm.h         - make volume group directory a preprocessor option


===============================================================================
Changelog for LVM 0.3alpha to 0.4alpha
--------------------------------------

LVM
---
general          - changed all short/long/char/etc. to uintNN_t and
                   #if'ing them to keep down with __uNN of 2.0.x

lvm.h            - changed LVM_LV_SIZE_MAX macro to return long long


Driver
------
general          - changed allocation from using kmalloc to vmalloc
                   to gain larger memory chunks (no 256GB with PE size 4MB)

lvm_chr_open     - #if'd spinlock code to keep down with 2.0.x


Tools
-----
lvmdiskscan      - implemented; scans for all
                   disks / multiple devices / partitions available

vgck             - implemented to do a consistency check
                   of volume group descriptor areas

vgextend         - moved extend structure stuff to lib layer

vgreduce         - moved reduce structure stuff to lib layer

vgmerge
vgsplit          - implemented to split or merge volume groups


Library-Functions
-----------------
vg_check_name    - additional check for EXPORTED VG name

vg_free          - implemented to free malloced memory of a core VGDA

vg_setup_for_extend
                 - created from moved code in vgextend.c

vg_setup_for_reduce
                 - created from moved code in vgreduce.c

lvm_show_size    - renamed from show_size and changed
                   size parameter to type long long

lvm_show_filetype
                 - renamed from filetype_show



===============================================================================
Changelog for LVM 0.2alpha to 0.3alpha
--------------------------------------

LVM
---
general          - ported to Linux 2.1.98 to 2.1.102
                 - added support for free volume group and
                   logical volume names
                 - added support for MD (multiple device) usage
                 - implemented full pvmove function to be able to move
                   all types of logical volumes (linear/striped/contiguous)
                 - added LVM shared library
                 - added checking for /etc/lvmtab and /etc/lvmtab.d existence
                 - changed name of ??_store* functions to ??_write*
                   to get consistency with ??_read* function names
                 - avoided creating backup files, if they didn't change

Driver
------
lv_chr_ioctl     - implemented LV_STATUS_BYINDEX ioctl
                 - changed LV_STATUS to LV_STATUS_BYNAME ioctl
                 - implemented VG_SET_EXTENDABLE ioctl

lvm_map          - added IDE4/IDE5 majors for Linux > 2.1.9x

lvm_proc_get_info
                 - changed output format of /proc/lvm

lvm.h            - reintegrated lvm_v1.h to form one lvm.h with all
                   structure versions


Tools
-----
lvcreate         - implemented -n option for free logical volume names

lvrename         - implemented; supports renaming of logical volumes

lvscan           - implemented; scans for logical volumes in all volume groups

pvchange         - avoided option -c

pvdisplay        - implemented option -s

pvmove           - implemented physical extent move for a single logical
                   volume; supported striped and/or contiguous logical volumes

vgchange         - implemented option -x

vgextend
vgreduce         - added extension/reduction lock (vgchange -x n ...)

vgdisplay        - used vg_read_with_pv_and_lv() instead of
                   lvm_tab_vg_read_with_pv_and_lv() for option -D

vgmknodes        - implemented to support creation of volume group
                   directory and special files in case of deletion

vgrename         - implemented; supports renaming of volume groups

pvcreate
vgcfgrestore
vgcreate
vgimport
vgexport
vgrename
vgremove
vgscan            - enhanced error checking of lvm_tab_vg_insert() and
                    lvm_tab_vg_remove()

vgrestore         - changed to support restore to dedicated physical volume
                    and to support path changes between physical volume
                    pathes on backup and actual physical volume pathes

pvchange
pvscan
vgimport          - obsoleted physical volume name change
                    (it's now in pv_read())



Library-Functions
-----------------
lvm_check_dev    - implemented to check for usable devices (SCSI, IDE, MD);
                   added IDE4/IDE5 majors for Linux > 2.1.9x

lvm_dir_cache    - implemented as directory cache function for block devices
                   (used to avoid direct directory handling in
                    pv_create_name_from_kdev_t.c, pv_read.c and pv_status.c)

lvm_filetype_show
                 - implemented

lvm_tab_vg_insert
lvm_tab_vg_remove
                 - several bug fixes

vg_number_from_name
lv_create_number_from_name
lv_number_from_name
lv_create_name   - removed (obsolete)

lv_number_from_name_in_vg
                 - implemented to avoid inline name string creation
                   (this obsoletd lv_number_from_name())

lvm_tab_get_free_vg_number
                 - bug fix for empty/no lvmtab file

pv_move_pes      - implemented; calculates multiple PEs to be moved
pv_move_pe       - implemented; called by pv_move_pes() to move one PE

pv_create_name_from_kdev_t
pv_read_all_pv
pv_status_all_pv - avoided direct directory scanning
                   (it's now in lvm_dir_cache())

pv_read          - implemented correction of physical volume name to
                   avoid it in the tools level

vg_check_exist   - bug fix for handling exported volume groups

lv_create_kdev_t.c
pv_check_consistency.c
pv_check_name
pv_create_name_from_kdev_t.c
pv_read.c
vg_create_dir_and_group.c
                 - added multiple device support

vg_show          - implemented display of extension/reduction lock

vg_set_extendable
vg_clear_extendable
                 - implemented


===============================================================================
Changelog for LVM 0.1alpha to 0.2alpha
--------------------------------------

LVM
---
general          - ported to Linux 2.1.60-62
                 - tested with Linux 2.1.31


Driver
------
lvm_chr_ioctl    - implemented ioctls to get number of active VGs
                   and list of VG names
                 - implemented ioctl to give an i/o protocol number


Tools
-----
all              - switched to lvm_tab_* functions to gain performance
                 - added several messages
                 - fixed stdin close bug

vgcfgrestore     - moved restore code partially to lib

vgscan           - implemented: builds /etc/lvmtab and /etc/lvmtab.d
                   from VGDAs on PVs




Library-Functions
-----------------

general         - inititlized all file handles with -1 to
                  avoid error close of stdin
                - started support for free VG and LV names

pv_get_index_by_kdev_t
                - renamed from pv_get_index

pv_get_index_by_name
                - implemented

lvm_get_iop_version
               - implemented: get's i/o protocol version from kernel

lvm_tab_lv_check_exist
                - implemented

lvm_tab_vg_insert
                - implemented

lvm_tab_vg_read_with_pv_and_lv
                - implemented

lvm_tab_vg_read
                - implemented

lvm_tab_vg_remove
                - implemented

lvm_tab_vg_check_exist
                - implemented

lvm_tab_vg_check_exist_all_vg
                - implemented

lvm_tab_read
                - implemented

lvm_tab_store
                - implemented

lv_get_index_by_name
                - renamed form lv_get_index and changed formal paramter
                  list sequence

lv_get_index_by_kdev_t
                - implemented

lv_status_all_lv_of_vg
                - changed formal parameters to avoid vg_read - call

vg_remove_dir_and_group_and_nodes
                - implemented

vg_cfgbackup    - added option to avoid .old backups and .conf
                  suffixes for /etc/lvmtab.d

vg_cfgrestore   - implemented

vg_status       - changed formal parameters in call to lv_status_all_lv_of_vg




===============================================================================
Changelog for LVM 0.0alpha to 0.1alpha
--------------------------------------

LVM
---
general          - Ported to Linux 2.1.57


Driver
------
general          - fixed some NULL-Pointer references
                 - added use of ioctl macros

lvm_chr_open /   - fixed race condition
lvm_chr_close

lvm_chr_ioctl    - implemented physical volume flush and invalidate buffers
                   ioctl to avoid reading data of inavailable physical
                   volumes from buffer cache (see pv_flush in library)
            
Tools
-----
lvcreate         - several messages added

lvreduce         - fixed segfault

pvcreate         - corrected option -f handling

pvdata           - removed direct read of physical vlome name list
                   from disk; used new pv_read_namelist() instead

pvmove           - several bugs fixed

pvscan           - added informational message to use pvchange in case
                   of invalid physical volume name (caused by HW changes)
                 - changed messages for physical volume in no volume group /
                   in exported volume group

vgdisplay        - added -s option: displays short listing of
                                    existing volume groups

vgimport         - fixed wrong correction handling of device names

vgreduce         - fixed segfault
                 - avoided reducing to 0 physical volumes
                 - added -a option: reduces volume group by all free
                                    physical volumes


Library-Functions
-----------------
general          - fixed bugs with always using pv[0] instead off actual pv

pv_check_part    - added support for extended partitions

pv_create_name_from_kdev_t
                 - corrected and extended PV name generation for IDE

pv_flush         - user space part to flush buffer cache and invalidate
                   buffers for individual physical volumes
                   (see PV_FLUSH in lvm_chr_ioctl of driver)

pv_get_size      - extended partitions now supported

pv_number_check  - implemented

pv_read          - finished looping trough all possible device specials
                   after ENODEVs and ENXIOs to become faster;
                   called pv_flush before reads

pv_read_all_pe_of_vg
                 - used pv_number_check to sort PE arrays by PV number

pv_read_namelist - implemented to read namelist from the VGDA on disk

vg_check_name    - support for full volume group path (eg. /dev/vg00)

vg_show          - added a row for maximum logical volume size
