27/05/1998 - $Date: 2004/02/16 14:41:30 $ Logical Volume Manager Changelog Changelog for 1.0.7 to 1.0.8 Driver ------ o fixed list handling in lvm_find_exception_table() o corrected physical extent counters Tools ----- o fixed minor number assignment bug in vgscan o fixed bug preventing to give an MD on the lvcreate command line o fixed memory leak in vgimport Lib --- o fixed memory leak in lvm_tab_check_free_lv_number() o fixed memory leak in vg_check_active() Manuals ------- o corrected default PE size in vgcreate(8) =============================================================================== Changelog for 1.0.6 to 1.0.7 Driver ------ o fixed lvextend/lvreduce bug on snapshots preventing correct reload of the excpetion table possibly giving wrong snapshot content. Tools ----- o "lvremove --autobackup" takes an argument o e2fsadm environment variable bug fixed o square brackets now match up in pvmove -v display Lib --- o fixed pv_read_all_pv() bug in case of no PVs o liblvm.h, lvm_check_dev.c, lvm_check_partitioned_dev.c, lvm_dir_cache.c support for i2o block devices added =============================================================================== Changelog for 1.0.5 to 1.0.6 Driver ------ o fixed lvrename bug leaving wrong filesystem entries around in /proc/lvm/ Tools ----- o fixed vgimport bug with out-of-sequence physical volume numbers o fixed "lvmsar -h" bug o default PE size for vgcreate is now 32MB Lib --- o array dereference bug fixed in vg_check_active.c Fixed output redirect to stderr in various scripts. =============================================================================== Changelog for 1.0.4 to 1.0.5 Driver ------ o Fixed pvmove lock bug in lvm_do_le_remap o use blk_ioctl() of blkpg.c in lvm_blk_ioctl in order to support BLKBSZSET and other general ioctls o Fixed OBO error on vg array access Tools ----- o vgscan - Workaround for minor metadata corruption bug in 1.1rc, for those downgrading. o vgcfgbackup - running vgcfgbackup with no VGs is not an error =============================================================================== Changelog for 1.0.3 to 1.0.4 Driver ------ o Support for NBD o /proc/partitions segfault fixed Tools ----- o pvmove - bug preventing moves beyond a 2GB offset fixed - try to move snapshot extents rejected - ignore_read bug fixed Library ------- o pv_move.c, liblvm.h - bug preventing moves beyond a 2GB offset fixed - ignore_read bug fixed - try to move snapshot extents rejected =============================================================================== Changelog for 1.0.2 to 1.0.3 LVM --- Tool fixes to support physical and logical volumes bigger than 1 Terabyte and up to 2 Terabytes in size. Driver ------ Tools ----- o lvcreate o lvextend o lvreduce - support logical volume sizes up to 2TB - 1 sector o pvcreate - option -s to overwrite the device size. Useful to fake physical volumes on smaller devices for test purposes or to set the device size correctly in case the OS reports a wrong one in rare cases o pvmove (involves pv_move_pes() in the library as well) - supports moves in inactive volume groups now - new option "-i" to ignore read errors on flaky or otherwise inaccessible devices o vgcfgrestore - option -b to give a backup history number together with "-n VolumeGroupName" - option -i to ignore the size of the device to be restored to - no need to give -n *and* -f any longer o vgcreate: remove wrong check for ~64k extents maximum o vgchange - drop snapshot logical volumes which have broken exception tables during volume group activation o vgexport can now export volume groups which are not in /etc/lvmtab* o vgscan - option -f to force changes of volume group and logical volume device numbers which potentially violates NFS client access in case of exported filesystems on changed logical volumes - option -r to remove all snapshots in all volume groups or snapshots in a specified volume group (useful in case snapshots are corrupt) Library ------- o lvm_check_number_ll - new (long long) returning function to convert number strings with optional size suffixes o lvm_tab_check_free_lv_number - new function to check if a single logical volume device number is already used o pv_get_size_ll - new ( long long) returning function to support 1TB < PV size < 2TB o pv_move_pes - support for moves in inactive volume groups and for ignoring read errors o pv_write - zero gap between PV structure and VG structure on disk in order to avoid confusing other tools =============================================================================== Changelog for 1.0.1 to 1.0.2 LVM --- Driver ------ o now works with 2.4.17 o reduce stack footprint with snapshots o sparc 64 fixes (tests needed!) o avoid oops when accessing PVs of an inactive VG Tools ----- o persistent LV device minors to support client recovery after a NFS server reboot/failover o ataraid device support o support loop devices (they do not show up in /proc/partitions) o fixed contiguous PV array bug in pv_read_all_pv_of_vg.c o avoid flushing PVs o DAC960 recognition bugs fixed =============================================================================== Changelog for 1.0 to 1.0.1 LVM --- LVM now supports both version 1 and version 2 data formats. No need to upgrade ! Driver ------ o now works with 2.4.16 Tools ----- o support for version 1 and 2 data formats o Now stores new and changed PVs in version 1 data format! o zero pv and lv arrays in vg_cfgrestore o removing of PVs from VGs with snapshot now works (changes in pv_read_all_pv_of_vg(), pv_read_all_pe_of_vg(), vg_setup_for_merge(), vg_setup_for_extend(), vg_setup_for_reduce(), vg_setup_for_split() and liblvm.h) o persistant LV and PV numbers o lvmcreate_initd now supports devfs o support for non-partitioned MDs o SPARC compilation fixes =============================================================================== Changelog for 0.9.1_beta8 to 1.0 LVM --- o fixed pvversion so handle downgrades more gracefully o Fixed various messages in tools Install ------- README.1st - covers upgrade/downgrade process detailed; !!!THIS IS A MUST READ OR SUFFER FILE!!! =============================================================================== Changelog for 0.9.1_beta7 to 0.9.1_beta8 ---------------------------------------- LVM --- Fixed various messages in tools and edited some man pages. Driver ------ o rwsem support in 2.4 and compatibility for 2.2 o race window related to fsync_dev closed o locking for queued writes fixed Tools ----- pvversion - new tool to support upgrade/downgrade of metadata format to version 2 (the one used with this release) or 1 (the one in place up to LVM 0.9.1 Beta 7) pvdisplay - display PV from disk rather than from kernel vgremove - fixed SEGV when verbose Library ------- liblvm.h pv_copy.c vg_setup_for_create - support to make sure that pvdisplay shows PV from disk rather than from kernel pv_check_free.c pv_copy pv_move vg_setup_for_create.c - use new userland PV strcuture member pe_start, which holds the sector offset to the first PE and is filled in by pvversion on upgrade Install ------- README.1st - covers upgrade/downgrade process detailed; !!!THIS IS A MUST READ OR SUFFER FILE!!! =============================================================================== 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 now 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 ) 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