diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bc53c32 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/LVM2.2.03.13.tgz diff --git a/.lvm2.metadata b/.lvm2.metadata new file mode 100644 index 0000000..2b81d0c --- /dev/null +++ b/.lvm2.metadata @@ -0,0 +1 @@ +29896ea2d391fcc94e547bf4219b7a8be88eb3a3 SOURCES/LVM2.2.03.13.tgz diff --git a/SOURCES/0001-config-comment-all-default-settings.patch b/SOURCES/0001-config-comment-all-default-settings.patch new file mode 100644 index 0000000..9c597c6 --- /dev/null +++ b/SOURCES/0001-config-comment-all-default-settings.patch @@ -0,0 +1,630 @@ +From 2159c817d3c659086842d286dd70342223555384 Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Tue, 16 Mar 2021 09:51:41 -0500 +Subject: [PATCH 01/11] config: comment all default settings + +--- + lib/config/config_settings.h | 174 +++++++++++++++++++++---------------------- + 1 file changed, 87 insertions(+), 87 deletions(-) + +diff --git a/lib/config/config_settings.h b/lib/config/config_settings.h +index fa87bea..9cf73ce 100644 +--- a/lib/config/config_settings.h ++++ b/lib/config/config_settings.h +@@ -205,7 +205,7 @@ cfg_section(local_CFG_SECTION, "local", root_CFG_SECTION, 0, vsn(2, 2, 117), 0, + "# Please take care that each setting only appears once if uncommenting\n" \ + "# example settings in this file and never copy this file between hosts.\n\n" + +-cfg(config_checks_CFG, "checks", config_CFG_SECTION, 0, CFG_TYPE_BOOL, 1, vsn(2, 2, 99), NULL, 0, NULL, ++cfg(config_checks_CFG, "checks", config_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 1, vsn(2, 2, 99), NULL, 0, NULL, + "If enabled, any LVM configuration mismatch is reported.\n" + "This implies checking that the configuration key is understood by\n" + "LVM and that the value of the key is the proper type. If disabled,\n" +@@ -213,22 +213,22 @@ cfg(config_checks_CFG, "checks", config_CFG_SECTION, 0, CFG_TYPE_BOOL, 1, vsn(2, + "without any warning (a message about the configuration key not being\n" + "found is issued in verbose mode only).\n") + +-cfg(config_abort_on_errors_CFG, "abort_on_errors", config_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(2,2,99), NULL, 0, NULL, ++cfg(config_abort_on_errors_CFG, "abort_on_errors", config_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(2,2,99), NULL, 0, NULL, + "Abort the LVM process if a configuration mismatch is found.\n") + +-cfg_runtime(config_profile_dir_CFG, "profile_dir", config_CFG_SECTION, CFG_DISALLOW_INTERACTIVE, CFG_TYPE_STRING, vsn(2, 2, 99), 0, NULL, ++cfg_runtime(config_profile_dir_CFG, "profile_dir", config_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_DISALLOW_INTERACTIVE, CFG_TYPE_STRING, vsn(2, 2, 99), 0, NULL, + "Directory where LVM looks for configuration profiles.\n") + +-cfg(devices_dir_CFG, "dir", devices_CFG_SECTION, CFG_ADVANCED, CFG_TYPE_STRING, DEFAULT_DEV_DIR, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(devices_dir_CFG, "dir", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_ADVANCED, CFG_TYPE_STRING, DEFAULT_DEV_DIR, vsn(1, 0, 0), NULL, 0, NULL, + "Directory in which to create volume group device nodes.\n" + "Commands also accept this as a prefix on volume group names.\n") + +-cfg_array(devices_scan_CFG, "scan", devices_CFG_SECTION, CFG_ADVANCED, CFG_TYPE_STRING, "#S/dev", vsn(1, 0, 0), NULL, 0, NULL, ++cfg_array(devices_scan_CFG, "scan", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_ADVANCED, CFG_TYPE_STRING, "#S/dev", vsn(1, 0, 0), NULL, 0, NULL, + "Directories containing device nodes to use with LVM.\n") + + cfg_array(devices_loopfiles_CFG, "loopfiles", devices_CFG_SECTION, CFG_DEFAULT_UNDEFINED | CFG_UNSUPPORTED, CFG_TYPE_STRING, NULL, vsn(1, 2, 0), NULL, vsn(2, 3, 0), NULL, NULL) + +-cfg(devices_obtain_device_list_from_udev_CFG, "obtain_device_list_from_udev", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_OBTAIN_DEVICE_LIST_FROM_UDEV, vsn(2, 2, 85), NULL, 0, NULL, ++cfg(devices_obtain_device_list_from_udev_CFG, "obtain_device_list_from_udev", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_OBTAIN_DEVICE_LIST_FROM_UDEV, vsn(2, 2, 85), NULL, 0, NULL, + "Obtain the list of available devices from udev.\n" + "This avoids opening or using any inapplicable non-block devices or\n" + "subdirectories found in the udev directory. Any device node or\n" +@@ -237,7 +237,7 @@ cfg(devices_obtain_device_list_from_udev_CFG, "obtain_device_list_from_udev", de + "directories will be scanned fully. LVM needs to be compiled with\n" + "udev support for this setting to apply.\n") + +-cfg(devices_external_device_info_source_CFG, "external_device_info_source", devices_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_EXTERNAL_DEVICE_INFO_SOURCE, vsn(2, 2, 116), NULL, 0, NULL, ++cfg(devices_external_device_info_source_CFG, "external_device_info_source", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_EXTERNAL_DEVICE_INFO_SOURCE, vsn(2, 2, 116), NULL, 0, NULL, + "Enable device information from udev.\n" + "If set to \"udev\", lvm will supplement its own native device information\n" + "with information from libudev. This can potentially improve the detection\n" +@@ -360,12 +360,12 @@ cfg_array(devices_types_CFG, "types", devices_CFG_SECTION, CFG_DEFAULT_UNDEFINED + "types = [ \"fd\", 16 ]\n" + "#\n") + +-cfg(devices_sysfs_scan_CFG, "sysfs_scan", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_SYSFS_SCAN, vsn(1, 0, 8), NULL, 0, NULL, ++cfg(devices_sysfs_scan_CFG, "sysfs_scan", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_SYSFS_SCAN, vsn(1, 0, 8), NULL, 0, NULL, + "Restrict device scanning to block devices appearing in sysfs.\n" + "This is a quick way of filtering out block devices that are not\n" + "present on the system. sysfs must be part of the kernel and mounted.)\n") + +-cfg(devices_scan_lvs_CFG, "scan_lvs", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_SCAN_LVS, vsn(2, 2, 182), NULL, 0, NULL, ++cfg(devices_scan_lvs_CFG, "scan_lvs", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_SCAN_LVS, vsn(2, 2, 182), NULL, 0, NULL, + "Scan LVM LVs for layered PVs, allowing LVs to be used as PVs.\n" + "When 1, LVM will detect PVs layered on LVs, and caution must be\n" + "taken to avoid a host accessing a layered VG that may not belong\n" +@@ -378,14 +378,14 @@ cfg(devices_scan_lvs_CFG, "scan_lvs", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEF + "an LV. The LVs are ignored using a built in device filter that\n" + "identifies and excludes LVs.\n") + +-cfg(devices_multipath_component_detection_CFG, "multipath_component_detection", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MULTIPATH_COMPONENT_DETECTION, vsn(2, 2, 89), NULL, 0, NULL, ++cfg(devices_multipath_component_detection_CFG, "multipath_component_detection", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_MULTIPATH_COMPONENT_DETECTION, vsn(2, 2, 89), NULL, 0, NULL, + "Ignore devices that are components of DM multipath devices.\n") + + cfg(devices_multipath_wwids_file_CFG, "multipath_wwids_file", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_ALLOW_EMPTY, CFG_TYPE_STRING, DEFAULT_WWIDS_FILE, vsn(2, 3, 13), NULL, 0, NULL, + "The path to the multipath wwids file used for multipath component detection.\n" + "Set this to an empty string to disable the use of the multipath wwids file.\n") + +-cfg(devices_md_component_detection_CFG, "md_component_detection", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MD_COMPONENT_DETECTION, vsn(1, 0, 18), NULL, 0, NULL, ++cfg(devices_md_component_detection_CFG, "md_component_detection", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_MD_COMPONENT_DETECTION, vsn(1, 0, 18), NULL, 0, NULL, + "Enable detection and exclusion of MD component devices.\n" + "An MD component device is a block device that MD uses as part\n" + "of a software RAID virtual device. When an LVM PV is created\n" +@@ -411,12 +411,12 @@ cfg(devices_md_component_checks_CFG, "md_component_checks", devices_CFG_SECTION, + " This requires an extra read at the end of devices.\n" + "#\n") + +-cfg(devices_fw_raid_component_detection_CFG, "fw_raid_component_detection", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_FW_RAID_COMPONENT_DETECTION, vsn(2, 2, 112), NULL, 0, NULL, ++cfg(devices_fw_raid_component_detection_CFG, "fw_raid_component_detection", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_FW_RAID_COMPONENT_DETECTION, vsn(2, 2, 112), NULL, 0, NULL, + "Ignore devices that are components of firmware RAID devices.\n" + "LVM must use an external_device_info_source other than none for this\n" + "detection to execute.\n") + +-cfg(devices_md_chunk_alignment_CFG, "md_chunk_alignment", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MD_CHUNK_ALIGNMENT, vsn(2, 2, 48), NULL, 0, NULL, ++cfg(devices_md_chunk_alignment_CFG, "md_chunk_alignment", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_MD_CHUNK_ALIGNMENT, vsn(2, 2, 48), NULL, 0, NULL, + "Align the start of a PV data area with md device's stripe-width.\n" + "This applies if a PV is placed directly on an md device.\n" + "default_data_alignment will be overridden if it is not aligned\n" +@@ -430,7 +430,7 @@ cfg(devices_default_data_alignment_CFG, "default_data_alignment", devices_CFG_SE + "This setting is overridden by data_alignment and the --dataalignment\n" + "option.\n") + +-cfg(devices_data_alignment_detection_CFG, "data_alignment_detection", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_DATA_ALIGNMENT_DETECTION, vsn(2, 2, 51), NULL, 0, NULL, ++cfg(devices_data_alignment_detection_CFG, "data_alignment_detection", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_DATA_ALIGNMENT_DETECTION, vsn(2, 2, 51), NULL, 0, NULL, + "Align the start of a PV data area with sysfs io properties.\n" + "The start of a PV data area will be a multiple of minimum_io_size or\n" + "optimal_io_size exposed in sysfs. minimum_io_size is the smallest\n" +@@ -444,14 +444,14 @@ cfg(devices_data_alignment_detection_CFG, "data_alignment_detection", devices_CF + "This setting is overridden by data_alignment and the --dataalignment\n" + "option.\n") + +-cfg(devices_data_alignment_CFG, "data_alignment", devices_CFG_SECTION, 0, CFG_TYPE_INT, 0, vsn(2, 2, 45), NULL, 0, NULL, ++cfg(devices_data_alignment_CFG, "data_alignment", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, 0, vsn(2, 2, 45), NULL, 0, NULL, + "Align the start of a PV data area with this number of KiB.\n" + "When non-zero, this setting overrides default_data_alignment.\n" + "Set to 0 to disable, in which case default_data_alignment\n" + "is used to align the first PE in units of MiB.\n" + "This setting is overridden by the --dataalignment option.\n") + +-cfg(devices_data_alignment_offset_detection_CFG, "data_alignment_offset_detection", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_DATA_ALIGNMENT_OFFSET_DETECTION, vsn(2, 2, 50), NULL, 0, NULL, ++cfg(devices_data_alignment_offset_detection_CFG, "data_alignment_offset_detection", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_DATA_ALIGNMENT_OFFSET_DETECTION, vsn(2, 2, 50), NULL, 0, NULL, + "Shift the start of an aligned PV data area based on sysfs information.\n" + "After a PV data area is aligned, it will be shifted by the\n" + "alignment_offset exposed in sysfs. This offset is often 0, but may\n" +@@ -461,12 +461,12 @@ cfg(devices_data_alignment_offset_detection_CFG, "data_alignment_offset_detectio + "LBA -1, and consequently sector 63 is aligned on a 4KiB boundary).\n" + "This setting is overridden by the --dataalignmentoffset option.\n") + +-cfg(devices_ignore_suspended_devices_CFG, "ignore_suspended_devices", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_IGNORE_SUSPENDED_DEVICES, vsn(1, 2, 19), NULL, 0, NULL, ++cfg(devices_ignore_suspended_devices_CFG, "ignore_suspended_devices", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_IGNORE_SUSPENDED_DEVICES, vsn(1, 2, 19), NULL, 0, NULL, + "Ignore DM devices that have I/O suspended while scanning devices.\n" + "Otherwise, LVM waits for a suspended device to become accessible.\n" + "This should only be needed in recovery situations.\n") + +-cfg(devices_ignore_lvm_mirrors_CFG, "ignore_lvm_mirrors", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_IGNORE_LVM_MIRRORS, vsn(2, 2, 104), NULL, 0, NULL, ++cfg(devices_ignore_lvm_mirrors_CFG, "ignore_lvm_mirrors", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_IGNORE_LVM_MIRRORS, vsn(2, 2, 104), NULL, 0, NULL, + "Do not scan 'mirror' LVs to avoid possible deadlocks.\n" + "This avoids possible deadlocks when using the 'mirror' segment type.\n" + "This setting determines whether LVs using the 'mirror' segment type\n" +@@ -484,19 +484,19 @@ cfg(devices_ignore_lvm_mirrors_CFG, "ignore_lvm_mirrors", devices_CFG_SECTION, 0 + "apply to LVM RAID types like 'raid1' which handle failures in a\n" + "different way, making them a better choice for VG stacking.\n") + +-cfg(devices_disable_after_error_count_CFG, "disable_after_error_count", devices_CFG_SECTION, 0, CFG_TYPE_INT, 0, vsn(2, 2, 75), NULL, vsn(2, 3, 0), NULL, ++cfg(devices_disable_after_error_count_CFG, "disable_after_error_count", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, 0, vsn(2, 2, 75), NULL, vsn(2, 3, 0), NULL, + NULL) + +-cfg(devices_require_restorefile_with_uuid_CFG, "require_restorefile_with_uuid", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_REQUIRE_RESTOREFILE_WITH_UUID, vsn(2, 2, 73), NULL, 0, NULL, ++cfg(devices_require_restorefile_with_uuid_CFG, "require_restorefile_with_uuid", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_REQUIRE_RESTOREFILE_WITH_UUID, vsn(2, 2, 73), NULL, 0, NULL, + "Allow use of pvcreate --uuid without requiring --restorefile.\n") + +-cfg(devices_pv_min_size_CFG, "pv_min_size", devices_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_PV_MIN_SIZE_KB, vsn(2, 2, 85), NULL, 0, NULL, ++cfg(devices_pv_min_size_CFG, "pv_min_size", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_PV_MIN_SIZE_KB, vsn(2, 2, 85), NULL, 0, NULL, + "Minimum size in KiB of block devices which can be used as PVs.\n" + "In a clustered environment all nodes must use the same value.\n" + "Any value smaller than 512KiB is ignored. The previous built-in\n" + "value was 512.\n") + +-cfg(devices_issue_discards_CFG, "issue_discards", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ISSUE_DISCARDS, vsn(2, 2, 85), NULL, 0, NULL, ++cfg(devices_issue_discards_CFG, "issue_discards", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_ISSUE_DISCARDS, vsn(2, 2, 85), NULL, 0, NULL, + "Issue discards to PVs that are no longer used by an LV.\n" + "Discards are sent to an LV's underlying physical volumes when the LV\n" + "is no longer using the physical volumes' space, e.g. lvremove,\n" +@@ -508,7 +508,7 @@ cfg(devices_issue_discards_CFG, "issue_discards", devices_CFG_SECTION, 0, CFG_TY + "generally do. If enabled, discards will only be issued if both the\n" + "storage and kernel provide support.\n") + +-cfg(devices_allow_changes_with_duplicate_pvs_CFG, "allow_changes_with_duplicate_pvs", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ALLOW_CHANGES_WITH_DUPLICATE_PVS, vsn(2, 2, 153), NULL, 0, NULL, ++cfg(devices_allow_changes_with_duplicate_pvs_CFG, "allow_changes_with_duplicate_pvs", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_ALLOW_CHANGES_WITH_DUPLICATE_PVS, vsn(2, 2, 153), NULL, 0, NULL, + "Allow VG modification while a PV appears on multiple devices.\n" + "When a PV appears on multiple devices, LVM attempts to choose the\n" + "best device to use for the PV. If the devices represent the same\n" +@@ -520,7 +520,7 @@ cfg(devices_allow_changes_with_duplicate_pvs_CFG, "allow_changes_with_duplicate_ + "Enabling this setting allows the VG to be used as usual even with\n" + "uncertain devices.\n") + +-cfg(devices_allow_mixed_block_sizes_CFG, "allow_mixed_block_sizes", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(2, 3, 6), NULL, 0, NULL, ++cfg(devices_allow_mixed_block_sizes_CFG, "allow_mixed_block_sizes", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(2, 3, 6), NULL, 0, NULL, + "Allow PVs in the same VG with different logical block sizes.\n" + "When allowed, the user is responsible to ensure that an LV is\n" + "using PVs with matching block sizes when necessary.\n") +@@ -543,14 +543,14 @@ cfg_array(allocation_cling_tag_list_CFG, "cling_tag_list", allocation_CFG_SECTIO + "cling_tag_list = [ \"@site1\", \"@site2\" ]\n" + "#\n") + +-cfg(allocation_maximise_cling_CFG, "maximise_cling", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MAXIMISE_CLING, vsn(2, 2, 85), NULL, 0, NULL, ++cfg(allocation_maximise_cling_CFG, "maximise_cling", allocation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_MAXIMISE_CLING, vsn(2, 2, 85), NULL, 0, NULL, + "Use a previous allocation algorithm.\n" + "Changes made in version 2.02.85 extended the reach of the 'cling'\n" + "policies to detect more situations where data can be grouped onto\n" + "the same disks. This setting can be used to disable the changes\n" + "and revert to the previous algorithm.\n") + +-cfg(allocation_use_blkid_wiping_CFG, "use_blkid_wiping", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_USE_BLKID_WIPING, vsn(2, 2, 105), "@DEFAULT_USE_BLKID_WIPING@", 0, NULL, ++cfg(allocation_use_blkid_wiping_CFG, "use_blkid_wiping", allocation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_USE_BLKID_WIPING, vsn(2, 2, 105), "@DEFAULT_USE_BLKID_WIPING@", 0, NULL, + "Use blkid to detect and erase existing signatures on new PVs and LVs.\n" + "The blkid library can detect more signatures than the native LVM\n" + "detection code, but may take longer. LVM needs to be compiled with\n" +@@ -559,7 +559,7 @@ cfg(allocation_use_blkid_wiping_CFG, "use_blkid_wiping", allocation_CFG_SECTION, + "swap signature, and LUKS signatures. To see the list of signatures\n" + "recognized by blkid, check the output of the 'blkid -k' command.\n") + +-cfg(allocation_wipe_signatures_when_zeroing_new_lvs_CFG, "wipe_signatures_when_zeroing_new_lvs", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, 1, vsn(2, 2, 105), NULL, 0, NULL, ++cfg(allocation_wipe_signatures_when_zeroing_new_lvs_CFG, "wipe_signatures_when_zeroing_new_lvs", allocation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 1, vsn(2, 2, 105), NULL, 0, NULL, + "Look for and erase any signatures while zeroing a new LV.\n" + "The --wipesignatures option overrides this setting.\n" + "Zeroing is controlled by the -Z/--zero option, and if not specified,\n" +@@ -575,7 +575,7 @@ cfg(allocation_wipe_signatures_when_zeroing_new_lvs_CFG, "wipe_signatures_when_z + "When this setting is disabled, signatures on new LVs are not detected\n" + "or erased unless the --wipesignatures option is used directly.\n") + +-cfg(allocation_mirror_logs_require_separate_pvs_CFG, "mirror_logs_require_separate_pvs", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MIRROR_LOGS_REQUIRE_SEPARATE_PVS, vsn(2, 2, 85), NULL, 0, NULL, ++cfg(allocation_mirror_logs_require_separate_pvs_CFG, "mirror_logs_require_separate_pvs", allocation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_MIRROR_LOGS_REQUIRE_SEPARATE_PVS, vsn(2, 2, 85), NULL, 0, NULL, + "Mirror logs and images will always use different PVs.\n" + "The default setting changed in version 2.02.85.\n") + +@@ -852,10 +852,10 @@ cfg(log_command_log_selection_CFG, "command_log_selection", log_CFG_SECTION, CFG + "For more information about selection criteria in general, see\n" + "lvm(8) man page.\n") + +-cfg(log_verbose_CFG, "verbose", log_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_VERBOSE, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(log_verbose_CFG, "verbose", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_VERBOSE, vsn(1, 0, 0), NULL, 0, NULL, + "Controls the messages sent to stdout or stderr.\n") + +-cfg(log_silent_CFG, "silent", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_SILENT, vsn(2, 2, 98), NULL, 0, NULL, ++cfg(log_silent_CFG, "silent", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_SILENT, vsn(2, 2, 98), NULL, 0, NULL, + "Suppress all non-essential messages from stdout.\n" + "This has the same effect as -qq. When enabled, the following commands\n" + "still produce output: dumpconfig, lvdisplay, lvmdiskscan, lvs, pvck,\n" +@@ -865,16 +865,16 @@ cfg(log_silent_CFG, "silent", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_SILENT, + "Any 'yes' or 'no' questions not overridden by other arguments are\n" + "suppressed and default to 'no'.\n") + +-cfg(log_syslog_CFG, "syslog", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_SYSLOG, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(log_syslog_CFG, "syslog", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_SYSLOG, vsn(1, 0, 0), NULL, 0, NULL, + "Send log messages through syslog.\n") + + cfg(log_file_CFG, "file", log_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL, 0, NULL, + "Write error and debug log messages to a file specified here.\n") + +-cfg(log_overwrite_CFG, "overwrite", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_OVERWRITE, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(log_overwrite_CFG, "overwrite", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_OVERWRITE, vsn(1, 0, 0), NULL, 0, NULL, + "Overwrite the log file each time the program is run.\n") + +-cfg(log_level_CFG, "level", log_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_LOGLEVEL, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(log_level_CFG, "level", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_LOGLEVEL, vsn(1, 0, 0), NULL, 0, NULL, + "The level of log messages that are sent to the log file or syslog.\n" + "There are 6 syslog-like log levels currently in use: 2 to 7 inclusive.\n" + "7 is the most verbose (LOG_DEBUG).\n") +@@ -882,23 +882,23 @@ cfg(log_level_CFG, "level", log_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_LOGLEVEL, + cfg(log_indent_CFG, "indent", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_INDENT, vsn(1, 0, 0), NULL, 0, NULL, + "Indent messages according to their severity.\n") + +-cfg(log_command_names_CFG, "command_names", log_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_CMD_NAME, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(log_command_names_CFG, "command_names", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_CMD_NAME, vsn(1, 0, 0), NULL, 0, NULL, + "Display the command name on each line of output.\n") + +-cfg(log_prefix_CFG, "prefix", log_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, DEFAULT_MSG_PREFIX, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(log_prefix_CFG, "prefix", log_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_ALLOW_EMPTY, CFG_TYPE_STRING, DEFAULT_MSG_PREFIX, vsn(1, 0, 0), NULL, 0, NULL, + "A prefix to use before the log message text.\n" + "(After the command name, if selected).\n" + "Two spaces allows you to see/grep the severity of each message.\n" + "To make the messages look similar to the original LVM tools use:\n" + "indent = 0, command_names = 1, prefix = \" -- \"\n") + +-cfg(log_activation_CFG, "activation", log_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(log_activation_CFG, "activation", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(1, 0, 0), NULL, 0, NULL, + "Log messages during activation.\n" + "Don't use this in low memory situations (can deadlock).\n") + + cfg(log_activate_file_CFG, "activate_file", log_CFG_SECTION, CFG_DEFAULT_UNDEFINED | CFG_UNSUPPORTED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL, 0, NULL, NULL) + +-cfg_array(log_debug_classes_CFG, "debug_classes", log_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, "#Smemory#Sdevices#Sio#Sactivation#Sallocation#Smetadata#Scache#Slocking#Slvmpolld#Sdbus", vsn(2, 2, 99), NULL, 0, NULL, ++cfg_array(log_debug_classes_CFG, "debug_classes", log_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_ALLOW_EMPTY, CFG_TYPE_STRING, "#Smemory#Sdevices#Sio#Sactivation#Sallocation#Smetadata#Scache#Slocking#Slvmpolld#Sdbus", vsn(2, 2, 99), NULL, 0, NULL, + "Select log messages by class.\n" + "Some debugging messages are assigned to a class and only appear in\n" + "debug output if the class is listed here. Classes currently\n" +@@ -913,55 +913,55 @@ cfg_array(log_debug_output_fields_CFG, "debug_output_fields", log_CFG_SECTION, C + "The fields included in debug output written to stderr.\n" + "Use \"all\" to include everything (the default).\n") + +-cfg(backup_backup_CFG, "backup", backup_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_BACKUP_ENABLED, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(backup_backup_CFG, "backup", backup_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_BACKUP_ENABLED, vsn(1, 0, 0), NULL, 0, NULL, + "Maintain a backup of the current metadata configuration.\n" + "Think very hard before turning this off!\n") + +-cfg_runtime(backup_backup_dir_CFG, "backup_dir", backup_CFG_SECTION, 0, CFG_TYPE_STRING, vsn(1, 0, 0), 0, NULL, ++cfg_runtime(backup_backup_dir_CFG, "backup_dir", backup_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, vsn(1, 0, 0), 0, NULL, + "Location of the metadata backup files.\n" + "Remember to back up this directory regularly!\n") + +-cfg(backup_archive_CFG, "archive", backup_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ARCHIVE_ENABLED, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(backup_archive_CFG, "archive", backup_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_ARCHIVE_ENABLED, vsn(1, 0, 0), NULL, 0, NULL, + "Maintain an archive of old metadata configurations.\n" + "Think very hard before turning this off.\n") + +-cfg_runtime(backup_archive_dir_CFG, "archive_dir", backup_CFG_SECTION, 0, CFG_TYPE_STRING, vsn(1, 0, 0), 0, NULL, ++cfg_runtime(backup_archive_dir_CFG, "archive_dir", backup_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, vsn(1, 0, 0), 0, NULL, + "Location of the metdata archive files.\n" + "Remember to back up this directory regularly!\n") + +-cfg(backup_retain_min_CFG, "retain_min", backup_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_ARCHIVE_NUMBER, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(backup_retain_min_CFG, "retain_min", backup_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_ARCHIVE_NUMBER, vsn(1, 0, 0), NULL, 0, NULL, + "Minimum number of archives to keep.\n") + +-cfg(backup_retain_days_CFG, "retain_days", backup_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_ARCHIVE_DAYS, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(backup_retain_days_CFG, "retain_days", backup_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_ARCHIVE_DAYS, vsn(1, 0, 0), NULL, 0, NULL, + "Minimum number of days to keep archive files.\n") + +-cfg(shell_history_size_CFG, "history_size", shell_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_MAX_HISTORY, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(shell_history_size_CFG, "history_size", shell_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_MAX_HISTORY, vsn(1, 0, 0), NULL, 0, NULL, + "Number of lines of history to store in ~/.lvm_history.\n") + +-cfg(global_umask_CFG, "umask", global_CFG_SECTION, CFG_FORMAT_INT_OCTAL, CFG_TYPE_INT, DEFAULT_UMASK, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(global_umask_CFG, "umask", global_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_FORMAT_INT_OCTAL, CFG_TYPE_INT, DEFAULT_UMASK, vsn(1, 0, 0), NULL, 0, NULL, + "The file creation mask for any files and directories created.\n" + "Interpreted as octal if the first digit is zero.\n") + +-cfg(global_test_CFG, "test", global_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(global_test_CFG, "test", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(1, 0, 0), NULL, 0, NULL, + "No on-disk metadata changes will be made in test mode.\n" + "Equivalent to having the -t option on every command.\n") + +-cfg(global_units_CFG, "units", global_CFG_SECTION, CFG_PROFILABLE, CFG_TYPE_STRING, DEFAULT_UNITS, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(global_units_CFG, "units", global_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_PROFILABLE, CFG_TYPE_STRING, DEFAULT_UNITS, vsn(1, 0, 0), NULL, 0, NULL, + "Default value for --units argument.\n") + +-cfg(global_si_unit_consistency_CFG, "si_unit_consistency", global_CFG_SECTION, CFG_PROFILABLE, CFG_TYPE_BOOL, DEFAULT_SI_UNIT_CONSISTENCY, vsn(2, 2, 54), NULL, 0, NULL, ++cfg(global_si_unit_consistency_CFG, "si_unit_consistency", global_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_PROFILABLE, CFG_TYPE_BOOL, DEFAULT_SI_UNIT_CONSISTENCY, vsn(2, 2, 54), NULL, 0, NULL, + "Distinguish between powers of 1024 and 1000 bytes.\n" + "The LVM commands distinguish between powers of 1024 bytes,\n" + "e.g. KiB, MiB, GiB, and powers of 1000 bytes, e.g. KB, MB, GB.\n" + "If scripts depend on the old behaviour, disable this setting\n" + "temporarily until they are updated.\n") + +-cfg(global_suffix_CFG, "suffix", global_CFG_SECTION, CFG_PROFILABLE, CFG_TYPE_BOOL, DEFAULT_SUFFIX, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(global_suffix_CFG, "suffix", global_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_PROFILABLE, CFG_TYPE_BOOL, DEFAULT_SUFFIX, vsn(1, 0, 0), NULL, 0, NULL, + "Display unit suffix for sizes.\n" + "This setting has no effect if the units are in human-readable form\n" + "(global/units = \"h\") in which case the suffix is always displayed.\n") + +-cfg(global_activation_CFG, "activation", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ACTIVATION, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(global_activation_CFG, "activation", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_ACTIVATION, vsn(1, 0, 0), NULL, 0, NULL, + "Enable/disable communication with the kernel device-mapper.\n" + "Disable to use the tools to manipulate LVM metadata without\n" + "activating any logical volumes. If the device-mapper driver\n" +@@ -979,30 +979,30 @@ cfg_array(global_format_libraries_CFG, "format_libraries", global_CFG_SECTION, C + + cfg_array(global_segment_libraries_CFG, "segment_libraries", global_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 18), NULL, vsn(2, 3, 3), NULL, NULL) + +-cfg(global_proc_CFG, "proc", global_CFG_SECTION, CFG_ADVANCED, CFG_TYPE_STRING, DEFAULT_PROC_DIR, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(global_proc_CFG, "proc", global_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_ADVANCED, CFG_TYPE_STRING, DEFAULT_PROC_DIR, vsn(1, 0, 0), NULL, 0, NULL, + "Location of proc filesystem.\n") + +-cfg(global_etc_CFG, "etc", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_ETC_DIR, vsn(2, 2, 117), "@CONFDIR@", 0, NULL, ++cfg(global_etc_CFG, "etc", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_ETC_DIR, vsn(2, 2, 117), "@CONFDIR@", 0, NULL, + "Location of /etc system configuration directory.\n") + +-cfg(global_locking_type_CFG, "locking_type", global_CFG_SECTION, 0, CFG_TYPE_INT, 1, vsn(1, 0, 0), NULL, vsn(2, 3, 0), NULL, ++cfg(global_locking_type_CFG, "locking_type", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, 1, vsn(1, 0, 0), NULL, vsn(2, 3, 0), NULL, + NULL) + +-cfg(global_wait_for_locks_CFG, "wait_for_locks", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_WAIT_FOR_LOCKS, vsn(2, 2, 50), NULL, 0, NULL, ++cfg(global_wait_for_locks_CFG, "wait_for_locks", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_WAIT_FOR_LOCKS, vsn(2, 2, 50), NULL, 0, NULL, + "When disabled, fail if a lock request would block.\n") + +-cfg(global_fallback_to_clustered_locking_CFG, "fallback_to_clustered_locking", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_FALLBACK_TO_CLUSTERED_LOCKING, vsn(2, 2, 42), NULL, vsn(2, 3, 0), NULL, ++cfg(global_fallback_to_clustered_locking_CFG, "fallback_to_clustered_locking", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_FALLBACK_TO_CLUSTERED_LOCKING, vsn(2, 2, 42), NULL, vsn(2, 3, 0), NULL, + NULL) + +-cfg(global_fallback_to_local_locking_CFG, "fallback_to_local_locking", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_FALLBACK_TO_LOCAL_LOCKING, vsn(2, 2, 42), NULL, vsn(2, 3, 0), NULL, ++cfg(global_fallback_to_local_locking_CFG, "fallback_to_local_locking", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_FALLBACK_TO_LOCAL_LOCKING, vsn(2, 2, 42), NULL, vsn(2, 3, 0), NULL, + NULL) + +-cfg(global_locking_dir_CFG, "locking_dir", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_LOCK_DIR, vsn(1, 0, 0), "@DEFAULT_LOCK_DIR@", 0, NULL, ++cfg(global_locking_dir_CFG, "locking_dir", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_LOCK_DIR, vsn(1, 0, 0), "@DEFAULT_LOCK_DIR@", 0, NULL, + "Directory to use for LVM command file locks.\n" + "Local non-LV directory that holds file-based locks while commands are\n" + "in progress. A directory like /tmp that may get wiped on reboot is OK.\n") + +-cfg(global_prioritise_write_locks_CFG, "prioritise_write_locks", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_PRIORITISE_WRITE_LOCKS, vsn(2, 2, 52), NULL, 0, NULL, ++cfg(global_prioritise_write_locks_CFG, "prioritise_write_locks", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_PRIORITISE_WRITE_LOCKS, vsn(2, 2, 52), NULL, 0, NULL, + "Allow quicker VG write access during high volume read access.\n" + "When there are competing read-only and read-write access requests for\n" + "a volume group's metadata, instead of always granting the read-only\n" +@@ -1016,22 +1016,22 @@ cfg(global_library_dir_CFG, "library_dir", global_CFG_SECTION, CFG_DEFAULT_UNDEF + cfg(global_locking_library_CFG, "locking_library", global_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_LOCKING_LIB, vsn(1, 0, 0), NULL, vsn(2, 3, 0), NULL, + NULL) + +-cfg(global_abort_on_internal_errors_CFG, "abort_on_internal_errors", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ABORT_ON_INTERNAL_ERRORS, vsn(2, 2, 57), NULL, 0, NULL, ++cfg(global_abort_on_internal_errors_CFG, "abort_on_internal_errors", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_ABORT_ON_INTERNAL_ERRORS, vsn(2, 2, 57), NULL, 0, NULL, + "Abort a command that encounters an internal error.\n" + "Treat any internal errors as fatal errors, aborting the process that\n" + "encountered the internal error. Please only enable for debugging.\n") + +-cfg(global_detect_internal_vg_cache_corruption_CFG, "detect_internal_vg_cache_corruption", global_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(2, 2, 96), NULL, vsn(2, 2, 174), NULL, ++cfg(global_detect_internal_vg_cache_corruption_CFG, "detect_internal_vg_cache_corruption", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(2, 2, 96), NULL, vsn(2, 2, 174), NULL, + NULL) + +-cfg(global_metadata_read_only_CFG, "metadata_read_only", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_METADATA_READ_ONLY, vsn(2, 2, 75), NULL, 0, NULL, ++cfg(global_metadata_read_only_CFG, "metadata_read_only", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_METADATA_READ_ONLY, vsn(2, 2, 75), NULL, 0, NULL, + "No operations that change on-disk metadata are permitted.\n" + "Additionally, read-only commands that encounter metadata in need of\n" + "repair will still be allowed to proceed exactly as if the repair had\n" + "been performed (except for the unchanged vg_seqno). Inappropriate\n" + "use could mess up your system, so seek advice first!\n") + +-cfg(global_mirror_segtype_default_CFG, "mirror_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_MIRROR_SEGTYPE, vsn(2, 2, 87), "@DEFAULT_MIRROR_SEGTYPE@", 0, NULL, ++cfg(global_mirror_segtype_default_CFG, "mirror_segtype_default", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_MIRROR_SEGTYPE, vsn(2, 2, 87), "@DEFAULT_MIRROR_SEGTYPE@", 0, NULL, + "The segment type used by the short mirroring option -m.\n" + "The --type mirror|raid1 option overrides this setting.\n" + "#\n" +@@ -1066,7 +1066,7 @@ cfg(global_support_mirrored_mirror_log_CFG, "support_mirrored_mirror_log", globa + "Not supported for regular operation!\n" + "\n") + +-cfg(global_raid10_segtype_default_CFG, "raid10_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_RAID10_SEGTYPE, vsn(2, 2, 99), "@DEFAULT_RAID10_SEGTYPE@", 0, NULL, ++cfg(global_raid10_segtype_default_CFG, "raid10_segtype_default", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_RAID10_SEGTYPE, vsn(2, 2, 99), "@DEFAULT_RAID10_SEGTYPE@", 0, NULL, + "The segment type used by the -i -m combination.\n" + "The --type raid10|mirror option overrides this setting.\n" + "The --stripes/-i and --mirrors/-m options can both be specified\n" +@@ -1084,7 +1084,7 @@ cfg(global_raid10_segtype_default_CFG, "raid10_segtype_default", global_CFG_SECT + " in terms of providing redundancy and performance.\n" + "#\n") + +-cfg(global_sparse_segtype_default_CFG, "sparse_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_SPARSE_SEGTYPE, vsn(2, 2, 112), "@DEFAULT_SPARSE_SEGTYPE@", 0, NULL, ++cfg(global_sparse_segtype_default_CFG, "sparse_segtype_default", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_SPARSE_SEGTYPE, vsn(2, 2, 112), "@DEFAULT_SPARSE_SEGTYPE@", 0, NULL, + "The segment type used by the -V -L combination.\n" + "The --type snapshot|thin option overrides this setting.\n" + "The combination of -V and -L options creates a sparse LV. There are\n" +@@ -1122,7 +1122,7 @@ cfg(global_event_activation_CFG, "event_activation", global_CFG_SECTION, CFG_DEF + "See the --setautoactivation option or the auto_activation_volume_list\n" + "setting to configure autoactivation for specific VGs or LVs.\n") + +-cfg(global_use_lvmetad_CFG, "use_lvmetad", global_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(2, 2, 93), 0, vsn(2, 3, 0), NULL, ++cfg(global_use_lvmetad_CFG, "use_lvmetad", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(2, 2, 93), 0, vsn(2, 3, 0), NULL, + NULL) + + cfg(global_lvmetad_update_wait_time_CFG, "lvmetad_update_wait_time", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, 0, vsn(2, 2, 151), NULL, vsn(2, 3, 0), NULL, +@@ -1131,7 +1131,7 @@ cfg(global_lvmetad_update_wait_time_CFG, "lvmetad_update_wait_time", global_CFG_ + cfg(global_use_aio_CFG, "use_aio", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_USE_AIO, vsn(2, 2, 183), NULL, 0, NULL, + "Use async I/O when reading and writing devices.\n") + +-cfg(global_use_lvmlockd_CFG, "use_lvmlockd", global_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(2, 2, 124), NULL, 0, NULL, ++cfg(global_use_lvmlockd_CFG, "use_lvmlockd", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, 0, vsn(2, 2, 124), NULL, 0, NULL, + "Use lvmlockd for locking among hosts using LVM on shared storage.\n" + "Applicable only if LVM is compiled with lockd support in which\n" + "case there is also lvmlockd(8) man page available for more\n" +@@ -1257,7 +1257,7 @@ cfg(global_fsadm_executable_CFG, "fsadm_executable", global_CFG_SECTION, CFG_DEF + "The full path to the fsadm command.\n" + "LVM uses this command to help with lvresize -r operations.\n") + +-cfg(global_system_id_source_CFG, "system_id_source", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_SYSTEM_ID_SOURCE, vsn(2, 2, 117), NULL, 0, NULL, ++cfg(global_system_id_source_CFG, "system_id_source", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_SYSTEM_ID_SOURCE, vsn(2, 2, 117), NULL, 0, NULL, + "The method LVM uses to set the local system ID.\n" + "Volume Groups can also be given a system ID (by vgcreate, vgchange,\n" + "or vgimport.) A VG on shared storage devices is accessible only to\n" +@@ -1287,13 +1287,13 @@ cfg(global_system_id_file_CFG, "system_id_file", global_CFG_SECTION, CFG_DEFAULT + "This is used when system_id_source is set to 'file'.\n" + "Comments starting with the character # are ignored.\n") + +-cfg(activation_checks_CFG, "checks", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ACTIVATION_CHECKS, vsn(2, 2, 86), NULL, 0, NULL, ++cfg(activation_checks_CFG, "checks", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_ACTIVATION_CHECKS, vsn(2, 2, 86), NULL, 0, NULL, + "Perform internal checks of libdevmapper operations.\n" + "Useful for debugging problems with activation. Some of the checks may\n" + "be expensive, so it's best to use this only when there seems to be a\n" + "problem.\n") + +-cfg(global_use_lvmpolld_CFG, "use_lvmpolld", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_USE_LVMPOLLD, vsn(2, 2, 120), "@DEFAULT_USE_LVMPOLLD@", 0, NULL, ++cfg(global_use_lvmpolld_CFG, "use_lvmpolld", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_USE_LVMPOLLD, vsn(2, 2, 120), "@DEFAULT_USE_LVMPOLLD@", 0, NULL, + "Use lvmpolld to supervise long running LVM commands.\n" + "When enabled, control of long running LVM commands is transferred\n" + "from the original LVM command to the lvmpolld daemon. This allows\n" +@@ -1306,7 +1306,7 @@ cfg(global_use_lvmpolld_CFG, "use_lvmpolld", global_CFG_SECTION, 0, CFG_TYPE_BOO + "commands will supervise long running operations by forking themselves.\n" + "Applicable only if LVM is compiled with lvmpolld support.\n") + +-cfg(global_notify_dbus_CFG, "notify_dbus", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_NOTIFY_DBUS, vsn(2, 2, 145), NULL, 0, NULL, ++cfg(global_notify_dbus_CFG, "notify_dbus", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_NOTIFY_DBUS, vsn(2, 2, 145), NULL, 0, NULL, + "Enable D-Bus notification from LVM commands.\n" + "When enabled, an LVM command that changes PVs, changes VG metadata,\n" + "or changes the activation state of an LV will send a notification.\n") +@@ -1319,7 +1319,7 @@ cfg(global_io_memory_size_CFG, "io_memory_size", global_CFG_SECTION, CFG_DEFAULT + "This value should usually not be decreased from the default; setting\n" + "it too low can result in lvm failing to read VGs.\n") + +-cfg(activation_udev_sync_CFG, "udev_sync", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_UDEV_SYNC, vsn(2, 2, 51), NULL, 0, NULL, ++cfg(activation_udev_sync_CFG, "udev_sync", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_UDEV_SYNC, vsn(2, 2, 51), NULL, 0, NULL, + "Use udev notifications to synchronize udev and LVM.\n" + "The --noudevsync option overrides this setting.\n" + "When disabled, LVM commands will not wait for notifications from\n" +@@ -1329,7 +1329,7 @@ cfg(activation_udev_sync_CFG, "udev_sync", activation_CFG_SECTION, 0, CFG_TYPE_B + "running, and LVM processes are waiting for udev, run the command\n" + "'dmsetup udevcomplete_all' to wake them up.\n") + +-cfg(activation_udev_rules_CFG, "udev_rules", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_UDEV_RULES, vsn(2, 2, 57), NULL, 0, NULL, ++cfg(activation_udev_rules_CFG, "udev_rules", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_UDEV_RULES, vsn(2, 2, 57), NULL, 0, NULL, + "Use udev rules to manage LV device nodes and symlinks.\n" + "When disabled, LVM will manage the device nodes and symlinks for\n" + "active LVs itself. Manual intervention may be required if this\n" +@@ -1341,13 +1341,13 @@ cfg(activation_verify_udev_operations_CFG, "verify_udev_operations", activation_ + "in the device directory after udev has completed processing its\n" + "events. Useful for diagnosing problems with LVM/udev interactions.\n") + +-cfg(activation_retry_deactivation_CFG, "retry_deactivation", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_RETRY_DEACTIVATION, vsn(2, 2, 89), NULL, 0, NULL, ++cfg(activation_retry_deactivation_CFG, "retry_deactivation", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_RETRY_DEACTIVATION, vsn(2, 2, 89), NULL, 0, NULL, + "Retry failed LV deactivation.\n" + "If LV deactivation fails, LVM will retry for a few seconds before\n" + "failing. This may happen because a process run from a quick udev rule\n" + "temporarily opened the device.\n") + +-cfg(activation_missing_stripe_filler_CFG, "missing_stripe_filler", activation_CFG_SECTION, CFG_ADVANCED, CFG_TYPE_STRING, DEFAULT_STRIPE_FILLER, vsn(1, 0, 0), NULL, 0, NULL, ++cfg(activation_missing_stripe_filler_CFG, "missing_stripe_filler", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_ADVANCED, CFG_TYPE_STRING, DEFAULT_STRIPE_FILLER, vsn(1, 0, 0), NULL, 0, NULL, + "Method to fill missing stripes when activating an incomplete LV.\n" + "Using 'error' will make inaccessible parts of the device return I/O\n" + "errors on access. Using 'zero' will return success (and zero) on I/O\n" +@@ -1460,11 +1460,11 @@ cfg_array(activation_read_only_volume_list_CFG, "read_only_volume_list", activat + "read_only_volume_list = [ \"vg1\", \"vg2/lvol1\", \"@tag1\", \"@*\" ]\n" + "#\n") + +- cfg(activation_mirror_region_size_CFG, "mirror_region_size", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_RAID_REGION_SIZE, vsn(1, 0, 0), NULL, vsn(2, 2, 99), ++ cfg(activation_mirror_region_size_CFG, "mirror_region_size", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_RAID_REGION_SIZE, vsn(1, 0, 0), NULL, vsn(2, 2, 99), + "This has been replaced by the activation/raid_region_size setting.\n", + "Size in KiB of each raid or mirror synchronization region.\n") + +-cfg(activation_raid_region_size_CFG, "raid_region_size", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_RAID_REGION_SIZE, vsn(2, 2, 99), NULL, 0, NULL, ++cfg(activation_raid_region_size_CFG, "raid_region_size", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_RAID_REGION_SIZE, vsn(2, 2, 99), NULL, 0, NULL, + "Size in KiB of each raid or mirror synchronization region.\n" + "The clean/dirty state of data is tracked for each region.\n" + "The value is rounded down to a power of two if necessary, and\n" +@@ -1489,7 +1489,7 @@ cfg(activation_readahead_CFG, "readahead", activation_CFG_SECTION, CFG_DEFAULT_C + " Use default value chosen by kernel.\n" + "#\n") + +-cfg(activation_raid_fault_policy_CFG, "raid_fault_policy", activation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_RAID_FAULT_POLICY, vsn(2, 2, 89), NULL, 0, NULL, ++cfg(activation_raid_fault_policy_CFG, "raid_fault_policy", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_RAID_FAULT_POLICY, vsn(2, 2, 89), NULL, 0, NULL, + "Defines how a device failure in a RAID LV is handled.\n" + "This includes LVs that have the following segment types:\n" + "raid1, raid4, raid5*, and raid6*.\n" +@@ -1510,7 +1510,7 @@ cfg(activation_raid_fault_policy_CFG, "raid_fault_policy", activation_CFG_SECTIO + " replace faulty devices.\n" + "#\n") + +-cfg_runtime(activation_mirror_image_fault_policy_CFG, "mirror_image_fault_policy", activation_CFG_SECTION, 0, CFG_TYPE_STRING, vsn(2, 2, 57), 0, NULL, ++cfg_runtime(activation_mirror_image_fault_policy_CFG, "mirror_image_fault_policy", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, vsn(2, 2, 57), 0, NULL, + "Defines how a device failure in a 'mirror' LV is handled.\n" + "An LV with the 'mirror' segment type is composed of mirror images\n" + "(copies) and a mirror log. A disk log ensures that a mirror LV does\n" +@@ -1546,16 +1546,16 @@ cfg_runtime(activation_mirror_image_fault_policy_CFG, "mirror_image_fault_policy + " replacement.\n" + "#\n") + +-cfg(activation_mirror_log_fault_policy_CFG, "mirror_log_fault_policy", activation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_MIRROR_LOG_FAULT_POLICY, vsn(1, 2, 18), NULL, 0, NULL, ++cfg(activation_mirror_log_fault_policy_CFG, "mirror_log_fault_policy", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_MIRROR_LOG_FAULT_POLICY, vsn(1, 2, 18), NULL, 0, NULL, + "Defines how a device failure in a 'mirror' log LV is handled.\n" + "The mirror_image_fault_policy description for mirrored LVs also\n" + "applies to mirrored log LVs.\n") + +-cfg(activation_mirror_device_fault_policy_CFG, "mirror_device_fault_policy", activation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_MIRROR_DEVICE_FAULT_POLICY, vsn(1, 2, 10), NULL, vsn(2, 2, 57), ++cfg(activation_mirror_device_fault_policy_CFG, "mirror_device_fault_policy", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_MIRROR_DEVICE_FAULT_POLICY, vsn(1, 2, 10), NULL, vsn(2, 2, 57), + "This has been replaced by the activation/mirror_image_fault_policy setting.\n", + "Define how a device failure affecting a mirror is handled.\n") + +-cfg(activation_snapshot_autoextend_threshold_CFG, "snapshot_autoextend_threshold", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_SNAPSHOT_AUTOEXTEND_THRESHOLD, vsn(2, 2, 75), NULL, 0, NULL, ++cfg(activation_snapshot_autoextend_threshold_CFG, "snapshot_autoextend_threshold", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_SNAPSHOT_AUTOEXTEND_THRESHOLD, vsn(2, 2, 75), NULL, 0, NULL, + "Auto-extend a snapshot when its usage exceeds this percent.\n" + "Setting this to 100 disables automatic extension.\n" + "The minimum value is 50 (a smaller value is treated as 50.)\n" +@@ -1569,7 +1569,7 @@ cfg(activation_snapshot_autoextend_threshold_CFG, "snapshot_autoextend_threshold + "snapshot_autoextend_threshold = 70\n" + "#\n") + +-cfg(activation_snapshot_autoextend_percent_CFG, "snapshot_autoextend_percent", activation_CFG_SECTION, 0, CFG_TYPE_INT, DEFAULT_SNAPSHOT_AUTOEXTEND_PERCENT, vsn(2, 2, 75), NULL, 0, NULL, ++cfg(activation_snapshot_autoextend_percent_CFG, "snapshot_autoextend_percent", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_SNAPSHOT_AUTOEXTEND_PERCENT, vsn(2, 2, 75), NULL, 0, NULL, + "Auto-extending a snapshot adds this percent extra space.\n" + "The amount of additional space added to a snapshot is this\n" + "percent of its current size.\n" +@@ -1581,7 +1581,7 @@ cfg(activation_snapshot_autoextend_percent_CFG, "snapshot_autoextend_percent", a + "snapshot_autoextend_percent = 20\n" + "#\n") + +-cfg(activation_thin_pool_autoextend_threshold_CFG, "thin_pool_autoextend_threshold", activation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_INT, DEFAULT_THIN_POOL_AUTOEXTEND_THRESHOLD, vsn(2, 2, 89), NULL, 0, NULL, ++cfg(activation_thin_pool_autoextend_threshold_CFG, "thin_pool_autoextend_threshold", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_INT, DEFAULT_THIN_POOL_AUTOEXTEND_THRESHOLD, vsn(2, 2, 89), NULL, 0, NULL, + "Auto-extend a thin pool when its usage exceeds this percent.\n" + "Setting this to 100 disables automatic extension.\n" + "The minimum value is 50 (a smaller value is treated as 50.)\n" +@@ -1595,7 +1595,7 @@ cfg(activation_thin_pool_autoextend_threshold_CFG, "thin_pool_autoextend_thresho + "thin_pool_autoextend_threshold = 70\n" + "#\n") + +-cfg(activation_thin_pool_autoextend_percent_CFG, "thin_pool_autoextend_percent", activation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_INT, DEFAULT_THIN_POOL_AUTOEXTEND_PERCENT, vsn(2, 2, 89), NULL, 0, NULL, ++cfg(activation_thin_pool_autoextend_percent_CFG, "thin_pool_autoextend_percent", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED | CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_INT, DEFAULT_THIN_POOL_AUTOEXTEND_PERCENT, vsn(2, 2, 89), NULL, 0, NULL, + "Auto-extending a thin pool adds this percent extra space.\n" + "The amount of additional space added to a thin pool is this\n" + "percent of its current size.\n" +@@ -1652,7 +1652,7 @@ cfg(activation_use_mlockall_CFG, "use_mlockall", activation_CFG_SECTION, CFG_DEF + "Prior to version 2.02.62, LVM used mlockall() to pin the whole\n" + "process's memory while activating devices.\n") + +-cfg(activation_monitoring_CFG, "monitoring", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_DMEVENTD_MONITOR, vsn(2, 2, 63), NULL, 0, NULL, ++cfg(activation_monitoring_CFG, "monitoring", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_DMEVENTD_MONITOR, vsn(2, 2, 63), NULL, 0, NULL, + "Monitor LVs that are activated.\n" + "The --ignoremonitoring option overrides this setting.\n" + "When enabled, LVM will ask dmeventd to monitor activated LVs.\n") +@@ -1674,7 +1674,7 @@ cfg(activation_auto_set_activation_skip_CFG, "auto_set_activation_skip", activat + "flag set. When this setting is enabled, the activation skip flag is\n" + "set on new thin snapshot LVs.\n") + +-cfg(activation_mode_CFG, "activation_mode", activation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_ACTIVATION_MODE, vsn(2,2,108), NULL, 0, NULL, ++cfg(activation_mode_CFG, "activation_mode", activation_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_ACTIVATION_MODE, vsn(2,2,108), NULL, 0, NULL, + "How LVs with missing devices are activated.\n" + "The --activationmode option overrides this setting.\n" + "#\n" +@@ -2197,4 +2197,4 @@ cfg(local_host_id_CFG, "host_id", local_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_ + "This must be unique among all hosts, and must be between 1 and 2000.\n" + "Applicable only if LVM is compiled with lockd support\n") + +-cfg(CFG_COUNT, NULL, root_CFG_SECTION, 0, CFG_TYPE_INT, 0, vsn(0, 0, 0), NULL, 0, NULL, NULL) ++cfg(CFG_COUNT, NULL, root_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, 0, vsn(0, 0, 0), NULL, 0, NULL, NULL) +-- +1.8.3.1 + diff --git a/SOURCES/0002-config-change-default-use_devicesfile-to-1.patch b/SOURCES/0002-config-change-default-use_devicesfile-to-1.patch new file mode 100644 index 0000000..08421aa --- /dev/null +++ b/SOURCES/0002-config-change-default-use_devicesfile-to-1.patch @@ -0,0 +1,25 @@ +From 13439caa0aa13a43cfaf066f55e50c4c5345146b Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Tue, 16 Mar 2021 09:52:13 -0500 +Subject: [PATCH 02/11] config: change default use_devicesfile to 1 + +--- + lib/config/defaults.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/config/defaults.h b/lib/config/defaults.h +index 66eece5..a7a2a06 100644 +--- a/lib/config/defaults.h ++++ b/lib/config/defaults.h +@@ -322,7 +322,7 @@ + + #define DEFAULT_MD_COMPONENT_CHECKS "auto" + +-#define DEFAULT_USE_DEVICES_FILE 0 ++#define DEFAULT_USE_DEVICES_FILE 1 + #define DEFAULT_DEVICES_FILE "system.devices" + + #define DEFAULT_SEARCH_FOR_DEVNAMES "auto" +-- +1.8.3.1 + diff --git a/SOURCES/0003-system_id-new-appmachineid-option.patch b/SOURCES/0003-system_id-new-appmachineid-option.patch new file mode 100644 index 0000000..6028970 --- /dev/null +++ b/SOURCES/0003-system_id-new-appmachineid-option.patch @@ -0,0 +1,183 @@ +From 8b83c056d12b32cffa15a77423b6be9748c0ede1 Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Wed, 20 May 2020 10:59:38 -0500 +Subject: [PATCH 03/11] system_id: new appmachineid option + +The new system_id_source="appmachineid" will cause +lvm to use an lvm-specific derivation of the machine-id, +instead of the machine-id directly. This is now +recommended in place of using machineid. +--- + configure.ac | 20 ++++++++++++++++++++ + lib/commands/toolcontext.c | 26 +++++++++++++++++++++++--- + lib/config/config_settings.h | 8 +++++--- + man/lvmsystemid.7_main | 17 +++++++++++++++++ + test/shell/system_id.sh | 11 +++++++++++ + 5 files changed, 76 insertions(+), 6 deletions(-) + +diff --git a/configure.ac b/configure.ac +index a20633e..9fe50e1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1105,6 +1105,26 @@ if test "$NOTIFYDBUS_SUPPORT" = yes; then + fi + + ################################################################################ ++dnl -- Build appmachineid ++AC_MSG_CHECKING(whether to build appmachineid) ++AC_ARG_ENABLE(app-machineid, ++ AC_HELP_STRING([--enable-app-machineid], ++ [enable LVM system ID using app-specific machine-id]), ++ APP_MACHINEID_SUPPORT=$enableval, APP_MACHINEID_SUPPORT=no) ++AC_MSG_RESULT($APP_MACHINEID_SUPPORT) ++ ++if test "$APP_MACHINEID_SUPPORT" = yes; then ++ AC_DEFINE([APP_MACHINEID_SUPPORT], 1, [Define to 1 to include code that uses libsystemd machine-id apis.]) ++ SYSTEMD_LIBS="-lsystemd" ++fi ++ ++################################################################################ ++dnl -- Look for libsystemd libraries ++if test "$APP_MACHINEID_SUPPORT" = yes; then ++ PKG_CHECK_MODULES(APP_MACHINEID, systemd >= 234, [HAVE_APP_MACHINEID=yes], $bailout) ++fi ++ ++################################################################################ + + dnl -- Enable blkid wiping functionality + AC_ARG_ENABLE(blkid_wiping, +diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c +index ecd50db..8991aeb 100644 +--- a/lib/commands/toolcontext.c ++++ b/lib/commands/toolcontext.c +@@ -41,6 +41,10 @@ + #include + #include + ++#ifdef APP_MACHINEID_SUPPORT ++#include ++#endif ++ + #ifdef __linux__ + # include + #endif +@@ -129,9 +133,12 @@ static const char *_read_system_id_from_file(struct cmd_context *cmd, const char + return system_id; + } + ++/* systemd-id128 new produced: f64406832c2140e8ac5422d1089aae03 */ ++#define LVM_APPLICATION_ID SD_ID128_MAKE(f6,44,06,83,2c,21,40,e8,ac,54,22,d1,08,9a,ae,03) ++ + static const char *_system_id_from_source(struct cmd_context *cmd, const char *source) + { +- char filebuf[PATH_MAX]; ++ char buf[PATH_MAX]; + const char *file; + const char *etc_str; + const char *str; +@@ -150,10 +157,23 @@ static const char *_system_id_from_source(struct cmd_context *cmd, const char *s + goto out; + } + ++#ifdef APP_MACHINEID_SUPPORT ++ if (!strcasecmp(source, "appmachineid")) { ++ sd_id128_t id; ++ ++ sd_id128_get_machine_app_specific(LVM_APPLICATION_ID, &id); ++ ++ if (dm_snprintf(buf, PATH_MAX, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(id)) < 0) ++ stack; ++ system_id = system_id_from_string(cmd, buf); ++ goto out; ++ } ++#endif ++ + if (!strcasecmp(source, "machineid") || !strcasecmp(source, "machine-id")) { + etc_str = find_config_tree_str(cmd, global_etc_CFG, NULL); +- if (dm_snprintf(filebuf, sizeof(filebuf), "%s/machine-id", etc_str) != -1) +- system_id = _read_system_id_from_file(cmd, filebuf); ++ if (dm_snprintf(buf, sizeof(buf), "%s/machine-id", etc_str) != -1) ++ system_id = _read_system_id_from_file(cmd, buf); + goto out; + } + +diff --git a/lib/config/config_settings.h b/lib/config/config_settings.h +index 9cf73ce..76ebc10 100644 +--- a/lib/config/config_settings.h ++++ b/lib/config/config_settings.h +@@ -1273,10 +1273,12 @@ cfg(global_system_id_source_CFG, "system_id_source", global_CFG_SECTION, CFG_DEF + " uname\n" + " Set the system ID from the hostname (uname) of the system.\n" + " System IDs beginning localhost are not permitted.\n" ++ " appmachineid\n" ++ " Use an LVM-specific derivation of the local machine-id as the\n" ++ " system ID. See 'man machine-id'.\n" + " machineid\n" +- " Use the contents of the machine-id file to set the system ID.\n" +- " Some systems create this file at installation time.\n" +- " See 'man machine-id' and global/etc.\n" ++ " Use the contents of the machine-id file to set the system ID\n" ++ " (appmachineid is recommended.)\n" + " file\n" + " Use the contents of another file (system_id_file) to set the\n" + " system ID.\n" +diff --git a/man/lvmsystemid.7_main b/man/lvmsystemid.7_main +index eac4f7b..06e7f34 100644 +--- a/man/lvmsystemid.7_main ++++ b/man/lvmsystemid.7_main +@@ -173,6 +173,22 @@ global { + .fi + . + .TP ++.B appmachineid ++.br ++ ++An LVM-specific derivation of /etc/machine-id is used as the system ID. ++See ++.BR machine-id (5) ++to check if machine-id is available on the host. ++ ++.I lvm.conf ++.nf ++global { ++ system_id_source = "appmachineid" ++} ++.fi ++ ++.TP + .B machineid + .br + The content of /etc/machine-id is used as the system ID if available. +@@ -181,6 +197,7 @@ See + and + .BR systemd-machine-id-setup (1) + to check if machine-id is available on the host. ++(appmachineid is recommended in place of machineid.) + .sp + .I lvm.conf + .nf +diff --git a/test/shell/system_id.sh b/test/shell/system_id.sh +index 8814d54..8b5638a 100644 +--- a/test/shell/system_id.sh ++++ b/test/shell/system_id.sh +@@ -50,6 +50,17 @@ check vg_field $vg1 systemid "$SID" + vgremove $vg1 + fi + ++## appmachineid ++lvm version > lvmver ++if grep app-machineid lvmver; then ++aux lvmconf "global/system_id_source = appmachineid" ++lvm systemid | awk '{ print $3 }' > sid_lvm ++vgcreate $vg1 "$dev1" ++vgs -o systemid --noheadings $vg1 | awk '{print $1}' > sid_vg ++diff sid_lvm sid_vg ++vgremove $vg1 ++fi ++ + ## uname + + SID1=$(uname -n) +-- +1.8.3.1 + diff --git a/SOURCES/0004-pvscan-add-options-listlvs-listvg-checkcomplete.patch b/SOURCES/0004-pvscan-add-options-listlvs-listvg-checkcomplete.patch new file mode 100644 index 0000000..ee98018 --- /dev/null +++ b/SOURCES/0004-pvscan-add-options-listlvs-listvg-checkcomplete.patch @@ -0,0 +1,1101 @@ +From 9273d0cb758b38c17dc11e344067c71f79d12f02 Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Wed, 9 Dec 2020 10:59:40 -0600 +Subject: [PATCH 04/11] pvscan: add options listlvs listvg checkcomplete + +pvscan --cache + . read only dev + . create online file for dev + +pvscan --listvg + . read only dev + . list VG using dev + +pvscan --listlvs + . read only dev + . list VG using dev + . list LVs using dev + +pvscan --cache --listvg [--checkcomplete] + . read only dev + . create online file for dev + . list VG using dev + . [check online files and report if VG is complete] + +pvscan --cache --listlvs [--checkcomplete] + . read only dev + . create online file for dev + . list VG using dev + . list LVs using dev + . [check online files and report if VG is complete] + . [check online files and report if LVs are complete] + +[--vgonline] +can be used with --checkcomplete, to enable use of a vg online +file. This results in only the first pvscan command to see +the complete VG to report 'VG complete', and others will report +'VG finished'. This allows the caller to easily run a single +activation of the VG. + +[--udevoutput] +can be used with --cache --listvg --checkcomplete, to enable +an output mode that prints LVM_VG_NAME_COMPLETE='vgname' that +a udev rule can import, and prevents other output from the +command (other output causes udev to ignore the command.) + +The list of complete LVs is meant to be passed to lvchange -aay, +or the complete VG used with vgchange -aay. + +When --checkcomplete is used, lvm assumes that that the output +will be used to trigger event-based autoactivation, so the pvscan +does nothing if event_activation=0 and --checkcomplete is used. + +Example of listlvs +------------------ + +$ lvs -a vg -olvname,devices + LV Devices + lv_a /dev/loop0(0) + lv_ab /dev/loop0(1),/dev/loop1(1) + lv_abc /dev/loop0(3),/dev/loop1(3),/dev/loop2(1) + lv_b /dev/loop1(0) + lv_c /dev/loop2(0) + +$ pvscan --cache --listlvs --checkcomplete /dev/loop0 + pvscan[35680] PV /dev/loop0 online, VG vg incomplete (need 2). + VG vg incomplete + LV vg/lv_a complete + LV vg/lv_ab incomplete + LV vg/lv_abc incomplete + +$ pvscan --cache --listlvs --checkcomplete /dev/loop1 + pvscan[35681] PV /dev/loop1 online, VG vg incomplete (need 1). + VG vg incomplete + LV vg/lv_b complete + LV vg/lv_ab complete + LV vg/lv_abc incomplete + +$ pvscan --cache --listlvs --checkcomplete /dev/loop2 + pvscan[35682] PV /dev/loop2 online, VG vg is complete. + VG vg complete + LV vg/lv_c complete + LV vg/lv_abc complete + +Example of listvg +----------------- + +$ pvscan --cache --listvg --checkcomplete /dev/loop0 + pvscan[35684] PV /dev/loop0 online, VG vg incomplete (need 2). + VG vg incomplete + +$ pvscan --cache --listvg --checkcomplete /dev/loop1 + pvscan[35685] PV /dev/loop1 online, VG vg incomplete (need 1). + VG vg incomplete + +$ pvscan --cache --listvg --checkcomplete /dev/loop2 + pvscan[35686] PV /dev/loop2 online, VG vg is complete. + VG vg complete +--- + lib/commands/toolcontext.h | 1 + + lib/metadata/metadata.c | 33 ++++ + lib/metadata/metadata.h | 4 + + tools/args.h | 20 +++ + tools/command-lines.in | 30 +++- + tools/lvmcmdline.c | 4 + + tools/pvscan.c | 418 ++++++++++++++++++++++++++++++++++----------- + tools/toollib.c | 18 ++ + tools/tools.h | 2 + + 9 files changed, 431 insertions(+), 99 deletions(-) + +diff --git a/lib/commands/toolcontext.h b/lib/commands/toolcontext.h +index 0911b05..0cb4ad7 100644 +--- a/lib/commands/toolcontext.h ++++ b/lib/commands/toolcontext.h +@@ -29,6 +29,7 @@ struct config_info { + int debug_classes; + int verbose; + int silent; ++ int suppress; + int test; + int syslog; + int activation; +diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c +index 0cbf678..ef343da 100644 +--- a/lib/metadata/metadata.c ++++ b/lib/metadata/metadata.c +@@ -5279,3 +5279,36 @@ struct volume_group *vg_read_for_update(struct cmd_context *cmd, const char *vg_ + + return vg; + } ++ ++int get_visible_lvs_using_pv(struct cmd_context *cmd, struct volume_group *vg, struct device *dev, ++ struct dm_list *lvs_list) ++{ ++ struct pv_list *pvl; ++ struct lv_list *lvl, *lvl2; ++ struct physical_volume *pv = NULL; ++ ++ dm_list_iterate_items(pvl, &vg->pvs) { ++ if (pvl->pv->dev == dev) { ++ pv = pvl->pv; ++ break; ++ } ++ } ++ ++ if (!pv) ++ return_0; ++ ++ dm_list_iterate_items(lvl, &vg->lvs) { ++ if (!lv_is_visible(lvl->lv)) ++ continue; ++ if (!lv_is_on_pv(lvl->lv, pv)) ++ continue; ++ ++ if (!(lvl2 = dm_pool_zalloc(cmd->mem, sizeof(*lvl2)))) ++ return_0; ++ lvl2->lv = lvl->lv; ++ dm_list_add(lvs_list, &lvl2->list); ++ } ++ ++ return 1; ++} ++ +diff --git a/lib/metadata/metadata.h b/lib/metadata/metadata.h +index dfd576e..70f7bbc 100644 +--- a/lib/metadata/metadata.h ++++ b/lib/metadata/metadata.h +@@ -538,4 +538,8 @@ char *tags_format_and_copy(struct dm_pool *mem, const struct dm_list *tagsl); + + void set_pv_devices(struct format_instance *fid, struct volume_group *vg); + ++int get_visible_lvs_using_pv(struct cmd_context *cmd, struct volume_group *vg, struct device *dev, ++ struct dm_list *lvs_list); ++ ++ + #endif +diff --git a/tools/args.h b/tools/args.h +index d4f23f8..9aeec40 100644 +--- a/tools/args.h ++++ b/tools/args.h +@@ -329,6 +329,19 @@ arg(labelsector_ARG, '\0', "labelsector", number_VAL, 0, 0, + "start of the disk (between 0 and 3 inclusive - see LABEL_SCAN_SECTORS\n" + "in the source). Use with care.\n") + ++arg(listlvs_ARG, '\0', "listlvs", 0, 0, 0, ++ "Print a list of LVs that use the device.\n") ++ ++arg(listvg_ARG, '\0', "listvg", 0, 0, 0, ++ "Print the VG that uses the device.\n") ++ ++arg(checkcomplete_ARG, '\0', "checkcomplete", 0, 0, 0, ++ "Check if all the devices used by a VG or LV are present,\n" ++ "and print \"complete\" or \"incomplete\" for each listed\n" ++ "VG or LV. This option is used as a part of event-based\n" ++ "autoactivation, so pvscan will do nothing if this option\n" ++ "is set and event_activation=0 in the config settings.\n") ++ + arg(lockopt_ARG, '\0', "lockopt", string_VAL, 0, 0, + "Used to pass options for special cases to lvmlockd.\n" + "See \\fBlvmlockd\\fP(8) for more information.\n") +@@ -811,6 +824,9 @@ arg(type_ARG, '\0', "type", segtype_VAL, 0, 0, + "(e.g. --stripes, --mirrors, --snapshot, --virtualsize, --thin, --cache, --vdo).\n" + "Use inferred types with care because it can lead to unexpected results.\n") + ++arg(udevoutput_ARG, '\0', "udevoutput", 0, 0, 0, ++ "Command output is modified to be imported from a udev rule.\n") ++ + arg(unbuffered_ARG, '\0', "unbuffered", 0, 0, 0, + "Produce output immediately without sorting or aligning the columns properly.\n") + +@@ -887,6 +903,10 @@ arg(vgmetadatacopies_ARG, '\0', "vgmetadatacopies", vgmetadatacopies_VAL, 0, 0, + "\\fBall\\fP causes LVM to first clear the metadataignore flags on\n" + "all PVs, and then to become unmanaged.\n") + ++arg(vgonline_ARG, '\0', "vgonline", 0, 0, 0, ++ "The first command to see a complete VG will report it uniquely.\n" ++ "Other commands to see the complete VG will report it differently.\n") ++ + arg(withsummary_ARG, '\0', "withsummary", 0, 0, 0, + "Display a one line comment for each configuration node.\n") + +diff --git a/tools/command-lines.in b/tools/command-lines.in +index 0bc5a49..aa3e3d9 100644 +--- a/tools/command-lines.in ++++ b/tools/command-lines.in +@@ -1633,11 +1633,37 @@ DESC: Display PV information. + + pvscan --cache_long + OO: --ignorelockingfailure, --reportformat ReportFmt, +---activate ay, --major Number, --minor Number, --noudevsync ++--major Number, --minor Number, --noudevsync + OP: PV|String ... + IO: --background + ID: pvscan_cache +-DESC: Autoactivate a VG when all PVs are online. ++DESC: Record that a PV is online or offline. ++ ++pvscan --cache_long --activate ay ++OO: --ignorelockingfailure, --reportformat ReportFmt, ++--major Number, --minor Number, --noudevsync ++OP: PV|String ... ++IO: --background ++ID: pvscan_cache ++DESC: Record that a PV is online and autoactivate the VG if complete. ++ ++pvscan --cache_long --listvg PV ++OO: --ignorelockingfailure, --checkcomplete, --vgonline, --udevoutput ++ID: pvscan_cache ++DESC: Record that a PV is online and list the VG using the PV. ++ ++pvscan --cache_long --listlvs PV ++OO: --ignorelockingfailure, --checkcomplete, --vgonline ++ID: pvscan_cache ++DESC: Record that a PV is online and list LVs using the PV. ++ ++pvscan --listlvs PV ++ID: pvscan_cache ++DESC: List LVs using the PV. ++ ++pvscan --listvg PV ++ID: pvscan_cache ++DESC: List the VG using the PV. + + --- + +diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c +index 4b63d48..6ea5487 100644 +--- a/tools/lvmcmdline.c ++++ b/tools/lvmcmdline.c +@@ -2390,6 +2390,9 @@ static void _reset_current_settings_to_default(struct cmd_context *cmd) + + static void _get_current_output_settings_from_args(struct cmd_context *cmd) + { ++ if (arg_is_set(cmd, udevoutput_ARG)) ++ cmd->current_settings.suppress = 1; ++ + if (arg_is_set(cmd, debug_ARG)) + cmd->current_settings.debug = _LOG_FATAL + (arg_count(cmd, debug_ARG) - 1); + +@@ -2405,6 +2408,7 @@ static void _get_current_output_settings_from_args(struct cmd_context *cmd) + + static void _apply_current_output_settings(struct cmd_context *cmd) + { ++ log_suppress(cmd->current_settings.suppress); + init_debug(cmd->current_settings.debug); + init_debug_classes_logged(cmd->default_settings.debug_classes); + init_verbose(cmd->current_settings.verbose + VERBOSE_BASE_LEVEL); +diff --git a/tools/pvscan.c b/tools/pvscan.c +index 2299890..a836e0a 100644 +--- a/tools/pvscan.c ++++ b/tools/pvscan.c +@@ -179,6 +179,27 @@ out: + return ret; + } + ++/* ++ * Avoid a duplicate pvscan[%d] prefix when logging to the journal. ++ * FIXME: this should probably replace if (udevoutput) with ++ * if (log_journal & LOG_JOURNAL_OUTPUT) ++ */ ++#define log_print_pvscan(cmd, fmt, args...) \ ++do \ ++ if (arg_is_set(cmd, udevoutput_ARG)) \ ++ log_print(fmt, ##args); \ ++ else \ ++ log_print("pvscan[%d] " fmt, getpid(), ##args); \ ++while (0) ++ ++#define log_error_pvscan(cmd, fmt, args...) \ ++do \ ++ if (arg_is_set(cmd, udevoutput_ARG)) \ ++ log_error(fmt, ##args); \ ++ else \ ++ log_error("pvscan[%d] " fmt, getpid(), ##args); \ ++while (0) ++ + static char *_vgname_in_pvid_file_buf(char *buf) + { + char *p, *n; +@@ -259,7 +280,7 @@ static void _lookup_file_remove(char *vgname) + * that the vg will be activated again when it becomes complete. + */ + +-static void _online_vg_file_remove(const char *vgname) ++void online_vg_file_remove(const char *vgname) + { + char path[PATH_MAX]; + +@@ -314,7 +335,7 @@ static void _online_pvid_file_remove_devno(int major, int minor) + log_sys_debug("unlink", path); + + if (file_vgname[0]) { +- _online_vg_file_remove(file_vgname); ++ online_vg_file_remove(file_vgname); + _lookup_file_remove(file_vgname); + } + } +@@ -345,7 +366,7 @@ static void _online_files_remove(const char *dirpath) + log_sys_debug("closedir", dirpath); + } + +-static int _online_pvid_file_create(struct device *dev, const char *vgname) ++static int _online_pvid_file_create(struct cmd_context *cmd, struct device *dev, const char *vgname) + { + char path[PATH_MAX]; + char buf[MAX_PVID_FILE_SIZE] = { 0 }; +@@ -362,18 +383,18 @@ static int _online_pvid_file_create(struct device *dev, const char *vgname) + minor = (int)MINOR(dev->dev); + + if (dm_snprintf(path, sizeof(path), "%s/%s", _pvs_online_dir, dev->pvid) < 0) { +- log_error("Path %s/%s is too long.", _pvs_online_dir, dev->pvid); ++ log_error_pvscan(cmd, "Path %s/%s is too long.", _pvs_online_dir, dev->pvid); + return 0; + } + + if ((len1 = dm_snprintf(buf, sizeof(buf), "%d:%d\n", major, minor)) < 0) { +- log_error("Cannot create online file path for %s %d:%d.", dev_name(dev), major, minor); ++ log_error_pvscan(cmd, "Cannot create online file path for %s %d:%d.", dev_name(dev), major, minor); + return 0; + } + + if (vgname) { + if ((len2 = dm_snprintf(buf + len1, sizeof(buf) - len1, "vg:%s\n", vgname)) < 0) { +- log_warn("Incomplete online file for %s %d:%d vg %s.", dev_name(dev), major, minor, vgname); ++ log_print_pvscan(cmd, "Incomplete online file for %s %d:%d vg %s.", dev_name(dev), major, minor, vgname); + /* can still continue without vgname */ + len2 = 0; + } +@@ -387,7 +408,7 @@ static int _online_pvid_file_create(struct device *dev, const char *vgname) + if (fd < 0) { + if (errno == EEXIST) + goto check_duplicate; +- log_error("Failed to create online file for %s path %s error %d", dev_name(dev), path, errno); ++ log_error_pvscan(cmd, "Failed to create online file for %s path %s error %d", dev_name(dev), path, errno); + return 0; + } + +@@ -435,12 +456,12 @@ check_duplicate: + /* Don't know how vgname might not match, but it's not good so fail. */ + + if ((file_major != major) || (file_minor != minor)) +- log_error("pvscan[%d] PV %s is duplicate for PVID %s on %d:%d and %d:%d.", +- getpid(), dev_name(dev), dev->pvid, major, minor, file_major, file_minor); ++ log_error_pvscan(cmd, "PV %s is duplicate for PVID %s on %d:%d and %d:%d.", ++ dev_name(dev), dev->pvid, major, minor, file_major, file_minor); + + if (file_vgname[0] && vgname && strcmp(file_vgname, vgname)) +- log_error("pvscan[%d] PV %s has unexpected VG %s vs %s.", +- getpid(), dev_name(dev), vgname, file_vgname); ++ log_error_pvscan(cmd, "PV %s has unexpected VG %s vs %s.", ++ dev_name(dev), vgname, file_vgname); + + return 0; + } +@@ -475,7 +496,7 @@ static int _write_lookup_file(struct cmd_context *cmd, struct volume_group *vg) + int fd; + + if (dm_snprintf(path, sizeof(path), "%s/%s", _pvs_lookup_dir, vg->name) < 0) { +- log_error("Path %s/%s is too long.", _pvs_lookup_dir, vg->name); ++ log_error_pvscan(cmd, "Path %s/%s is too long.", _pvs_lookup_dir, vg->name); + return 0; + } + +@@ -638,7 +659,7 @@ static int _count_pvid_files_from_lookup_file(struct cmd_context *cmd, struct de + return (vgname) ? 1 : 0; + } + +-static void _online_dir_setup(void) ++static void _online_dir_setup(struct cmd_context *cmd) + { + struct stat st; + int rv; +@@ -652,7 +673,7 @@ static void _online_dir_setup(void) + dm_prepare_selinux_context(NULL, 0); + + if ((rv < 0) && stat(DEFAULT_RUN_DIR, &st)) +- log_error("Failed to create %s %d", DEFAULT_RUN_DIR, errno); ++ log_error_pvscan(cmd, "Failed to create %s %d", DEFAULT_RUN_DIR, errno); + + do_pvs: + if (!stat(_pvs_online_dir, &st)) +@@ -664,7 +685,7 @@ do_pvs: + dm_prepare_selinux_context(NULL, 0); + + if ((rv < 0) && stat(_pvs_online_dir, &st)) +- log_error("Failed to create %s %d", _pvs_online_dir, errno); ++ log_error_pvscan(cmd, "Failed to create %s %d", _pvs_online_dir, errno); + + do_vgs: + if (!stat(_vgs_online_dir, &st)) +@@ -676,7 +697,7 @@ do_vgs: + dm_prepare_selinux_context(NULL, 0); + + if ((rv < 0) && stat(_vgs_online_dir, &st)) +- log_error("Failed to create %s %d", _vgs_online_dir, errno); ++ log_error_pvscan(cmd, "Failed to create %s %d", _vgs_online_dir, errno); + + do_lookup: + if (!stat(_pvs_lookup_dir, &st)) +@@ -688,7 +709,7 @@ do_lookup: + dm_prepare_selinux_context(NULL, 0); + + if ((rv < 0) && stat(_pvs_lookup_dir, &st)) +- log_error("Failed to create %s %d", _pvs_lookup_dir, errno); ++ log_error_pvscan(cmd, "Failed to create %s %d", _pvs_lookup_dir, errno); + + + } +@@ -725,7 +746,7 @@ static int _pvscan_aa_single(struct cmd_context *cmd, const char *vg_name, + log_debug("pvscan autoactivating VG %s.", vg_name); + + if (!vgchange_activate(cmd, vg, CHANGE_AAY)) { +- log_error("%s: autoactivation failed.", vg->name); ++ log_error_pvscan(cmd, "%s: autoactivation failed.", vg->name); + pp->activate_errors++; + } + +@@ -738,7 +759,7 @@ static int _online_vg_file_create(struct cmd_context *cmd, const char *vgname) + int fd; + + if (dm_snprintf(path, sizeof(path), "%s/%s", _vgs_online_dir, vgname) < 0) { +- log_error("Path %s/%s is too long.", _vgs_online_dir, vgname); ++ log_error_pvscan(cmd, "Path %s/%s is too long.", _vgs_online_dir, vgname); + return 0; + } + +@@ -826,15 +847,15 @@ static int _get_devs_from_saved_vg(struct cmd_context *cmd, const char *vgname, + _online_pvid_file_read(path, &file_major, &file_minor, file_vgname); + + if (file_vgname[0] && strcmp(vgname, file_vgname)) { +- log_error("Wrong VG found for %d:%d PVID %s: %s vs %s", +- file_major, file_minor, pvid, vgname, file_vgname); ++ log_error_pvscan(cmd, "Wrong VG found for %d:%d PVID %s: %s vs %s", ++ file_major, file_minor, pvid, vgname, file_vgname); + goto bad; + } + + devno = MKDEV(file_major, file_minor); + + if (!(dev = dev_cache_get_by_devt(cmd, devno, NULL, NULL))) { +- log_error("No device found for %d:%d PVID %s", file_major, file_minor, pvid); ++ log_error_pvscan(cmd, "No device found for %d:%d PVID %s", file_major, file_minor, pvid); + goto bad; + } + +@@ -844,7 +865,7 @@ static int _get_devs_from_saved_vg(struct cmd_context *cmd, const char *vgname, + if (strcmp(name1, name2)) { + if (!id_write_format((const struct id *)pvid, uuidstr, sizeof(uuidstr))) + uuidstr[0] = '\0'; +- log_print("PVID %s read from %s last written to %s.", uuidstr, name1, name2); ++ log_print_pvscan(cmd, "PVID %s read from %s last written to %s.", uuidstr, name1, name2); + goto bad; + } + +@@ -921,7 +942,7 @@ static int _pvscan_aa_quick(struct cmd_context *cmd, struct pvscan_aa_params *pp + * The dev_cache gives us struct devices from the devnums. + */ + if (!_get_devs_from_saved_vg(cmd, vgname, &devs)) { +- log_print("pvscan[%d] VG %s not using quick activation.", getpid(), vgname); ++ log_print_pvscan(cmd, "VG %s not using quick activation.", vgname); + *no_quick = 1; + return ECMD_FAILED; + } +@@ -940,7 +961,7 @@ static int _pvscan_aa_quick(struct cmd_context *cmd, struct pvscan_aa_params *pp + * label rescan are then disabled in vg_read.) + */ + if (!lock_vol(cmd, vgname, LCK_VG_WRITE, NULL)) { +- log_error("pvscan activation for VG %s failed to lock VG.", vgname); ++ log_error_pvscan(cmd, "activation for VG %s failed to lock VG.", vgname); + return ECMD_FAILED; + } + +@@ -953,7 +974,7 @@ static int _pvscan_aa_quick(struct cmd_context *cmd, struct pvscan_aa_params *pp + label_scan_devs(cmd, NULL, &devs); + + if (!(vgid = lvmcache_vgid_from_vgname(cmd, vgname))) { +- log_error("pvscan activation for VG %s failed to find vgid.", vgname); ++ log_error_pvscan(cmd, "activation for VG %s failed to find vgid.", vgname); + return ECMD_FAILED; + } + +@@ -973,7 +994,7 @@ static int _pvscan_aa_quick(struct cmd_context *cmd, struct pvscan_aa_params *pp + * original device arg scan. There will be very few and unusual + * cases that would be caught here. + */ +- log_error("pvscan activation for VG %s cannot read (%x).", vgname, error_flags); ++ log_error_pvscan(cmd, "activation for VG %s cannot read (%x).", vgname, error_flags); + return ECMD_FAILED; + } + +@@ -995,7 +1016,7 @@ static int _pvscan_aa_quick(struct cmd_context *cmd, struct pvscan_aa_params *pp + dm_list_iterate_items(pvl, &vg->pvs) { + if (dev_in_device_list(pvl->pv->dev, &devs)) + continue; +- log_error("pvscan activation for VG %s found different devices.", vgname); ++ log_error_pvscan(cmd, "activation for VG %s found different devices.", vgname); + ret = ECMD_FAILED; + goto out; + } +@@ -1003,7 +1024,7 @@ static int _pvscan_aa_quick(struct cmd_context *cmd, struct pvscan_aa_params *pp + log_debug("pvscan autoactivating VG %s.", vgname); + + if (!vgchange_activate(cmd, vg, CHANGE_AAY)) { +- log_error("%s: autoactivation failed.", vg->name); ++ log_error_pvscan(cmd, "%s: autoactivation failed.", vg->name); + pp->activate_errors++; + } + +@@ -1022,7 +1043,7 @@ static int _pvscan_aa(struct cmd_context *cmd, struct pvscan_aa_params *pp, + int ret = ECMD_FAILED; + + if (!(handle = init_processing_handle(cmd, NULL))) { +- log_error("Failed to initialize processing handle."); ++ log_error_pvscan(cmd, "Failed to initialize processing handle."); + goto out; + } + +@@ -1037,11 +1058,11 @@ static int _pvscan_aa(struct cmd_context *cmd, struct pvscan_aa_params *pp, + */ + dm_list_iterate_items_safe(sl, sl2, vgnames) { + if (!_online_vg_file_create(cmd, sl->str)) { +- log_print("pvscan[%d] VG %s skip autoactivation.", getpid(), sl->str); ++ log_print_pvscan(cmd, "VG %s skip autoactivation.", sl->str); + str_list_del(vgnames, sl->str); + continue; + } +- log_print("pvscan[%d] VG %s run autoactivation.", getpid(), sl->str); ++ log_print_pvscan(cmd, "VG %s run autoactivation.", sl->str); + } + + if (dm_list_empty(vgnames)) { +@@ -1189,6 +1210,64 @@ static int _get_args_devs(struct cmd_context *cmd, struct dm_list *pvscan_args, + return 1; + } + ++static void _set_pv_devices_online(struct cmd_context *cmd, struct volume_group *vg) ++{ ++ char path[PATH_MAX]; ++ char file_vgname[NAME_LEN]; ++ char pvid[ID_LEN+1] = { 0 }; ++ struct pv_list *pvl; ++ struct device *dev; ++ int major, minor; ++ dev_t devno; ++ ++ dm_list_iterate_items(pvl, &vg->pvs) { ++ memcpy(&pvid, &pvl->pv->id.uuid, ID_LEN); ++ ++ if (pvl->pv->status & MISSING_PV) { ++ log_debug("set_pv_devices_online vg %s pv %s missing flag already set", ++ vg->name, pvid); ++ continue; ++ } ++ ++ if (!_online_pvid_file_exists(pvid)) { ++ log_debug("set_pv_devices_online vg %s pv %s no online file", ++ vg->name, pvid); ++ pvl->pv->status |= MISSING_PV; ++ continue; ++ } ++ ++ memset(path, 0, sizeof(path)); ++ snprintf(path, sizeof(path), "%s/%s", _pvs_online_dir, pvid); ++ ++ major = 0; ++ minor = 0; ++ file_vgname[0] = '\0'; ++ ++ _online_pvid_file_read(path, &major, &minor, file_vgname); ++ ++ if (file_vgname[0] && strcmp(vg->name, file_vgname)) { ++ log_warn("WARNING: VG %s PV %s wrong vgname in online file %s", ++ vg->name, pvid, file_vgname); ++ pvl->pv->status |= MISSING_PV; ++ continue; ++ } ++ ++ devno = MKDEV(major, minor); ++ ++ if (!(dev = dev_cache_get_by_devt(cmd, devno, NULL, NULL))) { ++ log_print_pvscan(cmd, "VG %s PV %s no device found for %d:%d", ++ vg->name, pvid, major, minor); ++ pvl->pv->status |= MISSING_PV; ++ continue; ++ } ++ ++ log_debug("set_pv_devices_online vg %s pv %s is online %s", ++ vg->name, pvid, dev_name(dev)); ++ ++ pvl->pv->dev = dev; ++ } ++} ++ + static int _online_devs(struct cmd_context *cmd, int do_all, struct dm_list *pvscan_devs, + int *pv_count, struct dm_list *complete_vgnames) + { +@@ -1201,15 +1280,20 @@ static int _online_devs(struct cmd_context *cmd, int do_all, struct dm_list *pvs + struct metadata_area *mda1, *mda2; + struct volume_group *vg; + struct physical_volume *pv; +- const char *vgname; +- uint32_t ext_version, ext_flags; ++ const char *vgname = NULL; + uint64_t devsize; ++ uint32_t ext_version, ext_flags; ++ int do_cache = arg_is_set(cmd, cache_long_ARG); + int do_activate = arg_is_set(cmd, activate_ARG); +- int do_full_check; ++ int do_list_lvs = arg_is_set(cmd, listlvs_ARG); ++ int do_list_vg = arg_is_set(cmd, listvg_ARG); ++ int do_check_complete = arg_is_set(cmd, checkcomplete_ARG); ++ int do_vgonline = arg_is_set(cmd, vgonline_ARG); + int pvs_online; + int pvs_offline; + int pvs_unknown; + int vg_complete; ++ int do_full_check; + int ret = 1; + + dm_list_iterate_items_safe(devl, devl2, pvscan_devs) { +@@ -1219,14 +1303,14 @@ static int _online_devs(struct cmd_context *cmd, int do_all, struct dm_list *pvs + + if (!(info = lvmcache_info_from_pvid(dev->pvid, dev, 0))) { + if (!do_all) +- log_print("pvscan[%d] ignore %s with no lvm info.", getpid(), dev_name(dev)); ++ log_print_pvscan(cmd, "ignore %s with no lvm info.", dev_name(dev)); + continue; + } + + ext_version = lvmcache_ext_version(info); + ext_flags = lvmcache_ext_flags(info); + if ((ext_version >= 2) && !(ext_flags & PV_EXT_USED)) { +- log_print("pvscan[%d] PV %s not used.", getpid(), dev_name(dev)); ++ log_print_pvscan(cmd, "PV %s not used.", dev_name(dev)); + (*pv_count)++; + continue; + } +@@ -1245,7 +1329,7 @@ static int _online_devs(struct cmd_context *cmd, int do_all, struct dm_list *pvs + vg = mda2->ops->vg_read(cmd, fid, "", mda2, NULL, NULL); + + if (!vg) { +- log_print("pvscan[%d] PV %s has no VG metadata.", getpid(), dev_name(dev)); ++ log_print_pvscan(cmd, "PV %s has no VG metadata.", dev_name(dev)); + if (fid) + fmt->ops->destroy_instance(fid); + goto online; +@@ -1254,7 +1338,7 @@ static int _online_devs(struct cmd_context *cmd, int do_all, struct dm_list *pvs + set_pv_devices(fid, vg); + + if (!(pv = find_pv(vg, dev))) { +- log_print("pvscan[%d] PV %s not found in VG %s.", getpid(), dev_name(dev), vg->name); ++ log_print_pvscan(cmd, "PV %s not found in VG %s.", dev_name(dev), vg->name); + release_vg(vg); + continue; + } +@@ -1271,14 +1355,15 @@ static int _online_devs(struct cmd_context *cmd, int do_all, struct dm_list *pvs + if (pv->device_hint && !strncmp(pv->device_hint, "/dev/md", 7)) + do_full_check = 1; + } ++ + if (do_full_check && dev_is_md_component(cmd, dev, NULL, 1)) { +- log_print("pvscan[%d] ignore md component %s.", getpid(), dev_name(dev)); ++ log_print_pvscan(cmd, "ignore md component %s.", dev_name(dev)); + release_vg(vg); + continue; + } + + if (vg_is_shared(vg)) { +- log_print("pvscan[%d] PV %s ignore shared VG.", getpid(), dev_name(dev)); ++ log_print_pvscan(cmd, "PV %s ignore shared VG.", dev_name(dev)); + release_vg(vg); + continue; + } +@@ -1288,7 +1373,13 @@ static int _online_devs(struct cmd_context *cmd, int do_all, struct dm_list *pvs + vg_is_foreign(vg)) { + log_verbose("Ignore PV %s with VG system id %s with our system id %s", + dev_name(dev), vg->system_id, cmd->system_id); +- log_print("pvscan[%d] PV %s ignore foreign VG.", getpid(), dev_name(dev)); ++ log_print_pvscan(cmd, "PV %s ignore foreign VG.", dev_name(dev)); ++ release_vg(vg); ++ continue; ++ } ++ ++ if (vg_is_exported(vg)) { ++ log_print_pvscan(cmd, "PV %s ignore exported VG.", dev_name(dev)); + release_vg(vg); + continue; + } +@@ -1307,19 +1398,20 @@ static int _online_devs(struct cmd_context *cmd, int do_all, struct dm_list *pvs + + /* + * Create file named for pvid to record this PV is online. ++ * The command creates/checks online files only when --cache is used. + */ +- if (!_online_pvid_file_create(dev, vg ? vg->name : NULL)) { +- log_error("pvscan[%d] PV %s failed to create online file.", getpid(), dev_name(dev)); ++ if (do_cache && !_online_pvid_file_create(cmd, dev, vg ? vg->name : NULL)) { ++ log_error_pvscan(cmd, "PV %s failed to create online file.", dev_name(dev)); + release_vg(vg); + ret = 0; + continue; + } + + /* +- * When not activating we don't need to know about vg completeness. ++ * A plain pvscan --cache just creates the online file. + */ +- if (!do_activate) { +- log_print("pvscan[%d] PV %s online.", getpid(), dev_name(dev)); ++ if (!do_activate && !do_list_lvs && !do_list_vg) { ++ log_print_pvscan(cmd, "PV %s online.", dev_name(dev)); + release_vg(vg); + continue; + } +@@ -1327,58 +1419,159 @@ static int _online_devs(struct cmd_context *cmd, int do_all, struct dm_list *pvs + /* + * Check if all the PVs for this VG are online. If the arrival + * of this dev completes the VG, then save the vgname in +- * complete_vgnames so it will be activated. ++ * complete_vgnames (activation phase will want to know which ++ * VGs to activate.) + */ +- pvs_online = 0; +- pvs_offline = 0; +- pvs_unknown = 0; +- vg_complete = 0; +- +- if (vg) { +- /* +- * Use the VG metadata from this PV for a list of all +- * PVIDs. Write a lookup file of PVIDs in case another +- * pvscan needs it. After writing lookup file, recheck +- * pvid files to resolve a possible race with another +- * pvscan reading the lookup file that missed it. +- */ +- log_debug("checking all pvid files from vg %s", vg->name); +- _count_pvid_files(vg, &pvs_online, &pvs_offline); ++ if (do_activate || do_check_complete) { ++ pvs_online = 0; ++ pvs_offline = 0; ++ pvs_unknown = 0; ++ vg_complete = 0; + +- if (pvs_offline && _write_lookup_file(cmd, vg)) { +- log_debug("rechecking all pvid files from vg %s", vg->name); ++ if (vg) { ++ /* ++ * Use the VG metadata from this PV for a list of all ++ * PVIDs. Write a lookup file of PVIDs in case another ++ * pvscan needs it. After writing lookup file, recheck ++ * pvid files to resolve a possible race with another ++ * pvscan reading the lookup file that missed it. ++ */ ++ log_debug("checking all pvid files from vg %s", vg->name); + _count_pvid_files(vg, &pvs_online, &pvs_offline); +- if (!pvs_offline) +- log_print("pvscan[%d] VG %s complete after recheck.", getpid(), vg->name); ++ ++ if (pvs_offline && _write_lookup_file(cmd, vg)) { ++ log_debug("rechecking all pvid files from vg %s", vg->name); ++ _count_pvid_files(vg, &pvs_online, &pvs_offline); ++ if (!pvs_offline) ++ log_print_pvscan(cmd, "VG %s complete after recheck.", vg->name); ++ } ++ ++ vgname = vg->name; ++ } else { ++ /* ++ * No VG metadata on this PV, so try to use a lookup ++ * file written by a prior pvscan for a list of all ++ * PVIDs. A lookup file may not exist for this PV if ++ * it's the first to appear from the VG. ++ */ ++ log_debug("checking all pvid files from lookup file"); ++ if (!_count_pvid_files_from_lookup_file(cmd, dev, &pvs_online, &pvs_offline, &vgname)) ++ pvs_unknown = 1; ++ } ++ ++ if (pvs_unknown) { ++ log_print_pvscan(cmd, "PV %s online, VG unknown.", dev_name(dev)); ++ vg_complete = 0; ++ ++ } else if (pvs_offline) { ++ log_print_pvscan(cmd, "PV %s online, VG %s incomplete (need %d).", ++ dev_name(dev), vgname, pvs_offline); ++ vg_complete = 0; ++ ++ } else { ++ log_print_pvscan(cmd, "PV %s online, VG %s is complete.", dev_name(dev), vgname); ++ if (!str_list_add(cmd->mem, complete_vgnames, dm_pool_strdup(cmd->mem, vgname))) ++ stack; ++ vg_complete = 1; + } ++ } + ++ if (!vgname && vg) + vgname = vg->name; +- } else { ++ ++ if (do_list_vg || do_list_lvs) { ++ if (!vgname) { ++ log_print("VG unknown"); ++ } else if (!do_check_complete) { ++ log_print("VG %s", vgname); ++ } else if (vg_complete) { ++ if (do_vgonline && !_online_vg_file_create(cmd, vgname)) { ++ log_print("VG %s finished", vgname); ++ } else { ++ /* ++ * A udev rule imports KEY=val from a program's stdout. ++ * Other output causes udev to ignore everything. ++ * Run pvscan from udev rule using --udevoutput to ++ * enable this printf, and suppress all log output ++ */ ++ if (arg_is_set(cmd, udevoutput_ARG)) ++ printf("LVM_VG_NAME_COMPLETE='%s'\n", vgname); ++ else ++ log_print("VG %s complete", vgname); ++ } ++ } else { ++ if (arg_is_set(cmd, udevoutput_ARG)) ++ printf("LVM_VG_NAME_INCOMPLETE='%s'\n", vgname); ++ else ++ log_print("VG %s incomplete", vgname); ++ } ++ + /* +- * No VG metadata on this PV, so try to use a lookup +- * file written by a prior pvscan for a list of all +- * PVIDs. A lookup file may not exist for this PV if +- * it's the first to appear from the VG. ++ * When the VG is complete|finished, we could print ++ * a list of devices in the VG, by reading the pvid files ++ * that were counted, which provides major:minor of each ++ * device and using that to get the struct dev and dev_name. ++ * The user could pass this list of devices to --devices ++ * to optimize a subsequent command (activation) on the VG. ++ * Just call set_pv_devices_online (if not done othewise) ++ * since that finds the devs. + */ +- log_debug("checking all pvid files from lookup file"); +- if (!_count_pvid_files_from_lookup_file(cmd, dev, &pvs_online, &pvs_offline, &vgname)) +- pvs_unknown = 1; + } + +- if (pvs_unknown) { +- log_print("pvscan[%d] PV %s online, VG unknown.", +- getpid(), dev_name(dev)); +- } else if (pvs_offline) { +- log_print("pvscan[%d] PV %s online, VG %s incomplete (need %d).", +- getpid(), dev_name(dev), vgname, pvs_offline); +- } else { +- log_print("pvscan[%d] PV %s online, VG %s is complete.", getpid(), dev_name(dev), vgname); +- if (!str_list_add(cmd->mem, complete_vgnames, dm_pool_strdup(cmd->mem, vgname))) +- stack; +- vg_complete = 1; ++ if (do_list_lvs && !vg) { ++ /* require all PVs used for booting have metadata */ ++ log_print_pvscan(cmd, "Cannot list LVs from device without metadata."); + } + +- if (!saved_vg && vg && vg_complete && !do_all && (dm_list_size(pvscan_devs) == 1)) ++ if (do_list_lvs && vg) { ++ struct dm_list lvs_list; ++ struct lv_list *lvl; ++ ++ dm_list_init(&lvs_list); ++ ++ /* ++ * For each vg->pvs entry, get the dev based on the online file ++ * for the pvid and set pv->dev or pv->status MISSING_PV. ++ */ ++ _set_pv_devices_online(cmd, vg); ++ ++ /* ++ * lvs_list are LVs that use dev. ++ */ ++ if (!get_visible_lvs_using_pv(cmd, vg, dev, &lvs_list)) ++ log_print_pvscan(cmd, "Failed to find LVs using %s.", dev_name(dev)); ++ ++ if (!do_check_complete) { ++ dm_list_iterate_items(lvl, &lvs_list) ++ log_print("LV %s", display_lvname(lvl->lv)); ++ } else if (vg_complete) { ++ /* ++ * A shortcut; the vg complete implies all lvs are complete. ++ */ ++ dm_list_iterate_items(lvl, &lvs_list) ++ log_print("LV %s complete", display_lvname(lvl->lv)); ++ } else { ++ /* ++ * For each LV in VG, check if all devs are present. ++ * Sets the PARTIAL flag on LVs that are not complete. ++ */ ++ if (!vg_mark_partial_lvs(vg, 1)) ++ log_print_pvscan(cmd, "Failed to check partial lvs."); ++ ++ dm_list_iterate_items(lvl, &lvs_list) { ++ if (!lv_is_partial(lvl->lv)) ++ log_print("LV %s complete", display_lvname(lvl->lv)); ++ else ++ log_print("LV %s incomplete", display_lvname(lvl->lv)); ++ } ++ } ++ } ++ ++ /* ++ * When "pvscan --cache -aay " completes the vg, save the ++ * struct vg to use for quick activation function. ++ */ ++ if (do_activate && !saved_vg && vg && vg_complete && !do_all && (dm_list_size(pvscan_devs) == 1)) + saved_vg = vg; + else + release_vg(vg); +@@ -1472,7 +1665,7 @@ static int _pvscan_cache_args(struct cmd_context *cmd, int argc, char **argv, + * Specific devs must be matched later with device_ids_match_dev(). + */ + if (!setup_devices_no_file_match(cmd)) { +- log_error("Failed to set up devices."); ++ log_error_pvscan(cmd, "Failed to set up devices."); + return 0; + } + +@@ -1551,8 +1744,8 @@ static int _pvscan_cache_args(struct cmd_context *cmd, int argc, char **argv, + + dm_list_iterate_items_safe(devl, devl2, &pvscan_devs) { + if (!cmd->filter->passes_filter(cmd, cmd->filter, devl->dev, NULL)) { +- log_print("pvscan[%d] %s excluded by filters: %s.", getpid(), +- dev_name(devl->dev), dev_filtered_reason(devl->dev)); ++ log_print_pvscan(cmd, "%s excluded by filters: %s.", ++ dev_name(devl->dev), dev_filtered_reason(devl->dev)); + dm_list_del(&devl->list); + } + } +@@ -1588,7 +1781,7 @@ static int _pvscan_cache_args(struct cmd_context *cmd, int argc, char **argv, + + if (!has_pvid) { + /* Not an lvm device */ +- log_print("pvscan[%d] %s not an lvm device.", getpid(), dev_name(devl->dev)); ++ log_print_pvscan(cmd, "%s not an lvm device.", dev_name(devl->dev)); + dm_list_del(&devl->list); + continue; + } +@@ -1599,8 +1792,8 @@ static int _pvscan_cache_args(struct cmd_context *cmd, int argc, char **argv, + */ + if (relax_deviceid_filter) { + if (!get_du_for_pvid(cmd, devl->dev->pvid)) { +- log_print("pvscan[%d] %s excluded by devices file (checking PVID).", +- getpid(), dev_name(devl->dev)); ++ log_print_pvscan(cmd, "%s excluded by devices file (checking PVID).", ++ dev_name(devl->dev)); + dm_list_del(&devl->list); + continue; + } +@@ -1608,8 +1801,8 @@ static int _pvscan_cache_args(struct cmd_context *cmd, int argc, char **argv, + + /* Applies all filters, including those that need data from dev. */ + if (!cmd->filter->passes_filter(cmd, cmd->filter, devl->dev, NULL)) { +- log_print("pvscan[%d] %s excluded by filters: %s.", getpid(), +- dev_name(devl->dev), dev_filtered_reason(devl->dev)); ++ log_print_pvscan(cmd, "%s excluded by filters: %s.", ++ dev_name(devl->dev), dev_filtered_reason(devl->dev)); + dm_list_del(&devl->list); + } + } +@@ -1673,6 +1866,37 @@ int pvscan_cache_cmd(struct cmd_context *cmd, int argc, char **argv) + return ECMD_PROCESSED; + } + ++ /* ++ * lvm udev rules call: ++ * pvscan --cache --listvg|--listlvs --checkcomplete PV ++ * when PVs appear, even if event_activation=0 in lvm.conf. ++ * ++ * The udev rules will do autoactivation if they see complete ++ * VGs/LVs reported from the pvscan. ++ * ++ * When event_activation=0 we do not want to do autoactivation ++ * from udev events, so we need the pvscan to not report any ++ * complete VGs/LVs when event_activation=0 so that the udev ++ * rules do not attempt to autoactivate. ++ */ ++ ++ if (arg_is_set(cmd, checkcomplete_ARG) && !event_activation) { ++ if (arg_is_set(cmd, udevoutput_ARG)) ++ printf("LVM_EVENT_ACTIVATION=0\n"); ++ else ++ log_print_pvscan(cmd, "Ignoring pvscan with --checkcomplete because event_activation is disabled."); ++ return ECMD_PROCESSED; ++ } ++ ++ /* ++ * If obtain_device_list_from_udev was set to 1, force it to 0. ++ * Don't ask udev for info since pvscan is running from udev. ++ * If a pvscan attempts to get dev info from udev, udev can ++ * repeatedly return errors about the dev not being initialized ++ * which will stall the pvscan. ++ */ ++ init_obtain_device_list_from_udev(0); ++ + if (arg_is_set(cmd, major_ARG) + arg_is_set(cmd, minor_ARG)) + devno_args = 1; + +@@ -1683,13 +1907,13 @@ int pvscan_cache_cmd(struct cmd_context *cmd, int argc, char **argv) + + do_all = !argc && !devno_args; + +- _online_dir_setup(); ++ _online_dir_setup(cmd); + + if (do_all) { + if (!_pvscan_cache_all(cmd, argc, argv, &complete_vgnames)) + return ECMD_FAILED; + } else { +- if (!event_activation) { ++ if (!arg_is_set(cmd, checkcomplete_ARG) && !event_activation) { + /* Avoid doing anything for device removal: pvscan --cache */ + log_verbose("Ignoring pvscan --cache because event_activation is disabled."); + return ECMD_PROCESSED; +diff --git a/tools/toollib.c b/tools/toollib.c +index 3385510..6ef3895 100644 +--- a/tools/toollib.c ++++ b/tools/toollib.c +@@ -811,6 +811,24 @@ int lv_change_activate(struct cmd_context *cmd, struct logical_volume *lv, + lv_clear_integrity_recalculate_metadata(lv); + } + ++ /* ++ * When LVs are deactivated, then autoactivation of the VG is ++ * "re-armed" by removing the vg online file. So, after deactivation ++ * of LVs, if PVs are disconnected and reconnected again, event ++ * activation will trigger autoactivation again. This secondary ++ * autoactivation is somewhat different from, and not as important as ++ * the initial autoactivation during system startup. The secondary ++ * autoactivation will happen to a VG on a running system and may be ++ * mixing with user commands, so the end result is unpredictable. ++ * ++ * It's possible that we might want a config setting for usersto ++ * disable secondary autoactivations. Once a system is up, the ++ * user may want to take charge of activation changes to the VG ++ * and not have the system autoactivation interfere. ++ */ ++ if (!is_change_activating(activate) && find_config_tree_bool(cmd, global_event_activation_CFG, NULL)) ++ online_vg_file_remove(lv->vg->name); ++ + set_lv_notify(lv->vg->cmd); + + return r; +diff --git a/tools/tools.h b/tools/tools.h +index 708a78d..bc98fcb 100644 +--- a/tools/tools.h ++++ b/tools/tools.h +@@ -295,4 +295,6 @@ int lvconvert_cachevol_attach_single(struct cmd_context *cmd, + struct logical_volume *lv, + struct processing_handle *handle); + ++void online_vg_file_remove(const char *vgname); ++ + #endif +-- +1.8.3.1 + diff --git a/SOURCES/0005-logging-to-the-systemd-journal.patch b/SOURCES/0005-logging-to-the-systemd-journal.patch new file mode 100644 index 0000000..7e4d441 --- /dev/null +++ b/SOURCES/0005-logging-to-the-systemd-journal.patch @@ -0,0 +1,335 @@ +From 0621739db9b751c48b8e7a6d67941aeca9fa2154 Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Wed, 24 Mar 2021 14:19:54 -0500 +Subject: [PATCH 05/11] logging: to the systemd journal + +Configure via lvm.conf log/journal or command line --journal. + +Possible values: +"command" records command information. +"output" records default command output. +"debug" records full command debugging. + +Multiple values can be set in lvm.conf as an array. +One value can be set in --journal which is added to +values set in lvm.conf +--- + lib/commands/toolcontext.c | 30 +++++++++++++++ + lib/commands/toolcontext.h | 1 + + lib/config/config_settings.h | 6 +++ + lib/log/log.c | 91 ++++++++++++++++++++++++++++++++++++++++++++ + lib/log/log.h | 4 ++ + lib/log/lvm-logging.h | 6 +++ + tools/args.h | 8 ++++ + tools/command-lines.in | 2 +- + tools/lvmcmdline.c | 12 ++++++ + 9 files changed, 159 insertions(+), 1 deletion(-) + +diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c +index 8991aeb..f939c3e 100644 +--- a/lib/commands/toolcontext.c ++++ b/lib/commands/toolcontext.c +@@ -340,6 +340,33 @@ static int _parse_debug_classes(struct cmd_context *cmd) + return debug_classes; + } + ++static uint32_t _parse_log_journal(struct cmd_context *cmd, int cfg, const char *cfgname) ++{ ++ const struct dm_config_node *cn; ++ const struct dm_config_value *cv; ++ uint32_t fields = 0; ++ uint32_t val; ++ ++ if (!(cn = find_config_tree_array(cmd, cfg, NULL))) { ++ log_debug("Unable to find configuration for log/%s.", cfgname); ++ return 0; ++ } ++ ++ for (cv = cn->v; cv; cv = cv->next) { ++ if (cv->type != DM_CFG_STRING) { ++ log_verbose("log/%s contains a value which is not a string. Ignoring.", cfgname); ++ continue; ++ } ++ ++ if ((val = log_journal_str_to_val(cv->v.str))) ++ fields |= val; ++ else ++ log_verbose("Unrecognised value for log/%s: %s", cfgname, cv->v.str); ++ } ++ ++ return fields; ++} ++ + static void _init_logging(struct cmd_context *cmd) + { + int append = 1; +@@ -408,6 +435,9 @@ static void _init_logging(struct cmd_context *cmd) + init_debug_file_fields(_parse_debug_fields(cmd, log_debug_file_fields_CFG, "debug_file_fields")); + init_debug_output_fields(_parse_debug_fields(cmd, log_debug_output_fields_CFG, "debug_output_fields")); + ++ cmd->default_settings.journal = _parse_log_journal(cmd, log_journal_CFG, "journal"); ++ init_log_journal(cmd->default_settings.journal); ++ + t = time(NULL); + ctime_r(&t, &timebuf[0]); + timebuf[24] = '\0'; +diff --git a/lib/commands/toolcontext.h b/lib/commands/toolcontext.h +index 0cb4ad7..2ee6524 100644 +--- a/lib/commands/toolcontext.h ++++ b/lib/commands/toolcontext.h +@@ -41,6 +41,7 @@ struct config_info { + int udev_sync; + int udev_fallback; + int issue_discards; ++ uint32_t journal; + const char *msg_prefix; + const char *fmt_name; + const char *dmeventd_executable; +diff --git a/lib/config/config_settings.h b/lib/config/config_settings.h +index 76ebc10..63569bf 100644 +--- a/lib/config/config_settings.h ++++ b/lib/config/config_settings.h +@@ -871,6 +871,12 @@ cfg(log_syslog_CFG, "syslog", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_B + cfg(log_file_CFG, "file", log_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL, 0, NULL, + "Write error and debug log messages to a file specified here.\n") + ++cfg_array(log_journal_CFG, "journal", log_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, NULL, vsn(2, 3, 12), NULL, 0, NULL, ++ "Record lvm information in the systemd journal.\n" ++ "command: record commands that are run.\n" ++ "output: record default output from commands.\n" ++ "debug: record debug messages from commands.\n") ++ + cfg(log_overwrite_CFG, "overwrite", log_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_OVERWRITE, vsn(1, 0, 0), NULL, 0, NULL, + "Overwrite the log file each time the program is run.\n") + +diff --git a/lib/log/log.c b/lib/log/log.c +index 53ff5b1..8ebbf94 100644 +--- a/lib/log/log.c ++++ b/lib/log/log.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + static FILE *_log_file; + static char _log_file_path[PATH_MAX]; +@@ -40,6 +41,7 @@ static char _msg_prefix[30] = " "; + static int _abort_on_internal_errors_config = 0; + static uint32_t _debug_file_fields; + static uint32_t _debug_output_fields; ++static uint32_t _log_journal = 0; + + static lvm2_log_fn_t _lvm2_log_fn = NULL; + +@@ -455,6 +457,11 @@ void init_debug_output_fields(uint32_t debug_fields) + _debug_output_fields = debug_fields; + } + ++void init_log_journal(uint32_t fields) ++{ ++ _log_journal = fields; ++} ++ + static void _set_time_prefix(char *prefix, int buflen) + { + +@@ -609,6 +616,33 @@ static void _vprint_log(int level, const char *file, int line, int dm_errno_or_c + } + + log_it: ++ ++ if (_log_journal) { ++ int to_journal = 0; ++ ++ /* By default the visible command output is _LOG_WARN or less. */ ++ ++ if (_log_journal & LOG_JOURNAL_DEBUG) ++ to_journal = 1; ++ if ((_log_journal & LOG_JOURNAL_OUTPUT) && (log_level(level) <= _LOG_WARN)) ++ to_journal = 1; ++ ++ if (to_journal) { ++ int prio; ++ switch (log_level(level)) { ++ case _LOG_ERR: prio = LOG_ERR; break; ++ case _LOG_WARN: prio = LOG_WARNING; break; ++ case _LOG_INFO: prio = LOG_INFO; break; ++ case _LOG_NOTICE: prio = LOG_NOTICE; break; ++ case _LOG_DEBUG: prio = LOG_DEBUG; break; ++ default: prio = LOG_INFO; ++ } ++ va_copy(ap, orig_ap); ++ sd_journal_printv(prio, trformat, ap); ++ va_end(ap); ++ } ++ } ++ + if (!logged_via_report && ((verbose_level() >= level) && !_log_suppress)) { + if (verbose_level() > _LOG_DEBUG) { + memset(buf, 0, sizeof(buf)); +@@ -792,3 +826,60 @@ void log_set_report_object_name_and_id(const char *name, const char *id) + _log_report.object_name = name; + _log_report.object_id = id; + } ++ ++/* ++ * TODO: log/journal=["daemon_command"] ++ * daemon_command: record commands that are run by an lvm daemon. ++ * (i.e. not commands run directly by a user.) ++ * For this we need to be able to clearly identify when a command is ++ * being run by dmeventd/lvmpolld/lvmdbusd. ++ * ++ * TODO: log/journal_commmand_names=["lvcreate","lvconvert"] ++ * This would restrict log/journal=["command"] to the listed command names. ++ * Also allow "!command" to exclude a command, e.g. ["!pvs"] ++ * ++ * TODO: log/journal_daemon_command_names=["lvcreate","lvconvert"] ++ * This would restrict log/journal=["dameon_command"] to the listed command names. ++ * ++ * TODO: log/journal_daemon_names=["dmeventd"] ++ * This would restrict log/journal=["daemon_command"] to commands run by ++ * the named daemon. ++ * ++ * TODO: log/command_to_file= would write this info to the file. ++ * ++ * TODO: log/debug_to_file= would write full debugging to the file. ++ * (the same effect as log/file= log/level=7) ++ */ ++ ++void log_command(const char *cmd_line, const char *cmd_name, const char *cmd_id) ++{ ++ if (_log_journal & LOG_JOURNAL_COMMAND) { ++ ++ /* ++ * TODO: DAEMON=dmeventd|lvmpolld|lvmdbusd, ++ * Could we include caller info such as libblkid, udev rule, etc? ++ * Does systemd already record the caller for us? ++ */ ++ ++ /* The command line, pid, and other things are automatically included. */ ++ ++ sd_journal_send("MESSAGE=lvm command %s", cmd_name, ++ "MESSAGE_ID=3ca432788c374e4ba684b834188eca36", ++ "LVM_CMD_NAME=%s", cmd_name, ++ "LVM_CMD_ID=%s", cmd_id, ++ "PRIORITY=%i", LOG_INFO, ++ NULL); ++ } ++} ++ ++uint32_t log_journal_str_to_val(const char *str) ++{ ++ if (!strcasecmp(str, "command")) ++ return LOG_JOURNAL_COMMAND; ++ if (!strcasecmp(str, "output")) ++ return LOG_JOURNAL_OUTPUT; ++ if (!strcasecmp(str, "debug")) ++ return LOG_JOURNAL_DEBUG; ++ return 0; ++} ++ +diff --git a/lib/log/log.h b/lib/log/log.h +index d3848a4..b5f05f2 100644 +--- a/lib/log/log.h ++++ b/lib/log/log.h +@@ -63,6 +63,10 @@ + #define LOG_DEBUG_FIELD_FILELINE 0x0004 + #define LOG_DEBUG_FIELD_MESSAGE 0x0008 + ++#define LOG_JOURNAL_COMMAND 0x0001 ++#define LOG_JOURNAL_OUTPUT 0x0002 ++#define LOG_JOURNAL_DEBUG 0x0004 ++ + + /* + * Classes available for debug log messages. +diff --git a/lib/log/lvm-logging.h b/lib/log/lvm-logging.h +index 39108fc..fb18a41 100644 +--- a/lib/log/lvm-logging.h ++++ b/lib/log/lvm-logging.h +@@ -62,6 +62,12 @@ void reset_log_duplicated(void); + void init_syslog(int facility); + void fin_syslog(void); + ++void init_log_journal(uint32_t fields); ++uint32_t log_journal_str_to_val(const char *str); ++ ++void log_command(const char *cmd_line, const char *cmd_name, const char *cmd_id); ++ ++ + int error_message_produced(void); + void reset_lvm_errno(int store_errmsg); + int stored_errno(void); +diff --git a/tools/args.h b/tools/args.h +index 9aeec40..71db7f5 100644 +--- a/tools/args.h ++++ b/tools/args.h +@@ -323,6 +323,14 @@ arg(ignoreunsupported_ARG, '\0', "ignoreunsupported", 0, 0, 0, + arg(importdevices_ARG, '\0', "importdevices", 0, 0, 0, + "Add devices to the devices file.\n") + ++arg(journal_ARG, '\0', "journal", string_VAL, 0, 0, ++ "Record information in the systemd journal.\n" ++ "This information is in addition to information\n" ++ "enabled by the lvm.conf log/journal setting.\n" ++ "command: record information about the command.\n" ++ "output: record the default command output.\n" ++ "debug: record full command debugging.\n") ++ + arg(labelsector_ARG, '\0', "labelsector", number_VAL, 0, 0, + "By default the PV is labelled with an LVM2 identifier in its second\n" + "sector (sector 1). This lets you use a different sector near the\n" +diff --git a/tools/command-lines.in b/tools/command-lines.in +index aa3e3d9..68374c0 100644 +--- a/tools/command-lines.in ++++ b/tools/command-lines.in +@@ -204,7 +204,7 @@ + # + OO_ALL: --commandprofile String, --config String, --debug, + --driverloaded Bool, --help, --nolocking, --lockopt String, --longhelp, --profile String, --quiet, +---verbose, --version, --yes, --test, --devicesfile String, --devices PV ++--verbose, --version, --yes, --test, --devicesfile String, --devices PV, --journal String + + # + # options for pvs, lvs, vgs, fullreport +diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c +index 6ea5487..222cd5b 100644 +--- a/tools/lvmcmdline.c ++++ b/tools/lvmcmdline.c +@@ -2016,6 +2016,8 @@ out: + log_debug("Recognised command %s (id %d / enum %d).", + commands[best_i].command_id, best_i, commands[best_i].command_enum); + ++ log_command(cmd->cmd_line, commands[best_i].name, commands[best_i].command_id); ++ + return &commands[best_i]; + } + +@@ -2404,6 +2406,15 @@ static void _get_current_output_settings_from_args(struct cmd_context *cmd) + cmd->current_settings.verbose = 0; + cmd->current_settings.silent = (arg_count(cmd, quiet_ARG) > 1) ? 1 : 0; + } ++ ++ /* ++ * default_settings.journal is already set from config and has already been ++ * applied using init_log_journal(). ++ * current_settings have been set to default_settings. ++ * now --journal value adds to current_settings. ++ */ ++ if (arg_is_set(cmd, journal_ARG)) ++ cmd->current_settings.journal |= log_journal_str_to_val(arg_str_value(cmd, journal_ARG, "")); + } + + static void _apply_current_output_settings(struct cmd_context *cmd) +@@ -2413,6 +2424,7 @@ static void _apply_current_output_settings(struct cmd_context *cmd) + init_debug_classes_logged(cmd->default_settings.debug_classes); + init_verbose(cmd->current_settings.verbose + VERBOSE_BASE_LEVEL); + init_silent(cmd->current_settings.silent); ++ init_log_journal(cmd->current_settings.journal); + } + + static int _read_devices_list(struct cmd_context *cmd) +-- +1.8.3.1 + diff --git a/SOURCES/0006-new-udev-autoactivation.patch b/SOURCES/0006-new-udev-autoactivation.patch new file mode 100644 index 0000000..b6e7fcc --- /dev/null +++ b/SOURCES/0006-new-udev-autoactivation.patch @@ -0,0 +1,555 @@ +From 15562a3c2761d206e47258ee11e25dac17427fce Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Fri, 26 Mar 2021 11:39:05 -0500 +Subject: [PATCH 06/11] new udev autoactivation + +new udev rule 69-dm-lvm.rules replaces +69-dm-lvm-meta.rules and lvm2-pvscan.service + +udev rule calls pvscan directly on the added device + +pvscan output indicates if a complete VG can be activated + +udev env var LVM_VG_NAME_COMPLETE is used to pass complete +VG name from pvscan to the udev rule + +udev rule uses systemd-run to run vgchange -aay +--- + scripts/Makefile.in | 1 - + test/shell/udev-pvscan-vgchange.sh | 403 +++++++++++++++++++++++++++++++++++++ + udev/69-dm-lvm.rules.in | 87 ++++++++ + udev/Makefile.in | 2 +- + 5 files changed, 492 insertions(+), 4 deletions(-) + create mode 100644 test/shell/udev-pvscan-vgchange.sh + create mode 100644 udev/69-dm-lvm.rules.in + +diff --git a/scripts/Makefile.in b/scripts/Makefile.in +index 1fe88ca..60449e1 100644 +--- a/scripts/Makefile.in ++++ b/scripts/Makefile.in +@@ -92,7 +92,6 @@ install_systemd_generators: + install_systemd_units: install_dbus_service + @echo " [INSTALL] systemd_units" + $(Q) $(INSTALL_DIR) $(systemd_unit_dir) +- $(Q) $(INSTALL_DATA) lvm2-pvscan.service $(systemd_unit_dir)/lvm2-pvscan@.service + ifeq ("@BUILD_DMEVENTD@", "yes") + $(Q) $(INSTALL_DATA) dm_event_systemd_red_hat.socket $(systemd_unit_dir)/dm-event.socket + $(Q) $(INSTALL_DATA) dm_event_systemd_red_hat.service $(systemd_unit_dir)/dm-event.service +diff --git a/test/shell/udev-pvscan-vgchange.sh b/test/shell/udev-pvscan-vgchange.sh +new file mode 100644 +index 0000000..c81acf0 +--- /dev/null ++++ b/test/shell/udev-pvscan-vgchange.sh +@@ -0,0 +1,403 @@ ++#!/usr/bin/env bash ++ ++# Copyright (C) 2021 Red Hat, Inc. All rights reserved. ++# ++# This copyrighted material is made available to anyone wishing to use, ++# modify, copy, or redistribute it subject to the terms and conditions ++# of the GNU General Public License v.2. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software Foundation, ++# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ ++test_description='udev rule and systemd unit run vgchange' ++ ++SKIP_WITH_LVMPOLLD=1 ++SKIP_WITH_LVMLOCKD=1 ++ ++. lib/inittest ++ ++# ++# $ cat /tmp/devs ++# /dev/sdb ++# /dev/sdc ++# /dev/sdd ++# ++# Specify this file as LVM_TEST_DEVICE_LIST=/tmp/devs ++# when running the test. ++# ++# This test will wipe these devices. ++# ++ ++if [ -z ${LVM_TEST_DEVICE_LIST+x} ]; then echo "LVM_TEST_DEVICE_LIST is unset" && skip; else echo "LVM_TEST_DEVICE_LIST is set to '$LVM_TEST_DEVICE_LIST'"; fi ++ ++test -e "$LVM_TEST_DEVICE_LIST" || skip ++ ++num_devs=$(cat $LVM_TEST_DEVICE_LIST | wc -l) ++ ++RUNDIR="/run" ++test -d "$RUNDIR" || RUNDIR="/var/run" ++PVS_ONLINE_DIR="$RUNDIR/lvm/pvs_online" ++VGS_ONLINE_DIR="$RUNDIR/lvm/vgs_online" ++PVS_LOOKUP_DIR="$RUNDIR/lvm/pvs_lookup" ++ ++_clear_online_files() { ++ # wait till udev is finished ++ aux udev_wait ++ rm -f "$PVS_ONLINE_DIR"/* ++ rm -f "$VGS_ONLINE_DIR"/* ++ rm -f "$PVS_LOOKUP_DIR"/* ++} ++ ++test -d "$PVS_ONLINE_DIR" || mkdir -p "$PVS_ONLINE_DIR" ++test -d "$VGS_ONLINE_DIR" || mkdir -p "$VGS_ONLINE_DIR" ++test -d "$PVS_LOOKUP_DIR" || mkdir -p "$PVS_LOOKUP_DIR" ++_clear_online_files ++ ++aux prepare_real_devs ++ ++aux lvmconf 'devices/dir = "/dev"' ++aux lvmconf 'devices/use_devicesfile = 1' ++DFDIR="$LVM_SYSTEM_DIR/devices" ++DF="$DFDIR/system.devices" ++mkdir $DFDIR || true ++not ls $DF ++ ++get_real_devs ++ ++wipe_all() { ++ for dev in "${REAL_DEVICES[@]}"; do ++ wipefs -a $dev ++ done ++} ++ ++# udevadm trigger runs udev rule which runs systemd-run --no-wait vgchange -aay ++# Because of --no-wait, we need to wait for the transient systemd ++# service to be gone before checking the effects of the vgchange. ++ ++wait_lvm_activate() { ++ local vgw=$1 ++ local wait=0 ++ ++ while systemctl status lvm-activate-$vgw > /dev/null && test "$wait" -le 30; do ++ sleep .2 ++ wait=$(( wait + 1 )) ++ done ++} ++ ++# Test requires 3 devs ++test $num_devs -gt 2 || skip ++BDEV1=$(basename "$dev1") ++BDEV2=$(basename "$dev2") ++BDEV3=$(basename "$dev3") ++ ++wipe_all ++touch $DF ++for dev in "${REAL_DEVICES[@]}"; do ++ pvcreate $dev ++done ++ ++# 1 dev, 1 vg, 1 lv ++ ++vgcreate $vg1 "$dev1" ++lvcreate -l1 -an -n $lv1 $vg1 "$dev1" ++ ++PVID1=$(pvs "$dev1" --noheading -o uuid | tr -d - | awk '{print $1}') ++ ++_clear_online_files ++udevadm trigger --settle -c add /sys/block/$BDEV1 ++ ++wait_lvm_activate $vg1 ++ ++ls "$RUNDIR/lvm/pvs_online/$PVID1" ++ls "$RUNDIR/lvm/vgs_online/$vg1" ++journalctl -u lvm-activate-$vg1 | tee out || true ++grep "now active" out ++check lv_field $vg1/$lv1 lv_active "active" ++ ++vgchange -an $vg1 ++vgremove -y $vg1 ++ ++ ++# 2 devs, 1 vg, 2 lvs ++ ++vgcreate $vg2 "$dev1" "$dev2" ++lvcreate -l1 -an -n $lv1 $vg2 "$dev1" ++lvcreate -l1 -an -n $lv2 $vg2 "$dev2" ++ ++PVID1=$(pvs "$dev1" --noheading -o uuid | tr -d - | awk '{print $1}') ++PVID2=$(pvs "$dev2" --noheading -o uuid | tr -d - | awk '{print $1}') ++ ++_clear_online_files ++ ++udevadm trigger --settle -c add /sys/block/$BDEV1 ++ls "$RUNDIR/lvm/pvs_online/$PVID1" ++not ls "$RUNDIR/lvm/vgs_online/$vg2" ++journalctl -u lvm-activate-$vg2 | tee out || true ++not grep "now active" out ++check lv_field $vg2/$lv1 lv_active "" ++check lv_field $vg2/$lv2 lv_active "" ++ ++udevadm trigger --settle -c add /sys/block/$BDEV2 ++ls "$RUNDIR/lvm/pvs_online/$PVID2" ++ls "$RUNDIR/lvm/vgs_online/$vg2" ++ ++wait_lvm_activate $vg2 ++ ++journalctl -u lvm-activate-$vg2 | tee out || true ++grep "now active" out ++check lv_field $vg2/$lv1 lv_active "active" ++check lv_field $vg2/$lv2 lv_active "active" ++ ++vgchange -an $vg2 ++vgremove -y $vg2 ++ ++ ++# 3 devs, 1 vg, 4 lvs, concurrent pvscans ++# (attempting to have the pvscans run concurrently and race ++# to activate the VG) ++ ++vgcreate $vg3 "$dev1" "$dev2" "$dev3" ++lvcreate -l1 -an -n $lv1 $vg3 "$dev1" ++lvcreate -l1 -an -n $lv2 $vg3 "$dev2" ++lvcreate -l1 -an -n $lv3 $vg3 "$dev3" ++lvcreate -l8 -an -n $lv4 -i 2 $vg3 "$dev1" "$dev2" ++ ++PVID1=$(pvs "$dev1" --noheading -o uuid | tr -d - | awk '{print $1}') ++PVID2=$(pvs "$dev2" --noheading -o uuid | tr -d - | awk '{print $1}') ++PVID3=$(pvs "$dev3" --noheading -o uuid | tr -d - | awk '{print $1}') ++ ++_clear_online_files ++ ++udevadm trigger -c add /sys/block/$BDEV1 & ++udevadm trigger -c add /sys/block/$BDEV2 & ++udevadm trigger -c add /sys/block/$BDEV3 ++ ++aux udev_wait ++wait_lvm_activate $vg3 ++ ++ls "$RUNDIR/lvm/pvs_online/$PVID1" ++ls "$RUNDIR/lvm/pvs_online/$PVID2" ++ls "$RUNDIR/lvm/pvs_online/$PVID3" ++ls "$RUNDIR/lvm/vgs_online/$vg3" ++journalctl -u lvm-activate-$vg3 | tee out || true ++grep "now active" out ++check lv_field $vg3/$lv1 lv_active "active" ++check lv_field $vg3/$lv2 lv_active "active" ++check lv_field $vg3/$lv3 lv_active "active" ++check lv_field $vg3/$lv4 lv_active "active" ++ ++vgchange -an $vg3 ++vgremove -y $vg3 ++ ++ ++# 3 devs, 1 vg, 4 lvs, concurrent pvscans, metadata on only 1 PV ++ ++wipe_all ++rm $DF ++touch $DF ++pvcreate --metadatacopies 0 "$dev1" ++pvcreate --metadatacopies 0 "$dev2" ++pvcreate "$dev3" ++ ++vgcreate $vg4 "$dev1" "$dev2" "$dev3" ++lvcreate -l1 -an -n $lv1 $vg4 "$dev1" ++lvcreate -l1 -an -n $lv2 $vg4 "$dev2" ++lvcreate -l1 -an -n $lv3 $vg4 "$dev3" ++lvcreate -l8 -an -n $lv4 -i 2 $vg4 "$dev1" "$dev2" ++ ++PVID1=$(pvs "$dev1" --noheading -o uuid | tr -d - | awk '{print $1}') ++PVID2=$(pvs "$dev2" --noheading -o uuid | tr -d - | awk '{print $1}') ++PVID3=$(pvs "$dev3" --noheading -o uuid | tr -d - | awk '{print $1}') ++ ++_clear_online_files ++ ++udevadm trigger -c add /sys/block/$BDEV1 & ++udevadm trigger -c add /sys/block/$BDEV2 & ++udevadm trigger -c add /sys/block/$BDEV3 ++ ++aux udev_wait ++wait_lvm_activate $vg4 ++ ++ls "$RUNDIR/lvm/pvs_online/$PVID1" ++ls "$RUNDIR/lvm/pvs_online/$PVID2" ++ls "$RUNDIR/lvm/pvs_online/$PVID3" ++ls "$RUNDIR/lvm/vgs_online/$vg4" ++journalctl -u lvm-activate-$vg4 | tee out || true ++grep "now active" out ++check lv_field $vg4/$lv1 lv_active "active" ++check lv_field $vg4/$lv2 lv_active "active" ++check lv_field $vg4/$lv3 lv_active "active" ++check lv_field $vg4/$lv4 lv_active "active" ++ ++vgchange -an $vg4 ++vgremove -y $vg4 ++ ++ ++# 3 devs, 3 vgs, 2 lvs in each vg, concurrent pvscans ++ ++wipe_all ++rm $DF ++touch $DF ++ ++vgcreate $vg5 "$dev1" ++vgcreate $vg6 "$dev2" ++vgcreate $vg7 "$dev3" ++lvcreate -l1 -an -n $lv1 $vg5 ++lvcreate -l1 -an -n $lv2 $vg5 ++lvcreate -l1 -an -n $lv1 $vg6 ++lvcreate -l1 -an -n $lv2 $vg6 ++lvcreate -l1 -an -n $lv1 $vg7 ++lvcreate -l1 -an -n $lv2 $vg7 ++ ++_clear_online_files ++ ++udevadm trigger -c add /sys/block/$BDEV1 & ++udevadm trigger -c add /sys/block/$BDEV2 & ++udevadm trigger -c add /sys/block/$BDEV3 ++ ++aux udev_wait ++wait_lvm_activate $vg5 ++wait_lvm_activate $vg6 ++wait_lvm_activate $vg7 ++ ++ls "$RUNDIR/lvm/vgs_online/$vg5" ++ls "$RUNDIR/lvm/vgs_online/$vg6" ++ls "$RUNDIR/lvm/vgs_online/$vg7" ++journalctl -u lvm-activate-$vg5 | tee out || true ++grep "now active" out ++journalctl -u lvm-activate-$vg6 | tee out || true ++grep "now active" out ++journalctl -u lvm-activate-$vg7 | tee out || true ++grep "now active" out ++check lv_field $vg5/$lv1 lv_active "active" ++check lv_field $vg5/$lv2 lv_active "active" ++check lv_field $vg6/$lv1 lv_active "active" ++check lv_field $vg6/$lv2 lv_active "active" ++check lv_field $vg7/$lv1 lv_active "active" ++check lv_field $vg7/$lv2 lv_active "active" ++ ++vgchange -an $vg5 ++vgremove -y $vg5 ++vgchange -an $vg6 ++vgremove -y $vg6 ++vgchange -an $vg7 ++vgremove -y $vg7 ++ ++# 3 devs, 1 vg, 1000 LVs ++ ++wipe_all ++rm $DF ++touch $DF ++pvcreate --metadatacopies 0 "$dev1" ++pvcreate "$dev2" ++pvcreate "$dev3" ++vgcreate -s 128K $vg8 "$dev1" "$dev2" "$dev3" ++ ++# Number of LVs to create ++TEST_DEVS=1000 ++# On low-memory boxes let's not stress too much ++test "$(aux total_mem)" -gt 524288 || TEST_DEVS=256 ++ ++vgcfgbackup -f data $vg8 ++ ++# Generate a lot of devices (size of 1 extent) ++awk -v TEST_DEVS=$TEST_DEVS '/^\t\}/ { ++ printf("\t}\n\tlogical_volumes {\n"); ++ cnt=0; ++ for (i = 0; i < TEST_DEVS; i++) { ++ printf("\t\tlvol%06d {\n", i); ++ printf("\t\t\tid = \"%06d-1111-2222-3333-2222-1111-%06d\"\n", i, i); ++ print "\t\t\tstatus = [\"READ\", \"WRITE\", \"VISIBLE\"]"; ++ print "\t\t\tsegment_count = 1"; ++ print "\t\t\tsegment1 {"; ++ print "\t\t\t\tstart_extent = 0"; ++ print "\t\t\t\textent_count = 1"; ++ print "\t\t\t\ttype = \"striped\""; ++ print "\t\t\t\tstripe_count = 1"; ++ print "\t\t\t\tstripes = ["; ++ print "\t\t\t\t\t\"pv0\", " cnt++; ++ printf("\t\t\t\t]\n\t\t\t}\n\t\t}\n"); ++ } ++ } ++ {print} ++' data >data_new ++ ++vgcfgrestore -f data_new $vg8 ++ ++_clear_online_files ++ ++udevadm trigger -c add /sys/block/$BDEV1 & ++udevadm trigger -c add /sys/block/$BDEV2 & ++udevadm trigger -c add /sys/block/$BDEV3 ++ ++aux udev_wait ++wait_lvm_activate $vg8 ++ ++ls "$RUNDIR/lvm/vgs_online/$vg8" ++journalctl -u lvm-activate-$vg8 | tee out || true ++grep "now active" out ++ ++num_active=$(lvs $vg8 --noheading -o active | grep active | wc -l) ++ ++test $num_active -eq $TEST_DEVS ++ ++vgchange -an $vg8 ++vgremove -y $vg8 ++ ++# 1 pv on an md dev, 1 vg ++ ++wait_md_create() { ++ local md=$1 ++ ++ while :; do ++ if ! grep "$(basename $md)" /proc/mdstat; then ++ echo "$md not ready" ++ cat /proc/mdstat ++ sleep 2 ++ else ++ break ++ fi ++ done ++ echo "$md" > WAIT_MD_DEV ++} ++ ++test -f /proc/mdstat && grep -q raid1 /proc/mdstat || \ ++ modprobe raid1 || skip ++ ++mddev="/dev/md33" ++not grep $mddev /proc/mdstat || skip ++ ++wipe_all ++rm $DF ++touch $DF ++ ++mdadm --create --metadata=1.0 "$mddev" --level 1 --chunk=64 --raid-devices=2 "$dev1" "$dev2" ++wait_md_create "$mddev" ++vgcreate $vg9 "$mddev" ++ ++PVIDMD=`pvs $mddev --noheading -o uuid | tr -d - | awk '{print $1}'` ++BDEVMD=$(basename "$mddev") ++ ++lvcreate -l1 -an -n $lv1 $vg9 ++lvcreate -l1 -an -n $lv2 $vg9 ++ ++_clear_online_files ++ ++udevadm trigger --settle -c add /sys/block/$BDEVMD ++ ++wait_lvm_activate $vg9 ++ ++ls "$RUNDIR/lvm/vgs_online/$vg9" ++journalctl -u lvm-activate-$vg9 | tee out || true ++grep "now active" out ++check lv_field $vg9/$lv1 lv_active "active" ++check lv_field $vg9/$lv2 lv_active "active" ++ ++vgchange -an $vg9 ++vgremove -y $vg9 ++ ++mdadm --stop "$mddev" ++aux udev_wait ++wipe_all ++ +diff --git a/udev/69-dm-lvm.rules.in b/udev/69-dm-lvm.rules.in +new file mode 100644 +index 0000000..03c8fbb +--- /dev/null ++++ b/udev/69-dm-lvm.rules.in +@@ -0,0 +1,87 @@ ++# Copyright (C) 2012,2021 Red Hat, Inc. All rights reserved. ++# ++# This file is part of LVM. ++# ++# This rule requires blkid to be called on block devices before so only devices ++# used as LVM PVs are processed (ID_FS_TYPE="LVM2_member"). ++ ++SUBSYSTEM!="block", GOTO="lvm_end" ++(LVM_EXEC_RULE) ++ ++ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="lvm_end" ++ ++# Only process devices already marked as a PV - this requires blkid to be called before. ++ENV{ID_FS_TYPE}!="LVM2_member", GOTO="lvm_end" ++ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="lvm_end" ++ACTION=="remove", GOTO="lvm_end" ++ ++# Create /dev/disk/by-id/lvm-pv-uuid- symlink for each PV ++ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-id/lvm-pv-uuid-$env{ID_FS_UUID_ENC}" ++ ++# If the PV is a special device listed below, scan only if the device is ++# properly activated. These devices are not usable after an ADD event, ++# but they require an extra setup and they are ready after a CHANGE event. ++# Also support coldplugging with ADD event but only if the device is already ++# properly activated. ++# This logic should be eventually moved to rules where those particular ++# devices are processed primarily (MD and loop). ++ ++# DM device: ++KERNEL!="dm-[0-9]*", GOTO="next" ++ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}=="1", ENV{DM_ACTIVATION}=="1", GOTO="lvm_scan" ++GOTO="lvm_end" ++ ++# MD device: ++LABEL="next" ++KERNEL!="md[0-9]*", GOTO="next" ++IMPORT{db}="LVM_MD_PV_ACTIVATED" ++ACTION=="add", ENV{LVM_MD_PV_ACTIVATED}=="1", GOTO="lvm_scan" ++ACTION=="change", ENV{LVM_MD_PV_ACTIVATED}!="1", TEST=="md/array_state", ENV{LVM_MD_PV_ACTIVATED}="1", GOTO="lvm_scan" ++ACTION=="add", KERNEL=="md[0-9]*p[0-9]*", GOTO="lvm_scan" ++ENV{LVM_MD_PV_ACTIVATED}!="1", ENV{SYSTEMD_READY}="0" ++GOTO="lvm_end" ++ ++# Loop device: ++LABEL="next" ++KERNEL!="loop[0-9]*", GOTO="next" ++ACTION=="add", ENV{LVM_LOOP_PV_ACTIVATED}=="1", GOTO="lvm_scan" ++ACTION=="change", ENV{LVM_LOOP_PV_ACTIVATED}!="1", TEST=="loop/backing_file", ENV{LVM_LOOP_PV_ACTIVATED}="1", GOTO="lvm_scan" ++ENV{LVM_LOOP_PV_ACTIVATED}!="1", ENV{SYSTEMD_READY}="0" ++GOTO="lvm_end" ++ ++LABEL="next" ++ACTION!="add", GOTO="lvm_end" ++ ++LABEL="lvm_scan" ++ ++ENV{SYSTEMD_READY}="1" ++ ++# pvscan will check if this device completes a VG, ++# i.e. all PVs in the VG are now present with the ++# arrival of this PV. If so, it prints to stdout: ++# LVM_VG_NAME_COMPLETE='foo' ++# ++# When the VG is complete it can be activated, so ++# vgchange -aay is run. It is run via ++# systemd since it can take longer to run than ++# udev wants to block when processing rules. ++# (if there are hundreds of LVs to activate, ++# the vgchange can take many seconds.) ++# ++# pvscan only reads the single device specified, ++# and uses temp files under /run/lvm to check if ++# other PVs in the VG are present. ++# ++# If event_activation=0 in lvm.conf, this pvscan ++# (using checkcomplete) will do nothing, so that ++# no event-based autoactivation will be happen. ++# ++# TODO: adjust the output of vgchange -aay so that ++# it's better suited to appearing in the journal. ++ ++IMPORT{program}="(LVM_EXEC)/lvm pvscan --cache --listvg --checkcomplete --vgonline --udevoutput --journal=output $env{DEVNAME}" ++ENV{LVM_VG_NAME_COMPLETE}=="?*", RUN+="/usr/bin/systemd-run --no-block --property DefaultDependencies=no --unit lvm-activate-$env{LVM_VG_NAME_COMPLETE} lvm vgchange -aay $env{LVM_VG_NAME_COMPLETE}" ++GOTO="lvm_end" ++ ++LABEL="lvm_end" ++ +diff --git a/udev/Makefile.in b/udev/Makefile.in +index e32cba9..e777dda 100644 +--- a/udev/Makefile.in ++++ b/udev/Makefile.in +@@ -18,7 +18,7 @@ top_builddir = @top_builddir@ + include $(top_builddir)/make.tmpl + + DM_RULES=10-dm.rules 13-dm-disk.rules 95-dm-notify.rules +-LVM_RULES=11-dm-lvm.rules 69-dm-lvm-metad.rules ++LVM_RULES=11-dm-lvm.rules 69-dm-lvm.rules + + DM_DIR=$(shell $(GREP) "\#define DM_DIR" $(top_srcdir)/libdm/misc/dm-ioctl.h | $(AWK) '{print $$3}') + +-- +1.8.3.1 + diff --git a/SOURCES/0007-configure-update.patch b/SOURCES/0007-configure-update.patch new file mode 100644 index 0000000..d7863ce --- /dev/null +++ b/SOURCES/0007-configure-update.patch @@ -0,0 +1,184 @@ +From 9dc9a14d41d5c91892bc03024cc80c742827baa3 Mon Sep 17 00:00:00 2001 +From: Marian Csontos +Date: Mon, 26 Apr 2021 14:27:05 +0200 +Subject: [PATCH 07/11] configure: update + +--- + configure | 112 +++++++++++++++++++++++++++++++++++++++++++++++++ + include/configure.h.in | 3 ++ + 2 files changed, 115 insertions(+) + +diff --git a/configure b/configure +index c2d2cff..0147902 100755 +--- a/configure ++++ b/configure +@@ -774,6 +774,10 @@ UDEV_LIBS + UDEV_CFLAGS + SYSTEMD_LIBS + SYSTEMD_CFLAGS ++BLKID_LIBS ++BLKID_CFLAGS ++APP_MACHINEID_LIBS ++APP_MACHINEID_CFLAGS + NOTIFY_DBUS_LIBS + NOTIFY_DBUS_CFLAGS + BLKID_LIBS +@@ -957,6 +961,7 @@ enable_use_lvmpolld + with_lvmpolld_pidfile + enable_dmfilemapd + enable_notify_dbus ++enable_app_machineid + enable_blkid_wiping + enable_udev_systemd_background_jobs + enable_udev_sync +@@ -1027,6 +1032,10 @@ LOCKD_DLM_CONTROL_CFLAGS + LOCKD_DLM_CONTROL_LIBS + LOCKD_IDM_CFLAGS + LOCKD_IDM_LIBS ++NOTIFY_DBUS_CFLAGS ++NOTIFY_DBUS_LIBS ++APP_MACHINEID_CFLAGS ++APP_MACHINEID_LIBS + BLKID_CFLAGS + BLKID_LIBS + NOTIFY_DBUS_CFLAGS +@@ -1691,6 +1700,7 @@ Optional Features: + --disable-use-lvmpolld disable usage of LVM Poll Daemon + --enable-dmfilemapd enable the dmstats filemap daemon + --enable-notify-dbus enable LVM notification using dbus ++ --enable-app-machineid enable LVM system ID using app-specific machine-id + --disable-blkid_wiping disable libblkid detection of signatures when wiping + and use native code instead + --disable-udev-systemd-background-jobs +@@ -1853,6 +1863,13 @@ Some influential environment variables: + C compiler flags for NOTIFY_DBUS, overriding pkg-config + NOTIFY_DBUS_LIBS + linker flags for NOTIFY_DBUS, overriding pkg-config ++ APP_MACHINEID_CFLAGS ++ C compiler flags for APP_MACHINEID, overriding pkg-config ++ APP_MACHINEID_LIBS ++ linker flags for APP_MACHINEID, overriding pkg-config ++ BLKID_CFLAGS ++ C compiler flags for BLKID, overriding pkg-config ++ BLKID_LIBS linker flags for BLKID, overriding pkg-config + SYSTEMD_CFLAGS + C compiler flags for SYSTEMD, overriding pkg-config + SYSTEMD_LIBS +@@ -11589,6 +11606,101 @@ fi + fi + + ################################################################################ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build appmachineid" >&5 ++$as_echo_n "checking whether to build appmachineid... " >&6; } ++# Check whether --enable-app-machineid was given. ++if test "${enable_app_machineid+set}" = set; then : ++ enableval=$enable_app_machineid; APP_MACHINEID_SUPPORT=$enableval ++else ++ APP_MACHINEID_SUPPORT=no ++fi ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $APP_MACHINEID_SUPPORT" >&5 ++$as_echo "$APP_MACHINEID_SUPPORT" >&6; } ++ ++if test "$APP_MACHINEID_SUPPORT" = yes; then ++ ++$as_echo "#define APP_MACHINEID_SUPPORT 1" >>confdefs.h ++ ++ SYSTEMD_LIBS="-lsystemd" ++fi ++ ++################################################################################ ++if test "$APP_MACHINEID_SUPPORT" = yes; then ++ ++pkg_failed=no ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for APP_MACHINEID" >&5 ++$as_echo_n "checking for APP_MACHINEID... " >&6; } ++ ++if test -n "$APP_MACHINEID_CFLAGS"; then ++ pkg_cv_APP_MACHINEID_CFLAGS="$APP_MACHINEID_CFLAGS" ++ elif test -n "$PKG_CONFIG"; then ++ if test -n "$PKG_CONFIG" && \ ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"systemd >= 234\""; } >&5 ++ ($PKG_CONFIG --exists --print-errors "systemd >= 234") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ pkg_cv_APP_MACHINEID_CFLAGS=`$PKG_CONFIG --cflags "systemd >= 234" 2>/dev/null` ++ test "x$?" != "x0" && pkg_failed=yes ++else ++ pkg_failed=yes ++fi ++ else ++ pkg_failed=untried ++fi ++if test -n "$APP_MACHINEID_LIBS"; then ++ pkg_cv_APP_MACHINEID_LIBS="$APP_MACHINEID_LIBS" ++ elif test -n "$PKG_CONFIG"; then ++ if test -n "$PKG_CONFIG" && \ ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"systemd >= 234\""; } >&5 ++ ($PKG_CONFIG --exists --print-errors "systemd >= 234") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ pkg_cv_APP_MACHINEID_LIBS=`$PKG_CONFIG --libs "systemd >= 234" 2>/dev/null` ++ test "x$?" != "x0" && pkg_failed=yes ++else ++ pkg_failed=yes ++fi ++ else ++ pkg_failed=untried ++fi ++ ++ ++ ++if test $pkg_failed = yes; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++ ++if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then ++ _pkg_short_errors_supported=yes ++else ++ _pkg_short_errors_supported=no ++fi ++ if test $_pkg_short_errors_supported = yes; then ++ APP_MACHINEID_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "systemd >= 234" 2>&1` ++ else ++ APP_MACHINEID_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "systemd >= 234" 2>&1` ++ fi ++ # Put the nasty error message in config.log where it belongs ++ echo "$APP_MACHINEID_PKG_ERRORS" >&5 ++ ++ $bailout ++elif test $pkg_failed = untried; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++ $bailout ++else ++ APP_MACHINEID_CFLAGS=$pkg_cv_APP_MACHINEID_CFLAGS ++ APP_MACHINEID_LIBS=$pkg_cv_APP_MACHINEID_LIBS ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++ HAVE_APP_MACHINEID=yes ++fi ++fi ++ ++################################################################################ + + # Check whether --enable-blkid_wiping was given. + if test "${enable_blkid_wiping+set}" = set; then : +diff --git a/include/configure.h.in b/include/configure.h.in +index 55d18bd..f3060bc 100644 +--- a/include/configure.h.in ++++ b/include/configure.h.in +@@ -1,5 +1,8 @@ + /* include/configure.h.in. Generated from configure.ac by autoheader. */ + ++/* Define to 1 to include code that uses libsystemd machine-id apis. */ ++#undef APP_MACHINEID_SUPPORT ++ + /* Define to 1 to use libblkid detection of signatures when wiping. */ + #undef BLKID_WIPING_SUPPORT + +-- +1.8.3.1 + diff --git a/SOURCES/0008-add-dracut-files.patch b/SOURCES/0008-add-dracut-files.patch new file mode 100644 index 0000000..c096ed2 --- /dev/null +++ b/SOURCES/0008-add-dracut-files.patch @@ -0,0 +1,290 @@ +From 7dff68f6d02afb1174b13c36865d4000cf63aff7 Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Thu, 1 Apr 2021 12:08:58 -0500 +Subject: [PATCH 08/11] add dracut files + +pvscan-udev-initrd.sh is shell wrapper around the +pvscan command for use in the initrd lvm udev rule. +It finds the intersection of complete VG/LVs reported +by pvscan, and the VG/LVs specified on boot cmdline. +The resulting VG or LVs are printed as env-vars that +the udev rule can IMPORT, and pass to vgchange/lvchange. + +64-lvm.rules calls pvscan-udev-initrd.sh/pvscan to scan +the PV to check if any VG or LVs are complete given the +new device. The pvscan will only ever read the single +device triggering the uevent. If any VG or LVs are +complete, the udev rule uses systemd-run to run a +vgchange or lvchange command to activate the complete +VG or LVs. (Running vgchange or lvchange directly may +take longer than udev likes, so systemd-run --no-block +is used.) +--- + dracut/64-lvm.rules | 44 +++++++++++++++++ + dracut/module-setup.sh | 112 +++++++++++++++++++++++++++++++++++++++++++ + dracut/parse-lvm.sh | 18 +++++++ + dracut/pvscan-udev-initrd.sh | 57 ++++++++++++++++++++++ + 4 files changed, 231 insertions(+) + create mode 100644 dracut/64-lvm.rules + create mode 100755 dracut/module-setup.sh + create mode 100755 dracut/parse-lvm.sh + create mode 100755 dracut/pvscan-udev-initrd.sh + +diff --git a/dracut/64-lvm.rules b/dracut/64-lvm.rules +new file mode 100644 +index 0000000..174af1d +--- /dev/null ++++ b/dracut/64-lvm.rules +@@ -0,0 +1,44 @@ ++# Copyright 2008,2021 Red Hat, Inc. ++# ++# Jeremy Katz ++ ++SUBSYSTEM!="block", GOTO="lvm_end" ++ACTION!="add|change", GOTO="lvm_end" ++# Also don't process disks that are slated to be a multipath device ++ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="lvm_end" ++KERNEL=="dm-[0-9]*", ACTION=="add", GOTO="lvm_end" ++ENV{ID_FS_TYPE}!="LVM2_member", GOTO="lvm_end" ++ ++PROGRAM=="/bin/sh -c 'for i in $sys/$devpath/holders/dm-[0-9]*; do [ -e $$i ] && exit 0; done; exit 1;' ", \ ++ GOTO="lvm_end" ++ ++# pvscan-udev-initrd.sh is a wrapper that calls pvscan and prints ++# LVM_VG_NAME_COMPLETE='...' ++# LVM_LV_NAMES_COMPLETE='...' ++# if the given device completes a VG or LVs listed in ++# rd.lvm.vg or rd.lvm.lv ++# ++# If a VG or LVs are completed by the device, but are not ++# listed in rd.lvm.vg/lv, then they are not printed ++# (we don't want to activate VGs/LVs that are not specified.) ++# ++# If no VG or LVs are completed by the device, then ++# nothing is printed. ++# ++# LVs may be complete and activated before the VG is complete, ++# i.e. the entire VG is not necessary to activate LVs in it. ++# ++# If multiple LV names are completed from one device, ++# e.g. LVM_LV_NAMES_COMPLETE='vg/lv1 vg/lv2 vg/lv3' ++# they will be activated by one lvchange command. ++ ++IMPORT{program}="pvscan-udev-initrd.sh $env{DEVNAME}" ++ ++# systemd services are used to run vgchange/lvchange ++# because the lvm activation commands can run for longer ++# than udev will tolerate. ++ ++ENV{LVM_VG_NAME_COMPLETE}=="?*", RUN+="/usr/bin/systemd-run --no-block --property DefaultDependencies=no /sbin/lvm vgchange -ay --yes --ignoremonitoring --poll n --sysinit $env{LVM_VG_NAME_COMPLETE}" ++ENV{LVM_LV_NAMES_COMPLETE}=="?*", RUN+="/usr/bin/systemd-run --no-block --property DefaultDependencies=no /sbin/lvm lvchange -ay --yes -K --ignoremonitoring --poll n --sysinit $env{LVM_LV_NAMES_COMPLETE}" ++ ++LABEL="lvm_end" +diff --git a/dracut/module-setup.sh b/dracut/module-setup.sh +new file mode 100755 +index 0000000..51d9cd3 +--- /dev/null ++++ b/dracut/module-setup.sh +@@ -0,0 +1,112 @@ ++#!/bin/bash ++ ++# called by dracut ++check() { ++ # No point trying to support lvm if the binaries are missing ++ require_binaries lvm || return 1 ++ ++ [[ $hostonly ]] || [[ $mount_needs ]] && { ++ for fs in "${host_fs_types[@]}"; do ++ [[ $fs = LVM*_member ]] && return 0 ++ done ++ return 255 ++ } ++ ++ return 0 ++} ++ ++# called by dracut ++depends() { ++ # We depend on dm_mod being loaded ++ echo rootfs-block dm ++ return 0 ++} ++ ++# called by dracut ++cmdline() { ++ local _activated ++ declare -A _activated ++ ++ for dev in "${!host_fs_types[@]}"; do ++ [ -e /sys/block/${dev#/dev/}/dm/name ] || continue ++ [ -e /sys/block/${dev#/dev/}/dm/uuid ] || continue ++ uuid=$(/dev/null) ++ [[ ${DM_VG_NAME} ]] && [[ ${DM_LV_NAME} ]] || return 1 ++ if ! [[ ${_activated[${DM_VG_NAME}/${DM_LV_NAME}]} ]]; then ++ printf " rd.lvm.lv=%s " "${DM_VG_NAME}/${DM_LV_NAME} " ++ _activated["${DM_VG_NAME}/${DM_LV_NAME}"]=1 ++ fi ++ done ++} ++ ++installkernel() { ++ hostonly='' instmods dm-snapshot ++} ++ ++# called by dracut ++install() { ++ local _i ++ ++ inst lvm ++ ++ if [[ $hostonly_cmdline == "yes" ]]; then ++ local _lvmconf=$(cmdline) ++ [[ $_lvmconf ]] && printf "%s\n" "$_lvmconf" >> "${initdir}/etc/cmdline.d/90lvm.conf" ++ fi ++ ++ inst_rules "$moddir/64-lvm.rules" ++ ++ if [[ $hostonly ]] || [[ $lvmconf = "yes" ]]; then ++ if [ -f $dracutsysrootdir/etc/lvm/lvm.conf ]; then ++ inst_simple -H /etc/lvm/lvm.conf ++ fi ++ ++ export LVM_SUPPRESS_FD_WARNINGS=1 ++ # Also install any files needed for LVM system id support. ++ if [ -f $dracutsysrootdir/etc/lvm/lvmlocal.conf ]; then ++ inst_simple -H /etc/lvm/lvmlocal.conf ++ fi ++ eval $(lvm dumpconfig global/system_id_source &>/dev/null) ++ if [ "$system_id_source" == "file" ]; then ++ eval $(lvm dumpconfig global/system_id_file) ++ if [ -f "$system_id_file" ]; then ++ inst_simple -H $system_id_file ++ fi ++ fi ++ unset LVM_SUPPRESS_FD_WARNINGS ++ fi ++ ++ inst_rules 11-dm-lvm.rules ++ ++ inst_script "$moddir/pvscan-udev-initrd.sh" /usr/lib/udev/pvscan-udev-initrd.sh ++ inst_hook cmdline 30 "$moddir/parse-lvm.sh" ++ ++ inst_libdir_file "libdevmapper-event-lvm*.so" ++ ++ if [[ $hostonly ]] && type -P lvs &>/dev/null; then ++ for dev in "${!host_fs_types[@]}"; do ++ [ -e /sys/block/${dev#/dev/}/dm/name ] || continue ++ dev=$(/dev/null) ++ [[ ${DM_VG_NAME} ]] && [[ ${DM_LV_NAME} ]] || continue ++ case "$(lvs --noheadings -o segtype ${DM_VG_NAME} 2>/dev/null)" in ++ *thin*|*cache*|*era*) ++ inst_multiple -o thin_dump thin_restore thin_check thin_repair \ ++ cache_dump cache_restore cache_check cache_repair \ ++ era_check era_dump era_invalidate era_restore ++ break;; ++ esac ++ done ++ fi ++ ++ if ! [[ $hostonly ]]; then ++ inst_multiple -o thin_dump thin_restore thin_check thin_repair \ ++ cache_dump cache_restore cache_check cache_repair \ ++ era_check era_dump era_invalidate era_restore ++ fi ++ ++ dracut_need_initqueue ++} +diff --git a/dracut/parse-lvm.sh b/dracut/parse-lvm.sh +new file mode 100755 +index 0000000..8236050 +--- /dev/null ++++ b/dracut/parse-lvm.sh +@@ -0,0 +1,18 @@ ++#!/bin/sh ++ ++if [ -e /etc/lvm/lvm.conf ] && ! getargbool 1 rd.lvm.conf -d -n rd_NO_LVMCONF; then ++ rm -f -- /etc/lvm/lvm.conf ++fi ++ ++LV_DEVS="$(getargs rd.lvm.vg -d rd_LVM_VG=) $(getargs rd.lvm.lv -d rd_LVM_LV=)" ++ ++if ! getargbool 1 rd.lvm -d -n rd_NO_LVM \ ++ || ( [ -z "$LV_DEVS" ] && ! getargbool 0 rd.auto ); then ++ info "rd.lvm=0: removing LVM activation" ++ rm -f -- /etc/udev/rules.d/64-lvm*.rules ++else ++ for dev in $LV_DEVS; do ++ wait_for_dev -n "/dev/$dev" ++ done ++fi ++ +diff --git a/dracut/pvscan-udev-initrd.sh b/dracut/pvscan-udev-initrd.sh +new file mode 100755 +index 0000000..1743771 +--- /dev/null ++++ b/dracut/pvscan-udev-initrd.sh +@@ -0,0 +1,57 @@ ++#!/bin/sh ++ ++# pvscan wrapper called by initrd lvm udev rule to find the ++# intersection of complete VGs/LVs found by pvscan and the ++# requested VGs/LVs from the cmdline. ++# ++# Used in 64-lvm.rules as: ++# IMPORT{program}="pvscan-udev-initrd.sh $env{DEVNAME}" ++# ++# See /usr/lib/dracut/modules.d/90lvm/64-lvm.rules ++ ++dev=$1 ++ ++type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh ++ ++ ++VGS=$(getargs rd.lvm.vg -d rd_LVM_VG=) ++LVS=$(getargs rd.lvm.lv -d rd_LVM_LV=) ++ ++IFS=' ' ++ ++# pvscan will produce a single VG line, and one or more LV lines. ++# VG complete ++# VG incomplete ++# LV complete ++# LV incomplete ++# ++# LV names are printed as vgname/lvname. ++# We only care about the complete items. ++# Each pvscan will produce a single VG line, ++# and may produce zero, one or more LV lines. ++ ++PVSCAN=$(/sbin/lvm pvscan --cache --listlvs --checkcomplete --journal output --config 'global/event_activation=1' $dev) ++ ++read -r -a VGSARRAY <<< "$VGS" ++ ++for VG in "${VGSARRAY[@]}" ++do ++ if strstr "$PVSCAN" "VG $VG complete" ; then ++ echo LVM_VG_NAME_COMPLETE=\'"$VG"\' ++ fi ++done ++ ++# Combine all matching LVs into a single print containing them all, ++# e.g. LVM_LV_NAMES_COMPLETE='vg/lv1 vg/lv2' ++ ++read -r -a LVSARRAY <<< "$LVS" ++ ++echo -n LVM_LV_NAMES_COMPLETE=\' ++for LV in "${LVSARRAY[@]}" ++do ++ if strstr "$PVSCAN" "LV $LV complete" ; then ++ echo -n "$LV " ++ fi ++done ++echo \' ++ +-- +1.8.3.1 + diff --git a/SOURCES/0009-lvmdbusd-Use-ID_FS_TYPE-UDev-property-in-udevwatch.patch b/SOURCES/0009-lvmdbusd-Use-ID_FS_TYPE-UDev-property-in-udevwatch.patch new file mode 100644 index 0000000..50437b7 --- /dev/null +++ b/SOURCES/0009-lvmdbusd-Use-ID_FS_TYPE-UDev-property-in-udevwatch.patch @@ -0,0 +1,31 @@ +From de86234888bea4b994fd49776915c28a4d7f02b5 Mon Sep 17 00:00:00 2001 +From: Vojtech Trefny +Date: Wed, 2 Jun 2021 17:17:40 +0200 +Subject: [PATCH 09/11] lvmdbusd: Use ID_FS_TYPE UDev property in udevwatch + +'.ID_FS_TYPE_NEW' is a custom property added by an LVM UDev rule +which is now being removed and 'ID_FS_TYPE' has the same value. + +Signed-off-by: Vojtech Trefny +--- + daemons/lvmdbusd/udevwatch.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/daemons/lvmdbusd/udevwatch.py b/daemons/lvmdbusd/udevwatch.py +index b53b180..f9b3e4a 100644 +--- a/daemons/lvmdbusd/udevwatch.py ++++ b/daemons/lvmdbusd/udevwatch.py +@@ -52,8 +52,8 @@ def filter_event(action, device): + # when appropriate. + refresh = False + +- if '.ID_FS_TYPE_NEW' in device: +- fs_type_new = device['.ID_FS_TYPE_NEW'] ++ if 'ID_FS_TYPE' in device: ++ fs_type_new = device['ID_FS_TYPE'] + + if 'LVM' in fs_type_new: + refresh = True +-- +1.8.3.1 + diff --git a/SOURCES/0010-udev-vgchange-skip-hints-and-keep-transient-service-.patch b/SOURCES/0010-udev-vgchange-skip-hints-and-keep-transient-service-.patch new file mode 100644 index 0000000..7c46421 --- /dev/null +++ b/SOURCES/0010-udev-vgchange-skip-hints-and-keep-transient-service-.patch @@ -0,0 +1,31 @@ +From d45b26023747c1da95e18753a45b31e47090aa40 Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Thu, 22 Jul 2021 13:27:35 -0500 +Subject: [PATCH 10/11] udev vgchange: skip hints and keep transient service + record + +Using hints with vgchange in the udev rule is not helpful because +repeated pvscans during startup are constantly invalidating hints. + +Use -r with systemd-run so that the transient service used to +run vgchange remains visible and can be inspected. +--- + udev/69-dm-lvm.rules.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/udev/69-dm-lvm.rules.in b/udev/69-dm-lvm.rules.in +index 03c8fbb..70f2b37 100644 +--- a/udev/69-dm-lvm.rules.in ++++ b/udev/69-dm-lvm.rules.in +@@ -80,7 +80,7 @@ ENV{SYSTEMD_READY}="1" + # it's better suited to appearing in the journal. + + IMPORT{program}="(LVM_EXEC)/lvm pvscan --cache --listvg --checkcomplete --vgonline --udevoutput --journal=output $env{DEVNAME}" +-ENV{LVM_VG_NAME_COMPLETE}=="?*", RUN+="/usr/bin/systemd-run --no-block --property DefaultDependencies=no --unit lvm-activate-$env{LVM_VG_NAME_COMPLETE} lvm vgchange -aay $env{LVM_VG_NAME_COMPLETE}" ++ENV{LVM_VG_NAME_COMPLETE}=="?*", RUN+="/usr/bin/systemd-run -r --no-block --property DefaultDependencies=no --unit lvm-activate-$env{LVM_VG_NAME_COMPLETE} lvm vgchange -aay --config devices/hints=none $env{LVM_VG_NAME_COMPLETE}" + GOTO="lvm_end" + + LABEL="lvm_end" +-- +1.8.3.1 + diff --git a/SOURCES/0011-make-generate.patch b/SOURCES/0011-make-generate.patch new file mode 100644 index 0000000..084ec5b --- /dev/null +++ b/SOURCES/0011-make-generate.patch @@ -0,0 +1,2505 @@ +From 6a223b0d855d8024248823e9c45f4675250f36fb Mon Sep 17 00:00:00 2001 +From: Marian Csontos +Date: Fri, 6 Aug 2021 13:23:11 +0200 +Subject: [PATCH 11/11] make: generate + +--- + conf/example.conf.in | 258 +++++++++++++++++++++++++++++-------------- + man/lvchange.8_pregen | 14 +++ + man/lvconvert.8_pregen | 14 +++ + man/lvcreate.8_pregen | 14 +++ + man/lvdisplay.8_pregen | 12 ++ + man/lvextend.8_pregen | 14 +++ + man/lvm-fullreport.8_pregen | 12 ++ + man/lvm-lvpoll.8_pregen | 12 ++ + man/lvmconfig.8_pregen | 12 ++ + man/lvmdevices.8_pregen | 14 +++ + man/lvmdiskscan.8_pregen | 12 ++ + man/lvreduce.8_pregen | 12 ++ + man/lvremove.8_pregen | 12 ++ + man/lvrename.8_pregen | 12 ++ + man/lvresize.8_pregen | 14 +++ + man/lvs.8_pregen | 12 ++ + man/lvscan.8_pregen | 12 ++ + man/pvchange.8_pregen | 12 ++ + man/pvck.8_pregen | 14 +++ + man/pvcreate.8_pregen | 12 ++ + man/pvdisplay.8_pregen | 12 ++ + man/pvmove.8_pregen | 12 ++ + man/pvremove.8_pregen | 12 ++ + man/pvresize.8_pregen | 12 ++ + man/pvs.8_pregen | 12 ++ + man/pvscan.8_pregen | 214 ++++++++++++++++++++++++++++++++++- + man/vgcfgbackup.8_pregen | 12 ++ + man/vgcfgrestore.8_pregen | 14 +++ + man/vgchange.8_pregen | 14 +++ + man/vgck.8_pregen | 12 ++ + man/vgconvert.8_pregen | 12 ++ + man/vgcreate.8_pregen | 12 ++ + man/vgdisplay.8_pregen | 12 ++ + man/vgexport.8_pregen | 12 ++ + man/vgextend.8_pregen | 12 ++ + man/vgimport.8_pregen | 12 ++ + man/vgimportclone.8_pregen | 12 ++ + man/vgimportdevices.8_pregen | 12 ++ + man/vgmerge.8_pregen | 12 ++ + man/vgmknodes.8_pregen | 12 ++ + man/vgreduce.8_pregen | 14 +++ + man/vgremove.8_pregen | 12 ++ + man/vgrename.8_pregen | 12 ++ + man/vgs.8_pregen | 12 ++ + man/vgscan.8_pregen | 12 ++ + man/vgsplit.8_pregen | 12 ++ + 46 files changed, 932 insertions(+), 88 deletions(-) + +diff --git a/conf/example.conf.in b/conf/example.conf.in +index 2dc6dd9..0a76c72 100644 +--- a/conf/example.conf.in ++++ b/conf/example.conf.in +@@ -33,15 +33,18 @@ config { + # any configuration mismatch is ignored and the default value is used + # without any warning (a message about the configuration key not being + # found is issued in verbose mode only). +- checks = 1 ++ # This configuration option has an automatic default value. ++ # checks = 1 + + # Configuration option config/abort_on_errors. + # Abort the LVM process if a configuration mismatch is found. +- abort_on_errors = 0 ++ # This configuration option has an automatic default value. ++ # abort_on_errors = 0 + + # Configuration option config/profile_dir. + # Directory where LVM looks for configuration profiles. +- profile_dir = "@DEFAULT_SYS_DIR@/@DEFAULT_PROFILE_SUBDIR@" ++ # This configuration option has an automatic default value. ++ # profile_dir = "@DEFAULT_SYS_DIR@/@DEFAULT_PROFILE_SUBDIR@" + } + + # Configuration section devices. +@@ -52,12 +55,14 @@ devices { + # Directory in which to create volume group device nodes. + # Commands also accept this as a prefix on volume group names. + # This configuration option is advanced. +- dir = "/dev" ++ # This configuration option has an automatic default value. ++ # dir = "/dev" + + # Configuration option devices/scan. + # Directories containing device nodes to use with LVM. + # This configuration option is advanced. +- scan = [ "/dev" ] ++ # This configuration option has an automatic default value. ++ # scan = [ "/dev" ] + + # Configuration option devices/obtain_device_list_from_udev. + # Obtain the list of available devices from udev. +@@ -67,14 +72,16 @@ devices { + # setting applies only to the udev-managed device directory; other + # directories will be scanned fully. LVM needs to be compiled with + # udev support for this setting to apply. +- obtain_device_list_from_udev = 0 ++ # This configuration option has an automatic default value. ++ # obtain_device_list_from_udev = 0 + + # Configuration option devices/external_device_info_source. + # Enable device information from udev. + # If set to "udev", lvm will supplement its own native device information + # with information from libudev. This can potentially improve the detection + # of MD component devices and multipath component devices. +- external_device_info_source = "none" ++ # This configuration option has an automatic default value. ++ # external_device_info_source = "none" + + # Configuration option devices/hints. + # Use a local file to remember which devices have PVs on them. +@@ -119,7 +126,7 @@ devices { + # be used, regardless of this setting, when the --devicesfile + # option is set to a specific file name. + # This configuration option has an automatic default value. +- # use_devicesfile = 0 ++ # use_devicesfile = 1 + + # Configuration option devices/devicesfile. + # The name of the system devices file, listing devices that LVM should use. +@@ -200,7 +207,8 @@ devices { + # Restrict device scanning to block devices appearing in sysfs. + # This is a quick way of filtering out block devices that are not + # present on the system. sysfs must be part of the kernel and mounted.) +- sysfs_scan = 1 ++ # This configuration option has an automatic default value. ++ # sysfs_scan = 1 + + # Configuration option devices/scan_lvs. + # Scan LVM LVs for layered PVs, allowing LVs to be used as PVs. +@@ -214,11 +222,19 @@ devices { + # use PVs that exist on LVs, and will not allow a PV to be created on + # an LV. The LVs are ignored using a built in device filter that + # identifies and excludes LVs. +- scan_lvs = 0 ++ # This configuration option has an automatic default value. ++ # scan_lvs = 0 + + # Configuration option devices/multipath_component_detection. + # Ignore devices that are components of DM multipath devices. +- multipath_component_detection = 1 ++ # This configuration option has an automatic default value. ++ # multipath_component_detection = 1 ++ ++ # Configuration option devices/multipath_wwids_file. ++ # The path to the multipath wwids file used for multipath component detection. ++ # Set this to an empty string to disable the use of the multipath wwids file. ++ # This configuration option has an automatic default value. ++ # multipath_wwids_file = "/etc/multipath/wwids" + + # Configuration option devices/multipath_wwids_file. + # The path to the multipath wwids file used for multipath component detection. +@@ -235,7 +251,8 @@ devices { + # In cases where the MD superblock is located at the end of the + # component devices, it is more difficult for LVM to consistently + # identify an MD component, see the md_component_checks setting. +- md_component_detection = 1 ++ # This configuration option has an automatic default value. ++ # md_component_detection = 1 + + # Configuration option devices/md_component_checks. + # The checks LVM should use to detect MD component devices. +@@ -259,7 +276,8 @@ devices { + # Ignore devices that are components of firmware RAID devices. + # LVM must use an external_device_info_source other than none for this + # detection to execute. +- fw_raid_component_detection = 0 ++ # This configuration option has an automatic default value. ++ # fw_raid_component_detection = 0 + + # Configuration option devices/md_chunk_alignment. + # Align the start of a PV data area with md device's stripe-width. +@@ -268,7 +286,8 @@ devices { + # with the value detected for this setting. + # This setting is overridden by data_alignment_detection, + # data_alignment, and the --dataalignment option. +- md_chunk_alignment = 1 ++ # This configuration option has an automatic default value. ++ # md_chunk_alignment = 1 + + # Configuration option devices/default_data_alignment. + # Align the start of a PV data area with this number of MiB. +@@ -291,7 +310,8 @@ devices { + # if they are not aligned with the value detected for this setting. + # This setting is overridden by data_alignment and the --dataalignment + # option. +- data_alignment_detection = 1 ++ # This configuration option has an automatic default value. ++ # data_alignment_detection = 1 + + # Configuration option devices/data_alignment. + # Align the start of a PV data area with this number of KiB. +@@ -299,7 +319,8 @@ devices { + # Set to 0 to disable, in which case default_data_alignment + # is used to align the first PE in units of MiB. + # This setting is overridden by the --dataalignment option. +- data_alignment = 0 ++ # This configuration option has an automatic default value. ++ # data_alignment = 0 + + # Configuration option devices/data_alignment_offset_detection. + # Shift the start of an aligned PV data area based on sysfs information. +@@ -310,13 +331,15 @@ devices { + # is the lowest aligned logical block, the 4KiB sectors start at + # LBA -1, and consequently sector 63 is aligned on a 4KiB boundary). + # This setting is overridden by the --dataalignmentoffset option. +- data_alignment_offset_detection = 1 ++ # This configuration option has an automatic default value. ++ # data_alignment_offset_detection = 1 + + # Configuration option devices/ignore_suspended_devices. + # Ignore DM devices that have I/O suspended while scanning devices. + # Otherwise, LVM waits for a suspended device to become accessible. + # This should only be needed in recovery situations. +- ignore_suspended_devices = 0 ++ # This configuration option has an automatic default value. ++ # ignore_suspended_devices = 0 + + # Configuration option devices/ignore_lvm_mirrors. + # Do not scan 'mirror' LVs to avoid possible deadlocks. +@@ -335,18 +358,21 @@ devices { + # a scan of the mirror's labels. The 'mirror' scanning problems do not + # apply to LVM RAID types like 'raid1' which handle failures in a + # different way, making them a better choice for VG stacking. +- ignore_lvm_mirrors = 1 ++ # This configuration option has an automatic default value. ++ # ignore_lvm_mirrors = 1 + + # Configuration option devices/require_restorefile_with_uuid. + # Allow use of pvcreate --uuid without requiring --restorefile. +- require_restorefile_with_uuid = 1 ++ # This configuration option has an automatic default value. ++ # require_restorefile_with_uuid = 1 + + # Configuration option devices/pv_min_size. + # Minimum size in KiB of block devices which can be used as PVs. + # In a clustered environment all nodes must use the same value. + # Any value smaller than 512KiB is ignored. The previous built-in + # value was 512. +- pv_min_size = 2048 ++ # This configuration option has an automatic default value. ++ # pv_min_size = 2048 + + # Configuration option devices/issue_discards. + # Issue discards to PVs that are no longer used by an LV. +@@ -359,7 +385,8 @@ devices { + # benefit from discards, but SSDs and thinly provisioned LUNs + # generally do. If enabled, discards will only be issued if both the + # storage and kernel provide support. +- issue_discards = 0 ++ # This configuration option has an automatic default value. ++ # issue_discards = 0 + + # Configuration option devices/allow_changes_with_duplicate_pvs. + # Allow VG modification while a PV appears on multiple devices. +@@ -372,13 +399,15 @@ devices { + # or activating LVs in it while a PV appears on multiple devices. + # Enabling this setting allows the VG to be used as usual even with + # uncertain devices. +- allow_changes_with_duplicate_pvs = 0 ++ # This configuration option has an automatic default value. ++ # allow_changes_with_duplicate_pvs = 0 + + # Configuration option devices/allow_mixed_block_sizes. + # Allow PVs in the same VG with different logical block sizes. + # When allowed, the user is responsible to ensure that an LV is + # using PVs with matching block sizes when necessary. +- allow_mixed_block_sizes = 0 ++ # This configuration option has an automatic default value. ++ # allow_mixed_block_sizes = 0 + } + + # Configuration section allocation. +@@ -410,7 +439,8 @@ allocation { + # policies to detect more situations where data can be grouped onto + # the same disks. This setting can be used to disable the changes + # and revert to the previous algorithm. +- maximise_cling = 1 ++ # This configuration option has an automatic default value. ++ # maximise_cling = 1 + + # Configuration option allocation/use_blkid_wiping. + # Use blkid to detect and erase existing signatures on new PVs and LVs. +@@ -420,7 +450,8 @@ allocation { + # code is currently able to recognize: MD device signatures, + # swap signature, and LUKS signatures. To see the list of signatures + # recognized by blkid, check the output of the 'blkid -k' command. +- use_blkid_wiping = @DEFAULT_USE_BLKID_WIPING@ ++ # This configuration option has an automatic default value. ++ # use_blkid_wiping = @DEFAULT_USE_BLKID_WIPING@ + + # Configuration option allocation/wipe_signatures_when_zeroing_new_lvs. + # Look for and erase any signatures while zeroing a new LV. +@@ -437,12 +468,14 @@ allocation { + # use_blkid_wiping.) Wiping each detected signature must be confirmed. + # When this setting is disabled, signatures on new LVs are not detected + # or erased unless the --wipesignatures option is used directly. +- wipe_signatures_when_zeroing_new_lvs = 1 ++ # This configuration option has an automatic default value. ++ # wipe_signatures_when_zeroing_new_lvs = 1 + + # Configuration option allocation/mirror_logs_require_separate_pvs. + # Mirror logs and images will always use different PVs. + # The default setting changed in version 2.02.85. +- mirror_logs_require_separate_pvs = 0 ++ # This configuration option has an automatic default value. ++ # mirror_logs_require_separate_pvs = 0 + + # Configuration option allocation/raid_stripe_all_devices. + # Stripe across all PVs when RAID stripes are not specified. +@@ -789,7 +822,8 @@ log { + + # Configuration option log/verbose. + # Controls the messages sent to stdout or stderr. +- verbose = 0 ++ # This configuration option has an automatic default value. ++ # verbose = 0 + + # Configuration option log/silent. + # Suppress all non-essential messages from stdout. +@@ -800,25 +834,37 @@ log { + # for syslog and lvm2_log_fn purposes. + # Any 'yes' or 'no' questions not overridden by other arguments are + # suppressed and default to 'no'. +- silent = 0 ++ # This configuration option has an automatic default value. ++ # silent = 0 + + # Configuration option log/syslog. + # Send log messages through syslog. +- syslog = 1 ++ # This configuration option has an automatic default value. ++ # syslog = 1 + + # Configuration option log/file. + # Write error and debug log messages to a file specified here. + # This configuration option does not have a default value defined. + ++ # Configuration option log/journal. ++ # Record lvm information in the systemd journal. ++ # command: record commands that are run. ++ # output: record default output from commands. ++ # debug: record debug messages from commands. ++ # This configuration option has an automatic default value. ++ # journal = [ ] ++ + # Configuration option log/overwrite. + # Overwrite the log file each time the program is run. +- overwrite = 0 ++ # This configuration option has an automatic default value. ++ # overwrite = 0 + + # Configuration option log/level. + # The level of log messages that are sent to the log file or syslog. + # There are 6 syslog-like log levels currently in use: 2 to 7 inclusive. + # 7 is the most verbose (LOG_DEBUG). +- level = 0 ++ # This configuration option has an automatic default value. ++ # level = 0 + + # Configuration option log/indent. + # Indent messages according to their severity. +@@ -827,7 +873,8 @@ log { + + # Configuration option log/command_names. + # Display the command name on each line of output. +- command_names = 0 ++ # This configuration option has an automatic default value. ++ # command_names = 0 + + # Configuration option log/prefix. + # A prefix to use before the log message text. +@@ -835,12 +882,14 @@ log { + # Two spaces allows you to see/grep the severity of each message. + # To make the messages look similar to the original LVM tools use: + # indent = 0, command_names = 1, prefix = " -- " +- prefix = " " ++ # This configuration option has an automatic default value. ++ # prefix = " " + + # Configuration option log/activation. + # Log messages during activation. + # Don't use this in low memory situations (can deadlock). +- activation = 0 ++ # This configuration option has an automatic default value. ++ # activation = 0 + + # Configuration option log/debug_classes. + # Select log messages by class. +@@ -848,7 +897,8 @@ log { + # debug output if the class is listed here. Classes currently + # available: memory, devices, io, activation, allocation, + # metadata, cache, locking, lvmpolld. Use "all" to see everything. +- debug_classes = [ "memory", "devices", "io", "activation", "allocation", "metadata", "cache", "locking", "lvmpolld", "dbus" ] ++ # This configuration option has an automatic default value. ++ # debug_classes = [ "memory", "devices", "io", "activation", "allocation", "metadata", "cache", "locking", "lvmpolld", "dbus" ] + + # Configuration option log/debug_file_fields. + # The fields included in debug output written to log file. +@@ -875,30 +925,36 @@ backup { + # Configuration option backup/backup. + # Maintain a backup of the current metadata configuration. + # Think very hard before turning this off! +- backup = 1 ++ # This configuration option has an automatic default value. ++ # backup = 1 + + # Configuration option backup/backup_dir. + # Location of the metadata backup files. + # Remember to back up this directory regularly! +- backup_dir = "@DEFAULT_SYS_DIR@/@DEFAULT_BACKUP_SUBDIR@" ++ # This configuration option has an automatic default value. ++ # backup_dir = "@DEFAULT_SYS_DIR@/@DEFAULT_BACKUP_SUBDIR@" + + # Configuration option backup/archive. + # Maintain an archive of old metadata configurations. + # Think very hard before turning this off. +- archive = 1 ++ # This configuration option has an automatic default value. ++ # archive = 1 + + # Configuration option backup/archive_dir. + # Location of the metdata archive files. + # Remember to back up this directory regularly! +- archive_dir = "@DEFAULT_SYS_DIR@/@DEFAULT_ARCHIVE_SUBDIR@" ++ # This configuration option has an automatic default value. ++ # archive_dir = "@DEFAULT_SYS_DIR@/@DEFAULT_ARCHIVE_SUBDIR@" + + # Configuration option backup/retain_min. + # Minimum number of archives to keep. +- retain_min = 10 ++ # This configuration option has an automatic default value. ++ # retain_min = 10 + + # Configuration option backup/retain_days. + # Minimum number of days to keep archive files. +- retain_days = 30 ++ # This configuration option has an automatic default value. ++ # retain_days = 30 + } + + # Configuration section shell. +@@ -907,7 +963,8 @@ shell { + + # Configuration option shell/history_size. + # Number of lines of history to store in ~/.lvm_history. +- history_size = 100 ++ # This configuration option has an automatic default value. ++ # history_size = 100 + } + + # Configuration section global. +@@ -917,16 +974,19 @@ global { + # Configuration option global/umask. + # The file creation mask for any files and directories created. + # Interpreted as octal if the first digit is zero. +- umask = 077 ++ # This configuration option has an automatic default value. ++ # umask = 077 + + # Configuration option global/test. + # No on-disk metadata changes will be made in test mode. + # Equivalent to having the -t option on every command. +- test = 0 ++ # This configuration option has an automatic default value. ++ # test = 0 + + # Configuration option global/units. + # Default value for --units argument. +- units = "r" ++ # This configuration option has an automatic default value. ++ # units = "r" + + # Configuration option global/si_unit_consistency. + # Distinguish between powers of 1024 and 1000 bytes. +@@ -934,13 +994,15 @@ global { + # e.g. KiB, MiB, GiB, and powers of 1000 bytes, e.g. KB, MB, GB. + # If scripts depend on the old behaviour, disable this setting + # temporarily until they are updated. +- si_unit_consistency = 1 ++ # This configuration option has an automatic default value. ++ # si_unit_consistency = 1 + + # Configuration option global/suffix. + # Display unit suffix for sizes. + # This setting has no effect if the units are in human-readable form + # (global/units = "h") in which case the suffix is always displayed. +- suffix = 1 ++ # This configuration option has an automatic default value. ++ # suffix = 1 + + # Configuration option global/activation. + # Enable/disable communication with the kernel device-mapper. +@@ -948,26 +1010,31 @@ global { + # activating any logical volumes. If the device-mapper driver + # is not present in the kernel, disabling this should suppress + # the error messages. +- activation = 1 ++ # This configuration option has an automatic default value. ++ # activation = 1 + + # Configuration option global/proc. + # Location of proc filesystem. + # This configuration option is advanced. +- proc = "/proc" ++ # This configuration option has an automatic default value. ++ # proc = "/proc" + + # Configuration option global/etc. + # Location of /etc system configuration directory. +- etc = "@CONFDIR@" ++ # This configuration option has an automatic default value. ++ # etc = "@CONFDIR@" + + # Configuration option global/wait_for_locks. + # When disabled, fail if a lock request would block. +- wait_for_locks = 1 ++ # This configuration option has an automatic default value. ++ # wait_for_locks = 1 + + # Configuration option global/locking_dir. + # Directory to use for LVM command file locks. + # Local non-LV directory that holds file-based locks while commands are + # in progress. A directory like /tmp that may get wiped on reboot is OK. +- locking_dir = "@DEFAULT_LOCK_DIR@" ++ # This configuration option has an automatic default value. ++ # locking_dir = "@DEFAULT_LOCK_DIR@" + + # Configuration option global/prioritise_write_locks. + # Allow quicker VG write access during high volume read access. +@@ -976,7 +1043,8 @@ global { + # requests immediately, delay them to allow the read-write requests to + # be serviced. Without this setting, write access may be stalled by a + # high volume of read-only requests. This option only affects file locks. +- prioritise_write_locks = 1 ++ # This configuration option has an automatic default value. ++ # prioritise_write_locks = 1 + + # Configuration option global/library_dir. + # Search this directory first for shared libraries. +@@ -986,7 +1054,8 @@ global { + # Abort a command that encounters an internal error. + # Treat any internal errors as fatal errors, aborting the process that + # encountered the internal error. Please only enable for debugging. +- abort_on_internal_errors = 0 ++ # This configuration option has an automatic default value. ++ # abort_on_internal_errors = 0 + + # Configuration option global/metadata_read_only. + # No operations that change on-disk metadata are permitted. +@@ -994,7 +1063,8 @@ global { + # repair will still be allowed to proceed exactly as if the repair had + # been performed (except for the unchanged vg_seqno). Inappropriate + # use could mess up your system, so seek advice first! +- metadata_read_only = 0 ++ # This configuration option has an automatic default value. ++ # metadata_read_only = 0 + + # Configuration option global/mirror_segtype_default. + # The segment type used by the short mirroring option -m. +@@ -1020,7 +1090,8 @@ global { + # cluster-aware and cannot be used in a shared (active/active) + # fashion in a cluster. + # +- mirror_segtype_default = "@DEFAULT_MIRROR_SEGTYPE@" ++ # This configuration option has an automatic default value. ++ # mirror_segtype_default = "@DEFAULT_MIRROR_SEGTYPE@" + + # Configuration option global/support_mirrored_mirror_log. + # Enable mirrored 'mirror' log type for testing. +@@ -1050,7 +1121,8 @@ global { + # effectively creating a RAID 0+1 array. The layering is suboptimal + # in terms of providing redundancy and performance. + # +- raid10_segtype_default = "@DEFAULT_RAID10_SEGTYPE@" ++ # This configuration option has an automatic default value. ++ # raid10_segtype_default = "@DEFAULT_RAID10_SEGTYPE@" + + # Configuration option global/sparse_segtype_default. + # The segment type used by the -V -L combination. +@@ -1070,7 +1142,8 @@ global { + # metadata. It has better performance, especially when more data + # is used. It also supports full snapshots. + # +- sparse_segtype_default = "@DEFAULT_SPARSE_SEGTYPE@" ++ # This configuration option has an automatic default value. ++ # sparse_segtype_default = "@DEFAULT_SPARSE_SEGTYPE@" + + # Configuration option global/lvdisplay_shows_full_device_path. + # Enable this to reinstate the previous lvdisplay name format. +@@ -1105,7 +1178,8 @@ global { + # Applicable only if LVM is compiled with lockd support in which + # case there is also lvmlockd(8) man page available for more + # information. +- use_lvmlockd = 0 ++ # This configuration option has an automatic default value. ++ # use_lvmlockd = 0 + + # Configuration option global/lvmlockd_lock_retries. + # Retry lvmlockd lock requests this many times. +@@ -1278,15 +1352,18 @@ global { + # uname + # Set the system ID from the hostname (uname) of the system. + # System IDs beginning localhost are not permitted. ++ # appmachineid ++ # Use an LVM-specific derivation of the local machine-id as the ++ # system ID. See 'man machine-id'. + # machineid +- # Use the contents of the machine-id file to set the system ID. +- # Some systems create this file at installation time. +- # See 'man machine-id' and global/etc. ++ # Use the contents of the machine-id file to set the system ID ++ # (appmachineid is recommended.) + # file + # Use the contents of another file (system_id_file) to set the + # system ID. + # +- system_id_source = "none" ++ # This configuration option has an automatic default value. ++ # system_id_source = "none" + + # Configuration option global/system_id_file. + # The full path to the file containing a system ID. +@@ -1306,13 +1383,15 @@ global { + # and to use its own control group. When this option is disabled, LVM + # commands will supervise long running operations by forking themselves. + # Applicable only if LVM is compiled with lvmpolld support. +- use_lvmpolld = @DEFAULT_USE_LVMPOLLD@ ++ # This configuration option has an automatic default value. ++ # use_lvmpolld = @DEFAULT_USE_LVMPOLLD@ + + # Configuration option global/notify_dbus. + # Enable D-Bus notification from LVM commands. + # When enabled, an LVM command that changes PVs, changes VG metadata, + # or changes the activation state of an LV will send a notification. +- notify_dbus = 1 ++ # This configuration option has an automatic default value. ++ # notify_dbus = 1 + + # Configuration option global/io_memory_size. + # The amount of memory in KiB that LVM allocates to perform disk io. +@@ -1333,7 +1412,8 @@ activation { + # Useful for debugging problems with activation. Some of the checks may + # be expensive, so it's best to use this only when there seems to be a + # problem. +- checks = 0 ++ # This configuration option has an automatic default value. ++ # checks = 0 + + # Configuration option activation/udev_sync. + # Use udev notifications to synchronize udev and LVM. +@@ -1344,14 +1424,16 @@ activation { + # that ignore the devices LVM creates. If enabled when udev is not + # running, and LVM processes are waiting for udev, run the command + # 'dmsetup udevcomplete_all' to wake them up. +- udev_sync = 1 ++ # This configuration option has an automatic default value. ++ # udev_sync = 1 + + # Configuration option activation/udev_rules. + # Use udev rules to manage LV device nodes and symlinks. + # When disabled, LVM will manage the device nodes and symlinks for + # active LVs itself. Manual intervention may be required if this + # setting is changed while LVs are active. +- udev_rules = 1 ++ # This configuration option has an automatic default value. ++ # udev_rules = 1 + + # Configuration option activation/verify_udev_operations. + # Use extra checks in LVM to verify udev operations. +@@ -1366,7 +1448,8 @@ activation { + # If LV deactivation fails, LVM will retry for a few seconds before + # failing. This may happen because a process run from a quick udev rule + # temporarily opened the device. +- retry_deactivation = 1 ++ # This configuration option has an automatic default value. ++ # retry_deactivation = 1 + + # Configuration option activation/missing_stripe_filler. + # Method to fill missing stripes when activating an incomplete LV. +@@ -1377,7 +1460,8 @@ activation { + # other than 'error' with mirrored or snapshotted volumes is likely to + # result in data corruption. + # This configuration option is advanced. +- missing_stripe_filler = "error" ++ # This configuration option has an automatic default value. ++ # missing_stripe_filler = "error" + + # Configuration option activation/use_linear_target. + # Use the linear target to optimize single stripe LVs. +@@ -1499,7 +1583,8 @@ activation { + # The clean/dirty state of data is tracked for each region. + # The value is rounded down to a power of two if necessary, and + # is ignored if it is not a multiple of the machine memory page size. +- raid_region_size = 2048 ++ # This configuration option has an automatic default value. ++ # raid_region_size = 2048 + + # Configuration option activation/error_when_full. + # Return errors if a thin pool runs out of space. +@@ -1544,7 +1629,8 @@ activation { + # Attempt to use any extra physical volumes in the VG as spares and + # replace faulty devices. + # +- raid_fault_policy = "warn" ++ # This configuration option has an automatic default value. ++ # raid_fault_policy = "warn" + + # Configuration option activation/mirror_image_fault_policy. + # Defines how a device failure in a 'mirror' LV is handled. +@@ -1581,13 +1667,15 @@ activation { + # 'remove' if no suitable device and space can be allocated for the + # replacement. + # +- mirror_image_fault_policy = "remove" ++ # This configuration option has an automatic default value. ++ # mirror_image_fault_policy = "remove" + + # Configuration option activation/mirror_log_fault_policy. + # Defines how a device failure in a 'mirror' log LV is handled. + # The mirror_image_fault_policy description for mirrored LVs also + # applies to mirrored log LVs. +- mirror_log_fault_policy = "allocate" ++ # This configuration option has an automatic default value. ++ # mirror_log_fault_policy = "allocate" + + # Configuration option activation/snapshot_autoextend_threshold. + # Auto-extend a snapshot when its usage exceeds this percent. +@@ -1602,7 +1690,8 @@ activation { + # 840M, it is extended to 1.44G: + # snapshot_autoextend_threshold = 70 + # +- snapshot_autoextend_threshold = 100 ++ # This configuration option has an automatic default value. ++ # snapshot_autoextend_threshold = 100 + + # Configuration option activation/snapshot_autoextend_percent. + # Auto-extending a snapshot adds this percent extra space. +@@ -1615,7 +1704,8 @@ activation { + # 840M, it is extended to 1.44G: + # snapshot_autoextend_percent = 20 + # +- snapshot_autoextend_percent = 20 ++ # This configuration option has an automatic default value. ++ # snapshot_autoextend_percent = 20 + + # Configuration option activation/thin_pool_autoextend_threshold. + # Auto-extend a thin pool when its usage exceeds this percent. +@@ -1630,7 +1720,8 @@ activation { + # 840M, it is extended to 1.44G: + # thin_pool_autoextend_threshold = 70 + # +- thin_pool_autoextend_threshold = 100 ++ # This configuration option has an automatic default value. ++ # thin_pool_autoextend_threshold = 100 + + # Configuration option activation/thin_pool_autoextend_percent. + # Auto-extending a thin pool adds this percent extra space. +@@ -1643,7 +1734,8 @@ activation { + # 840M, it is extended to 1.44G: + # thin_pool_autoextend_percent = 20 + # +- thin_pool_autoextend_percent = 20 ++ # This configuration option has an automatic default value. ++ # thin_pool_autoextend_percent = 20 + + # Configuration option activation/vdo_pool_autoextend_threshold. + # Auto-extend a VDO pool when its usage exceeds this percent. +@@ -1702,7 +1794,8 @@ activation { + # Monitor LVs that are activated. + # The --ignoremonitoring option overrides this setting. + # When enabled, LVM will ask dmeventd to monitor activated LVs. +- monitoring = 1 ++ # This configuration option has an automatic default value. ++ # monitoring = 1 + + # Configuration option activation/polling_interval. + # Check pvmove or lvconvert progress at this interval (seconds). +@@ -1744,7 +1837,8 @@ activation { + # This setting should not normally be used, but may sometimes + # assist with data recovery. + # +- activation_mode = "degraded" ++ # This configuration option has an automatic default value. ++ # activation_mode = "degraded" + + # Configuration option activation/lock_start_list. + # Locking is started only for VGs selected by this list. +diff --git a/man/lvchange.8_pregen b/man/lvchange.8_pregen +index 3cfa733..2422465 100644 +--- a/man/lvchange.8_pregen ++++ b/man/lvchange.8_pregen +@@ -67,6 +67,8 @@ lvchange \(em Change the attributes of logical volume(s) + .br + \fB--ignoremonitoring\fP + .br ++ \fB--journal\fP \fIString\fP ++.br + \fB--lockopt\fP \fIString\fP + .br + \fB--longhelp\fP +@@ -419,6 +421,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -674,6 +678,16 @@ Do not interact with dmeventd unless --monitor is specified. + Do not use this if dmeventd is already monitoring a device. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/lvconvert.8_pregen b/man/lvconvert.8_pregen +index 4fafe5d..f5f2bfd 100644 +--- a/man/lvconvert.8_pregen ++++ b/man/lvconvert.8_pregen +@@ -67,6 +67,8 @@ lvconvert \(em Change logical volume layout + .br + \fB-i\fP|\fB--interval\fP \fINumber\fP + .br ++ \fB--journal\fP \fIString\fP ++.br + \fB--lockopt\fP \fIString\fP + .br + \fB--longhelp\fP +@@ -963,6 +965,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -1183,6 +1187,16 @@ Display help text. + Report progress at regular intervals. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/lvcreate.8_pregen b/man/lvcreate.8_pregen +index b642ad0..513ef05 100644 +--- a/man/lvcreate.8_pregen ++++ b/man/lvcreate.8_pregen +@@ -75,6 +75,8 @@ lvcreate \(em Create a logical volume + .br + \fB--ignoremonitoring\fP + .br ++ \fB--journal\fP \fIString\fP ++.br + \fB--lockopt\fP \fIString\fP + .br + \fB--longhelp\fP +@@ -805,6 +807,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -1075,6 +1079,16 @@ Do not interact with dmeventd unless --monitor is specified. + Do not use this if dmeventd is already monitoring a device. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/lvdisplay.8_pregen b/man/lvdisplay.8_pregen +index 8ff34bc..011857c 100644 +--- a/man/lvdisplay.8_pregen ++++ b/man/lvdisplay.8_pregen +@@ -110,6 +110,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -228,6 +230,16 @@ Allows a command to continue with read-only metadata + operations after locking failures. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/lvextend.8_pregen b/man/lvextend.8_pregen +index fa0aec6..1409ada 100644 +--- a/man/lvextend.8_pregen ++++ b/man/lvextend.8_pregen +@@ -39,6 +39,8 @@ lvextend \(em Add space to a logical volume + .br + \fB-h\fP|\fB--help\fP + .br ++ \fB--journal\fP \fIString\fP ++.br + \fB--lockopt\fP \fIString\fP + .br + \fB--longhelp\fP +@@ -251,6 +253,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -373,6 +377,16 @@ Use with extreme caution. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/lvm-fullreport.8_pregen b/man/lvm-fullreport.8_pregen +index 399d4ff..a93e9cf 100644 +--- a/man/lvm-fullreport.8_pregen ++++ b/man/lvm-fullreport.8_pregen +@@ -106,6 +106,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -202,6 +204,16 @@ Allows a command to continue with read-only metadata + operations after locking failures. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/lvm-lvpoll.8_pregen b/man/lvm-lvpoll.8_pregen +index cf18ebe..4c6cd30 100644 +--- a/man/lvm-lvpoll.8_pregen ++++ b/man/lvm-lvpoll.8_pregen +@@ -62,6 +62,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -147,6 +149,16 @@ Display help text. + Report progress at regular intervals. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/lvmconfig.8_pregen b/man/lvmconfig.8_pregen +index 6cdb577..bcbe3e6 100644 +--- a/man/lvmconfig.8_pregen ++++ b/man/lvmconfig.8_pregen +@@ -103,6 +103,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -204,6 +206,16 @@ and \fBdiff\fP types include unsupported settings in their output by default, + all the other types ignore unsupported settings. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB-l\fP|\fB--list\fP + .br + List config settings with summarizing comment. This is the same as using +diff --git a/man/lvmdevices.8_pregen b/man/lvmdevices.8_pregen +index e581a8d..0506991 100644 +--- a/man/lvmdevices.8_pregen ++++ b/man/lvmdevices.8_pregen +@@ -38,6 +38,8 @@ lvmdevices \(em Manage the devices file + .br + \fB-h\fP|\fB--help\fP + .br ++ \fB--journal\fP \fIString\fP ++.br + \fB--lockopt\fP \fIString\fP + .br + \fB--longhelp\fP +@@ -284,6 +286,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -379,6 +383,16 @@ For testing and debugging. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/lvmdiskscan.8_pregen b/man/lvmdiskscan.8_pregen +index 5f31e81..0f1f0f5 100644 +--- a/man/lvmdiskscan.8_pregen ++++ b/man/lvmdiskscan.8_pregen +@@ -60,6 +60,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -123,6 +125,16 @@ For testing and debugging. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/lvreduce.8_pregen b/man/lvreduce.8_pregen +index 0a659e1..a5a9e8b 100644 +--- a/man/lvreduce.8_pregen ++++ b/man/lvreduce.8_pregen +@@ -82,6 +82,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -179,6 +181,16 @@ Use with extreme caution. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/lvremove.8_pregen b/man/lvremove.8_pregen +index a5ed826..aa3dd78 100644 +--- a/man/lvremove.8_pregen ++++ b/man/lvremove.8_pregen +@@ -88,6 +88,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -163,6 +165,16 @@ Use with extreme caution. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/lvrename.8_pregen b/man/lvrename.8_pregen +index 5b5975f..76702e8 100644 +--- a/man/lvrename.8_pregen ++++ b/man/lvrename.8_pregen +@@ -72,6 +72,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -141,6 +143,16 @@ For testing and debugging. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/lvresize.8_pregen b/man/lvresize.8_pregen +index 36c1760..a9dea81 100644 +--- a/man/lvresize.8_pregen ++++ b/man/lvresize.8_pregen +@@ -39,6 +39,8 @@ lvresize \(em Resize a logical volume + .br + \fB-h\fP|\fB--help\fP + .br ++ \fB--journal\fP \fIString\fP ++.br + \fB--lockopt\fP \fIString\fP + .br + \fB--longhelp\fP +@@ -209,6 +211,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -331,6 +335,16 @@ Use with extreme caution. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/lvs.8_pregen b/man/lvs.8_pregen +index d822347..5207a32 100644 +--- a/man/lvs.8_pregen ++++ b/man/lvs.8_pregen +@@ -106,6 +106,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -212,6 +214,16 @@ Allows a command to continue with read-only metadata + operations after locking failures. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/lvscan.8_pregen b/man/lvscan.8_pregen +index 40438a7..fa318ef 100644 +--- a/man/lvscan.8_pregen ++++ b/man/lvscan.8_pregen +@@ -65,6 +65,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -146,6 +148,16 @@ Allows a command to continue with read-only metadata + operations after locking failures. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/pvchange.8_pregen b/man/pvchange.8_pregen +index 577352d..ca3c0f3 100644 +--- a/man/pvchange.8_pregen ++++ b/man/pvchange.8_pregen +@@ -109,6 +109,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -206,6 +208,16 @@ Use with extreme caution. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/pvck.8_pregen b/man/pvck.8_pregen +index 6e55916..76f4144 100644 +--- a/man/pvck.8_pregen ++++ b/man/pvck.8_pregen +@@ -33,6 +33,8 @@ pvck \(em Check metadata on physical volumes + .br + \fB-h\fP|\fB--help\fP + .br ++ \fB--journal\fP \fIString\fP ++.br + \fB--labelsector\fP \fINumber\fP + .br + \fB--lockopt\fP \fIString\fP +@@ -305,6 +307,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -389,6 +393,16 @@ Metadata file to read or write. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--labelsector\fP \fINumber\fP + .br + By default the PV is labelled with an LVM2 identifier in its second +diff --git a/man/pvcreate.8_pregen b/man/pvcreate.8_pregen +index 26e5141..9fb1106 100644 +--- a/man/pvcreate.8_pregen ++++ b/man/pvcreate.8_pregen +@@ -158,6 +158,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -256,6 +258,16 @@ Use with extreme caution. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--labelsector\fP \fINumber\fP + .br + By default the PV is labelled with an LVM2 identifier in its second +diff --git a/man/pvdisplay.8_pregen b/man/pvdisplay.8_pregen +index ff5d9f5..346b97d 100644 +--- a/man/pvdisplay.8_pregen ++++ b/man/pvdisplay.8_pregen +@@ -108,6 +108,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -218,6 +220,16 @@ Allows a command to continue with read-only metadata + operations after locking failures. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/pvmove.8_pregen b/man/pvmove.8_pregen +index a764ed9..2ec1b59 100644 +--- a/man/pvmove.8_pregen ++++ b/man/pvmove.8_pregen +@@ -112,6 +112,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -232,6 +234,16 @@ Display help text. + Report progress at regular intervals. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/pvremove.8_pregen b/man/pvremove.8_pregen +index b34f2a0..6ca29f5 100644 +--- a/man/pvremove.8_pregen ++++ b/man/pvremove.8_pregen +@@ -61,6 +61,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -130,6 +132,16 @@ Use with extreme caution. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/pvresize.8_pregen b/man/pvresize.8_pregen +index ea309b3..a94e0e5 100644 +--- a/man/pvresize.8_pregen ++++ b/man/pvresize.8_pregen +@@ -56,6 +56,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -119,6 +121,16 @@ For testing and debugging. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/pvs.8_pregen b/man/pvs.8_pregen +index 08b5600..00c501c 100644 +--- a/man/pvs.8_pregen ++++ b/man/pvs.8_pregen +@@ -104,6 +104,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -202,6 +204,16 @@ Allows a command to continue with read-only metadata + operations after locking failures. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/pvscan.8_pregen b/man/pvscan.8_pregen +index 8025d6c..ec4189e 100644 +--- a/man/pvscan.8_pregen ++++ b/man/pvscan.8_pregen +@@ -6,12 +6,80 @@ pvscan \(em List all physical volumes + . + .SH SYNOPSIS + . +-\fBpvscan\fP \fIoption_args\fP ++\fBpvscan\fP \fIoption_args\fP \fIposition_args\fP + .br + [ \fIoption_args\fP ] + .br + [ \fIposition_args\fP ] + .br ++.P ++.ad l ++ \fB-a\fP|\fB--activate\fP \fBy\fP|\fBn\fP|\fBay\fP ++.br ++ \fB--cache\fP ++.br ++ \fB--checkcomplete\fP ++.br ++ \fB--commandprofile\fP \fIString\fP ++.br ++ \fB--config\fP \fIString\fP ++.br ++ \fB-d\fP|\fB--debug\fP ++.br ++ \fB--devices\fP \fIPV\fP ++.br ++ \fB--devicesfile\fP \fIString\fP ++.br ++ \fB--driverloaded\fP \fBy\fP|\fBn\fP ++.br ++ \fB-e\fP|\fB--exported\fP ++.br ++ \fB-h\fP|\fB--help\fP ++.br ++ \fB--ignorelockingfailure\fP ++.br ++ \fB--journal\fP \fIString\fP ++.br ++ \fB--listlvs\fP ++.br ++ \fB--listvg\fP ++.br ++ \fB--lockopt\fP \fIString\fP ++.br ++ \fB--longhelp\fP ++.br ++ \fB-j\fP|\fB--major\fP \fINumber\fP ++.br ++ \fB--minor\fP \fINumber\fP ++.br ++ \fB--nolocking\fP ++.br ++ \fB--noudevsync\fP ++.br ++ \fB-n\fP|\fB--novolumegroup\fP ++.br ++ \fB--profile\fP \fIString\fP ++.br ++ \fB-q\fP|\fB--quiet\fP ++.br ++ \fB--reportformat\fP \fBbasic\fP|\fBjson\fP ++.br ++ \fB-s\fP|\fB--short\fP ++.br ++ \fB-t\fP|\fB--test\fP ++.br ++ \fB--udevoutput\fP ++.br ++ \fB-u\fP|\fB--uuid\fP ++.br ++ \fB-v\fP|\fB--verbose\fP ++.br ++ \fB--version\fP ++.br ++ \fB--vgonline\fP ++.br ++ \fB-y\fP|\fB--yes\fP ++.ad b + . + .SH DESCRIPTION + . +@@ -92,21 +160,29 @@ Display PV information. + .br + [ \fB-u\fP|\fB--uuid\fP ] + .br ++[ \fB--ignorelockingfailure\fP ] ++.br ++[ \fB--reportformat\fP \fBbasic\fP|\fBjson\fP ] ++.br + [ COMMON_OPTIONS ] + .ad b + .RE + .P +-Autoactivate a VG when all PVs are online. ++\(em ++.P ++Record that a PV is online or offline. + .br + .P + \fBpvscan\fP \fB--cache\fP + .br + .RS 4 + .ad l +-[ \fB-a\fP|\fB--activate\fP \fBay\fP ] +-.br + [ \fB-j\fP|\fB--major\fP \fINumber\fP ] + .br ++[ \fB--ignorelockingfailure\fP ] ++.br ++[ \fB--reportformat\fP \fBbasic\fP|\fBjson\fP ] ++.br + [ \fB--minor\fP \fINumber\fP ] + .br + [ \fB--noudevsync\fP ] +@@ -118,16 +194,100 @@ Autoactivate a VG when all PVs are online. + [ \fIString\fP|\fIPV\fP ... ] + .RE + .P +-Common options for command: +-. ++\(em ++.P ++Record that a PV is online and autoactivate the VG if complete. ++.br ++.P ++\fBpvscan\fP \fB--cache\fP \fB-a\fP|\fB--activate\fP \fBay\fP ++.br + .RS 4 + .ad l ++[ \fB-j\fP|\fB--major\fP \fINumber\fP ] ++.br + [ \fB--ignorelockingfailure\fP ] + .br + [ \fB--reportformat\fP \fBbasic\fP|\fBjson\fP ] ++.br ++[ \fB--minor\fP \fINumber\fP ] ++.br ++[ \fB--noudevsync\fP ] ++.br ++[ COMMON_OPTIONS ] ++.ad b ++.RE ++.RS 4 ++[ \fIString\fP|\fIPV\fP ... ] ++.RE ++.P ++\(em ++.P ++Record that a PV is online and list the VG using the PV. ++.br ++.P ++\fBpvscan\fP \fB--cache\fP \fB--listvg\fP \fIPV\fP ++.br ++.RS 4 ++.ad l ++[ \fB--ignorelockingfailure\fP ] ++.br ++[ \fB--checkcomplete\fP ] ++.br ++[ \fB--vgonline\fP ] ++.br ++[ \fB--udevoutput\fP ] ++.br ++[ COMMON_OPTIONS ] + .ad b + .RE + .P ++\(em ++.P ++Record that a PV is online and list LVs using the PV. ++.br ++.P ++\fBpvscan\fP \fB--cache\fP \fB--listlvs\fP \fIPV\fP ++.br ++.RS 4 ++.ad l ++[ \fB--ignorelockingfailure\fP ] ++.br ++[ \fB--checkcomplete\fP ] ++.br ++[ \fB--vgonline\fP ] ++.br ++[ COMMON_OPTIONS ] ++.ad b ++.RE ++.P ++\(em ++.P ++List LVs using the PV. ++.br ++.P ++\fBpvscan\fP \fB--listlvs\fP \fIPV\fP ++.br ++.RS 4 ++.ad l ++[ COMMON_OPTIONS ] ++.ad b ++.RE ++.P ++\(em ++.P ++List the VG using the PV. ++.br ++.P ++\fBpvscan\fP \fB--listvg\fP \fIPV\fP ++.br ++.RS 4 ++.ad l ++[ COMMON_OPTIONS ] ++.ad b ++.RE ++.P ++\(em ++.P + Common options for lvm: + . + .RS 4 +@@ -154,6 +314,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -181,6 +343,15 @@ Auto-activate LVs in a VG when the PVs scanned have completed the VG. + Scan one or more devices and record that they are online. + . + .HP ++\fB--checkcomplete\fP ++.br ++Check if all the devices used by a VG or LV are present, ++and print "complete" or "incomplete" for each listed ++VG or LV. This option is used as a part of event-based ++autoactivation, so pvscan will do nothing if this option ++is set and event_activation=0 in the config settings. ++. ++.HP + \fB--commandprofile\fP \fIString\fP + .br + The command profile to use for command configuration. +@@ -239,6 +410,26 @@ Allows a command to continue with read-only metadata + operations after locking failures. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP ++\fB--listlvs\fP ++.br ++Print a list of LVs that use the device. ++. ++.HP ++\fB--listvg\fP ++.br ++Print the VG that uses the device. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +@@ -314,6 +505,11 @@ error messages in multi-stage operations if a tool relies on reading + back metadata it believes has changed but hasn't. + . + .HP ++\fB--udevoutput\fP ++.br ++Command output is modified to be imported from a udev rule. ++. ++.HP + \fB-u\fP|\fB--uuid\fP + .br + Show UUIDs in addition to device names. +@@ -330,6 +526,12 @@ of messages sent to stdout and stderr. + Display version information. + . + .HP ++\fB--vgonline\fP ++.br ++The first command to see a complete VG will report it uniquely. ++Other commands to see the complete VG will report it differently. ++. ++.HP + \fB-y\fP|\fB--yes\fP + .br + Do not prompt for confirmation interactively but always assume the +diff --git a/man/vgcfgbackup.8_pregen b/man/vgcfgbackup.8_pregen +index ce71025..34690ef 100644 +--- a/man/vgcfgbackup.8_pregen ++++ b/man/vgcfgbackup.8_pregen +@@ -81,6 +81,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -163,6 +165,16 @@ Allows a command to continue with read-only metadata + operations after locking failures. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/vgcfgrestore.8_pregen b/man/vgcfgrestore.8_pregen +index 8416267..54f1d45 100644 +--- a/man/vgcfgrestore.8_pregen ++++ b/man/vgcfgrestore.8_pregen +@@ -32,6 +32,8 @@ vgcfgrestore \(em Restore volume group configuration + .br + \fB-h\fP|\fB--help\fP + .br ++ \fB--journal\fP \fIString\fP ++.br + \fB-l\fP|\fB--list\fP + .br + \fB--lockopt\fP \fIString\fP +@@ -162,6 +164,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -240,6 +244,16 @@ thin pool kernel metadata precisely. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB-l\fP|\fB--list\fP + .br + List metadata backup and archive files pertaining to the VG. +diff --git a/man/vgchange.8_pregen b/man/vgchange.8_pregen +index 31fc458..c2324d3 100644 +--- a/man/vgchange.8_pregen ++++ b/man/vgchange.8_pregen +@@ -53,6 +53,8 @@ vgchange \(em Change volume group attributes + .br + \fB--ignoremonitoring\fP + .br ++ \fB--journal\fP \fIString\fP ++.br + \fB--lockopt\fP \fIString\fP + .br + \fB--lockstart\fP +@@ -419,6 +421,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -597,6 +601,16 @@ Do not interact with dmeventd unless --monitor is specified. + Do not use this if dmeventd is already monitoring a device. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/vgck.8_pregen b/man/vgck.8_pregen +index ae31242..6295e44 100644 +--- a/man/vgck.8_pregen ++++ b/man/vgck.8_pregen +@@ -72,6 +72,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -135,6 +137,16 @@ For testing and debugging. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/vgconvert.8_pregen b/man/vgconvert.8_pregen +index d18e7af..2665fe6 100644 +--- a/man/vgconvert.8_pregen ++++ b/man/vgconvert.8_pregen +@@ -67,6 +67,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -151,6 +153,16 @@ Use with extreme caution. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--labelsector\fP \fINumber\fP + .br + By default the PV is labelled with an LVM2 identifier in its second +diff --git a/man/vgcreate.8_pregen b/man/vgcreate.8_pregen +index 7e357a5..a774575 100644 +--- a/man/vgcreate.8_pregen ++++ b/man/vgcreate.8_pregen +@@ -107,6 +107,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -233,6 +235,16 @@ Use with extreme caution. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--labelsector\fP \fINumber\fP + .br + By default the PV is labelled with an LVM2 identifier in its second +diff --git a/man/vgdisplay.8_pregen b/man/vgdisplay.8_pregen +index 467f745..4f7ddf5 100644 +--- a/man/vgdisplay.8_pregen ++++ b/man/vgdisplay.8_pregen +@@ -105,6 +105,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -215,6 +217,16 @@ Allows a command to continue with read-only metadata + operations after locking failures. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/vgexport.8_pregen b/man/vgexport.8_pregen +index 0e6e0b1..5c39c8d 100644 +--- a/man/vgexport.8_pregen ++++ b/man/vgexport.8_pregen +@@ -93,6 +93,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -160,6 +162,16 @@ For testing and debugging. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/vgextend.8_pregen b/man/vgextend.8_pregen +index e5e01c4..b0d20f6 100644 +--- a/man/vgextend.8_pregen ++++ b/man/vgextend.8_pregen +@@ -85,6 +85,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -174,6 +176,16 @@ Use with extreme caution. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--labelsector\fP \fINumber\fP + .br + By default the PV is labelled with an LVM2 identifier in its second +diff --git a/man/vgimport.8_pregen b/man/vgimport.8_pregen +index c0b815b..ff242cf 100644 +--- a/man/vgimport.8_pregen ++++ b/man/vgimport.8_pregen +@@ -81,6 +81,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -155,6 +157,16 @@ Use with extreme caution. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/vgimportclone.8_pregen b/man/vgimportclone.8_pregen +index ee9bbe6..e78d1b2 100644 +--- a/man/vgimportclone.8_pregen ++++ b/man/vgimportclone.8_pregen +@@ -62,6 +62,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -145,6 +147,16 @@ will not be changed (nor will their associated PVs). + Add devices to the devices file. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/vgimportdevices.8_pregen b/man/vgimportdevices.8_pregen +index 364ef52..db6b597 100644 +--- a/man/vgimportdevices.8_pregen ++++ b/man/vgimportdevices.8_pregen +@@ -86,6 +86,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -159,6 +161,16 @@ See \fBlvmsystemid\fP(7) for more information about foreign VGs. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/vgmerge.8_pregen b/man/vgmerge.8_pregen +index e229218..588d2ec 100644 +--- a/man/vgmerge.8_pregen ++++ b/man/vgmerge.8_pregen +@@ -59,6 +59,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -128,6 +130,16 @@ For testing and debugging. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB-l\fP|\fB--list\fP + .br + Display merged destination VG like vgdisplay -v. +diff --git a/man/vgmknodes.8_pregen b/man/vgmknodes.8_pregen +index 10f2359..df40528 100644 +--- a/man/vgmknodes.8_pregen ++++ b/man/vgmknodes.8_pregen +@@ -66,6 +66,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -135,6 +137,16 @@ Allows a command to continue with read-only metadata + operations after locking failures. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/vgreduce.8_pregen b/man/vgreduce.8_pregen +index 1509e4b..0fd4c5e 100644 +--- a/man/vgreduce.8_pregen ++++ b/man/vgreduce.8_pregen +@@ -32,6 +32,8 @@ vgreduce \(em Remove physical volume(s) from a volume group + .br + \fB-h\fP|\fB--help\fP + .br ++ \fB--journal\fP \fIString\fP ++.br + \fB--lockopt\fP \fIString\fP + .br + \fB--longhelp\fP +@@ -142,6 +144,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -222,6 +226,16 @@ Use with extreme caution. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/vgremove.8_pregen b/man/vgremove.8_pregen +index cf5c48c..e4b5a02 100644 +--- a/man/vgremove.8_pregen ++++ b/man/vgremove.8_pregen +@@ -67,6 +67,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -136,6 +138,16 @@ Use with extreme caution. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/vgrename.8_pregen b/man/vgrename.8_pregen +index 24ff247..f09bfd5 100644 +--- a/man/vgrename.8_pregen ++++ b/man/vgrename.8_pregen +@@ -85,6 +85,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -160,6 +162,16 @@ Use with extreme caution. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/vgs.8_pregen b/man/vgs.8_pregen +index ffb4ddc..817bea5 100644 +--- a/man/vgs.8_pregen ++++ b/man/vgs.8_pregen +@@ -102,6 +102,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -199,6 +201,16 @@ Allows a command to continue with read-only metadata + operations after locking failures. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/vgscan.8_pregen b/man/vgscan.8_pregen +index 959e161..86b7bc6 100644 +--- a/man/vgscan.8_pregen ++++ b/man/vgscan.8_pregen +@@ -59,6 +59,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -128,6 +130,16 @@ Allows a command to continue with read-only metadata + operations after locking failures. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +diff --git a/man/vgsplit.8_pregen b/man/vgsplit.8_pregen +index 8a0ae59..c32fc57 100644 +--- a/man/vgsplit.8_pregen ++++ b/man/vgsplit.8_pregen +@@ -102,6 +102,8 @@ Common options for lvm: + .br + [ \fB--driverloaded\fP \fBy\fP|\fBn\fP ] + .br ++[ \fB--journal\fP \fIString\fP ] ++.br + [ \fB--lockopt\fP \fIString\fP ] + .br + [ \fB--longhelp\fP ] +@@ -196,6 +198,16 @@ For testing and debugging. + Display help text. + . + .HP ++\fB--journal\fP \fIString\fP ++.br ++Record information in the systemd journal. ++This information is in addition to information ++enabled by the lvm.conf log/journal setting. ++command: record information about the command. ++output: record the default command output. ++debug: record full command debugging. ++. ++.HP + \fB--lockopt\fP \fIString\fP + .br + Used to pass options for special cases to lvmlockd. +-- +1.8.3.1 + diff --git a/SOURCES/0012-test-Fix-system_id-test.patch b/SOURCES/0012-test-Fix-system_id-test.patch new file mode 100644 index 0000000..06638e8 --- /dev/null +++ b/SOURCES/0012-test-Fix-system_id-test.patch @@ -0,0 +1,25 @@ +From 929e36ebfe991e01d6b341c5c8b4e6ad61cb26e2 Mon Sep 17 00:00:00 2001 +From: Marian Csontos +Date: Wed, 11 Aug 2021 19:19:19 +0200 +Subject: [PATCH] test: Fix system_id test + +--- + test/shell/system_id.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/shell/system_id.sh b/test/shell/system_id.sh +index 8b5638a..4dc167d 100644 +--- a/test/shell/system_id.sh ++++ b/test/shell/system_id.sh +@@ -38,7 +38,7 @@ check vg_field $vg1 systemid "$SID" + vgremove $vg1 + + # FIXME - print 'life' config data +-eval "$(lvmconfig global/etc 2>/dev/null || lvmconfig --type default global/etc)" ++eval "$({ lvmconfig global/etc 2>/dev/null || lvmconfig --type default global/etc; } | sed 's/^\s*#\s*//')" + + ## machineid + if [ -e "$etc/machine-id" ]; then +-- +1.8.3.1 + diff --git a/SOURCES/0013-vdo-fix-conversion-of-large-virtual-sizes.patch b/SOURCES/0013-vdo-fix-conversion-of-large-virtual-sizes.patch new file mode 100644 index 0000000..aa72bd0 --- /dev/null +++ b/SOURCES/0013-vdo-fix-conversion-of-large-virtual-sizes.patch @@ -0,0 +1,29 @@ +From 3ef5db8bdf488fcefb48af28eb843aa03175d4c5 Mon Sep 17 00:00:00 2001 +From: Zdenek Kabelac +Date: Mon, 30 Aug 2021 18:12:59 +0200 +Subject: [PATCH 1/3] vdo: fix conversion of large virtual sizes + +Properly accept virtual sizes above 2TiB. + +(cherry picked from commit 4afe872fd6c43fcfcd519c862574d010cdbda653) +(cherry picked from commit 70467e905cea0811c269faf7e84f24d4e1c758cc) +--- + tools/lvconvert.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/lvconvert.c b/tools/lvconvert.c +index 83dfe5c..d73e16e 100644 +--- a/tools/lvconvert.c ++++ b/tools/lvconvert.c +@@ -5428,7 +5428,7 @@ static int _lvconvert_to_vdopool_single(struct cmd_context *cmd, + return_0; + + lvc.virtual_extents = extents_from_size(cmd, +- arg_uint_value(cmd, virtualsize_ARG, 0), ++ arg_uint64_value(cmd, virtualsize_ARG, UINT64_C(0)), + vg->extent_size); + + if (!(lvc.segtype = get_segtype_from_string(cmd, SEG_TYPE_NAME_VDO))) +-- +1.8.3.1 + diff --git a/SOURCES/0014-vdo-read-new-sysfs-path.patch b/SOURCES/0014-vdo-read-new-sysfs-path.patch new file mode 100644 index 0000000..b965f5c --- /dev/null +++ b/SOURCES/0014-vdo-read-new-sysfs-path.patch @@ -0,0 +1,185 @@ +From e7b6438f17f5f2870477c0ebd2ff3ac7b02f6ca7 Mon Sep 17 00:00:00 2001 +From: Zdenek Kabelac +Date: Thu, 9 Sep 2021 14:59:38 +0200 +Subject: [PATCH 2/3] vdo: read new sysfs path + +New versions of kvdo module exposes statistics at new location: +/sys/block/dm-XXX/vdo/statistics/... + +Enhance lvm2 to access this location first. +Also if the statistic info is missing - make it 'debug' level info, +so it is not failing 'lvs' command. + +(cherry picked from commit e6f735d411e5911de186a610932c9bb9638275eb) + +Conflicts: + WHATS_NEW +--- + WHATS_NEW | 4 ++++ + lib/activate/dev_manager.c | 7 +++--- + lib/metadata/metadata-exported.h | 3 ++- + lib/metadata/vdo_manip.c | 46 ++++++++++++++++++++++------------------ + 4 files changed, 35 insertions(+), 25 deletions(-) + +diff --git a/WHATS_NEW b/WHATS_NEW +index d5c9669..958e745 100644 +--- a/WHATS_NEW ++++ b/WHATS_NEW +@@ -1,3 +1,7 @@ ++Version 2.03.14 - ++================================== ++ Support newer location for VDO statistics. ++ + Version 2.03.13 - 11th August 2021 + ================================== + Changes in udev support: +diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c +index c4a6739..0d954d1 100644 +--- a/lib/activate/dev_manager.c ++++ b/lib/activate/dev_manager.c +@@ -157,6 +157,7 @@ out: + + static int _get_segment_status_from_target_params(const char *target_name, + const char *params, ++ const struct dm_info *dminfo, + struct lv_seg_status *seg_status) + { + const struct lv_segment *seg = seg_status->seg; +@@ -216,7 +217,7 @@ static int _get_segment_status_from_target_params(const char *target_name, + return_0; + seg_status->type = SEG_STATUS_SNAPSHOT; + } else if (segtype_is_vdo_pool(segtype)) { +- if (!parse_vdo_pool_status(seg_status->mem, seg->lv, params, &seg_status->vdo_pool)) ++ if (!parse_vdo_pool_status(seg_status->mem, seg->lv, params, dminfo, &seg_status->vdo_pool)) + return_0; + seg_status->type = SEG_STATUS_VDO_POOL; + } else if (segtype_is_writecache(segtype)) { +@@ -320,7 +321,7 @@ static int _info_run(const char *dlid, struct dm_info *dminfo, + } while (target); + + if (!target_name || +- !_get_segment_status_from_target_params(target_name, target_params, seg_status)) ++ !_get_segment_status_from_target_params(target_name, target_params, dminfo, seg_status)) + stack; + } + +@@ -1886,7 +1887,7 @@ int dev_manager_vdo_pool_status(struct dev_manager *dm, + goto out; + } + +- if (!parse_vdo_pool_status(dm->mem, lv, params, *status)) ++ if (!parse_vdo_pool_status(dm->mem, lv, params, &info, *status)) + goto_out; + + (*status)->mem = dm->mem; +diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h +index 96a9533..7bac5b9 100644 +--- a/lib/metadata/metadata-exported.h ++++ b/lib/metadata/metadata-exported.h +@@ -1365,7 +1365,8 @@ const char *get_vdo_write_policy_name(enum dm_vdo_write_policy policy); + uint64_t get_vdo_pool_virtual_size(const struct lv_segment *vdo_pool_seg); + int update_vdo_pool_virtual_size(struct lv_segment *vdo_pool_seg); + int parse_vdo_pool_status(struct dm_pool *mem, const struct logical_volume *vdo_pool_lv, +- const char *params, struct lv_status_vdo *status); ++ const char *params, const struct dm_info *dminfo, ++ struct lv_status_vdo *status); + struct logical_volume *convert_vdo_pool_lv(struct logical_volume *data_lv, + const struct dm_vdo_target_params *vtp, + uint32_t *virtual_extents, +diff --git a/lib/metadata/vdo_manip.c b/lib/metadata/vdo_manip.c +index 3f2de1a..2917f29 100644 +--- a/lib/metadata/vdo_manip.c ++++ b/lib/metadata/vdo_manip.c +@@ -123,48 +123,56 @@ int update_vdo_pool_virtual_size(struct lv_segment *vdo_pool_seg) + return 1; + } + +-static int _sysfs_get_kvdo_value(const char *dm_name, const char *vdo_param, uint64_t *value) ++static int _sysfs_get_kvdo_value(const char *dm_name, const struct dm_info *dminfo, ++ const char *vdo_param, uint64_t *value) + { + char path[PATH_MAX]; + char temp[64]; + int fd, size, r = 0; + +- if (dm_snprintf(path, sizeof(path), "%skvdo/%s/%s", +- dm_sysfs_dir(), dm_name, vdo_param) < 0) { +- log_error("Failed to build kmod path."); ++ if (dm_snprintf(path, sizeof(path), "%s/block/dm-%d/vdo/%s", ++ dm_sysfs_dir(), dminfo->minor, vdo_param) < 0) { ++ log_debug("Failed to build kvdo path."); + return 0; + } + + if ((fd = open(path, O_RDONLY)) < 0) { +- if (errno != ENOENT) +- log_sys_error("open", path); +- else ++ /* try with older location */ ++ if (dm_snprintf(path, sizeof(path), "%skvdo/%s/%s", ++ dm_sysfs_dir(), dm_name, vdo_param) < 0) { ++ log_debug("Failed to build kvdo path."); ++ return 0; ++ } ++ ++ if ((fd = open(path, O_RDONLY)) < 0) { + log_sys_debug("open", path); +- goto bad; ++ goto bad; ++ } + } + + if ((size = read(fd, temp, sizeof(temp) - 1)) < 0) { +- log_sys_error("read", path); ++ log_sys_debug("read", path); + goto bad; + } + temp[size] = 0; + errno = 0; + *value = strtoll(temp, NULL, 0); + if (errno) { +- log_sys_error("strtool", path); ++ log_sys_debug("strtool", path); + goto bad; + } + + r = 1; + bad: + if (fd >= 0 && close(fd)) +- log_sys_error("close", path); ++ log_sys_debug("close", path); + + return r; + } + + int parse_vdo_pool_status(struct dm_pool *mem, const struct logical_volume *vdo_pool_lv, +- const char *params, struct lv_status_vdo *status) ++ const char *params, const struct dm_info *dminfo, ++ struct lv_status_vdo *status) + { + struct dm_vdo_status_parse_result result; + char *dm_name; +@@ -188,15 +196,11 @@ int parse_vdo_pool_status(struct dm_pool *mem, const struct logical_volume *vdo_ + + status->vdo = result.status; + +- if (result.status->operating_mode == DM_VDO_MODE_NORMAL) { +- if (!_sysfs_get_kvdo_value(dm_name, "statistics/data_blocks_used", +- &status->data_blocks_used)) +- return_0; +- +- if (!_sysfs_get_kvdo_value(dm_name, "statistics/logical_blocks_used", +- &status->logical_blocks_used)) +- return_0; +- ++ if ((result.status->operating_mode == DM_VDO_MODE_NORMAL) && ++ _sysfs_get_kvdo_value(dm_name, dminfo, "statistics/data_blocks_used", ++ &status->data_blocks_used) && ++ _sysfs_get_kvdo_value(dm_name, dminfo, "statistics/logical_blocks_used", ++ &status->logical_blocks_used)) { + status->usage = dm_make_percent(result.status->used_blocks, + result.status->total_blocks); + status->saving = dm_make_percent(status->logical_blocks_used - status->data_blocks_used, +-- +1.8.3.1 + diff --git a/SOURCES/0015-tests-check-lvm2-parses-vdo-statistics.patch b/SOURCES/0015-tests-check-lvm2-parses-vdo-statistics.patch new file mode 100644 index 0000000..81ba5a1 --- /dev/null +++ b/SOURCES/0015-tests-check-lvm2-parses-vdo-statistics.patch @@ -0,0 +1,26 @@ +From 7bca889c8921d6d76395a6ecd7ba9c4c46cf51ec Mon Sep 17 00:00:00 2001 +From: Zdenek Kabelac +Date: Thu, 9 Sep 2021 15:22:20 +0200 +Subject: [PATCH 3/3] tests: check lvm2 parses vdo statistics + +(cherry picked from commit bd2dae464386033241afa35934cdeddfe47f6a77) +(cherry picked from commit 155d8c55086b09528de799425e77f7aeafd9b165) +--- + test/shell/lvcreate-vdo.sh | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/test/shell/lvcreate-vdo.sh b/test/shell/lvcreate-vdo.sh +index d66e353..5b370fb 100644 +--- a/test/shell/lvcreate-vdo.sh ++++ b/test/shell/lvcreate-vdo.sh +@@ -47,6 +47,7 @@ fi + check lv_field $vg/$lv1 size "<1.24g" + check lv_field $vg/${lv2} size "4.00g" + check lv_field $vg/${lv2}_vdata size "4.00g" ++check lv_field $vg/${lv1} data_percent "0.00" + lvremove -ff $vg + + +-- +1.8.3.1 + diff --git a/SOURCES/0016-filters-fix-memleak-on-mpath-filter-destroy.patch b/SOURCES/0016-filters-fix-memleak-on-mpath-filter-destroy.patch new file mode 100644 index 0000000..9e9079a --- /dev/null +++ b/SOURCES/0016-filters-fix-memleak-on-mpath-filter-destroy.patch @@ -0,0 +1,40 @@ +From 4d5df2d0bc0978d0eac6f8700b89ac4f80fdd914 Mon Sep 17 00:00:00 2001 +From: Zdenek Kabelac +Date: Sun, 12 Sep 2021 16:13:27 +0200 +Subject: [PATCH] filters: fix memleak on mpath filter destroy + +Missing free() leaks filter structure. + +(cherry picked from commit 30050769b1490e293d9e0f7ed37d83c3e56bb6b3) +--- + WHATS_NEW | 1 + + lib/filters/filter-mpath.c | 2 ++ + 2 files changed, 3 insertions(+) + +diff --git a/WHATS_NEW b/WHATS_NEW +index 958e745..91cfc52 100644 +--- a/WHATS_NEW ++++ b/WHATS_NEW +@@ -1,5 +1,6 @@ + Version 2.03.14 - + ================================== ++ Fix memleak in mpath filter. + Support newer location for VDO statistics. + + Version 2.03.13 - 11th August 2021 +diff --git a/lib/filters/filter-mpath.c b/lib/filters/filter-mpath.c +index 982e234..7644a5b 100644 +--- a/lib/filters/filter-mpath.c ++++ b/lib/filters/filter-mpath.c +@@ -37,6 +37,8 @@ static void _destroy(struct dev_filter *f) + { + if (f->use_count) + log_error(INTERNAL_ERROR "Destroying mpath filter while in use %u times.", f->use_count); ++ ++ free(f); + } + + struct dev_filter *mpath_filter_create(struct dev_types *dt) +-- +1.8.3.1 + diff --git a/SOURCES/lvm2-set-default-preferred_names.patch b/SOURCES/lvm2-set-default-preferred_names.patch new file mode 100644 index 0000000..a94a58f --- /dev/null +++ b/SOURCES/lvm2-set-default-preferred_names.patch @@ -0,0 +1,33 @@ + conf/example.conf.in | 5 +++-- + lib/config/config_settings.h | 2 +- + 2 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/conf/example.conf.in b/conf/example.conf.in +index b4a55ae..aaf73a4 100644 +--- a/conf/example.conf.in ++++ b/conf/example.conf.in +@@ -121,8 +121,9 @@ devices { + # + # Example + # preferred_names = [ "^/dev/mpath/", "^/dev/mapper/mpath", "^/dev/[hs]d" ] +- # +- # This configuration option does not have a default value defined. ++ # ++ # This configuration option has an automatic default value. ++ # preferred_names = [ "^/dev/mpath/", "^/dev/mapper/mpath", "^/dev/[hs]d" ] + + # Configuration option devices/use_devicesfile. + # Enable or disable the use of a devices file. +diff --git a/lib/config/config_settings.h b/lib/config/config_settings.h +index 980fce6..9af8254 100644 +--- a/lib/config/config_settings.h ++++ b/lib/config/config_settings.h +@@ -269,7 +269,7 @@ cfg(devices_hints_CFG, "hints", devices_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_ + " Use no hints.\n" + "#\n") + +-cfg_array(devices_preferred_names_CFG, "preferred_names", devices_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING, NULL, vsn(1, 2, 19), NULL, 0, NULL, ++cfg_array(devices_preferred_names_CFG, "preferred_names", devices_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, "#S^/dev/mpath/#S^/dev/mapper/mpath#S^/dev/[hs]d", vsn(1, 2, 19), NULL, 0, NULL, + "Select which path name to display for a block device.\n" + "If multiple path names exist for a block device, and LVM needs to\n" + "display a name for the device, the path names are matched against\n" diff --git a/SPECS/lvm2.spec b/SPECS/lvm2.spec new file mode 100644 index 0000000..89b0e23 --- /dev/null +++ b/SPECS/lvm2.spec @@ -0,0 +1,5074 @@ +%global device_mapper_version 1.02.179 + +%global enable_cache 1 +%global enable_lvmdbusd 1 +%global enable_lvmlockd 1 +%global enable_lvmpolld 1 +%global enable_thin 1 +%global enable_dmfilemapd 1 +%global enable_testsuite 1 +%global enable_vdo 1 +%global enable_writecache 1 +%global enable_integrity 1 + +%global system_release_version 23 +%global systemd_version 247-1 +%global dracut_version 002-18 +%global util_linux_version 2.24 +%global bash_version 4.0 +%global corosync_version 1.99.9-1 +%global resource_agents_version 3.9.5-12 +%global dlm_version 4.0.6-1 +%global libselinux_version 1.30.19-4 +%global persistent_data_version 0.7.0-0.1.rc6 +%global sanlock_version 3.3.0-2 + +%global enable_lockd_sanlock %{enable_lvmlockd} +%global enable_lockd_dlm %{enable_lvmlockd} + +%if 0%{?rhel} && 0%{?rhel} <= 8 + %ifnarch i686 x86_64 ppc64le s390x + %global enable_lockd_dlm 0 + %endif + + %ifnarch x86_64 ppc64 aarch64 + %global enable_lockd_sanlock 0 + %endif +%endif + +# Do not reset Release to 1 unless both lvm2 and device-mapper +# versions are increased together. + +Summary: Userland logical volume management tools +Name: lvm2 +%if 0%{?rhel} +Epoch: %{rhel} +%endif +Version: 2.03.13 +Release: 2%{?dist} +License: GPLv2 +URL: http://sourceware.org/lvm2 +Source0: ftp://sourceware.org/pub/lvm2/releases/LVM2.%{version}.tgz +Patch1: lvm2-set-default-preferred_names.patch +Patch2: 0001-config-comment-all-default-settings.patch +Patch3: 0002-config-change-default-use_devicesfile-to-1.patch +Patch4: 0003-system_id-new-appmachineid-option.patch +Patch5: 0004-pvscan-add-options-listlvs-listvg-checkcomplete.patch +Patch6: 0005-logging-to-the-systemd-journal.patch +Patch7: 0006-new-udev-autoactivation.patch +Patch8: 0007-configure-update.patch +Patch9: 0008-add-dracut-files.patch +Patch10: 0009-lvmdbusd-Use-ID_FS_TYPE-UDev-property-in-udevwatch.patch +Patch11: 0010-udev-vgchange-skip-hints-and-keep-transient-service-.patch +Patch12: 0011-make-generate.patch +Patch13: 0012-test-Fix-system_id-test.patch +# 8.5 ex+ BZ 1996227: +Patch14: 0013-vdo-fix-conversion-of-large-virtual-sizes.patch +# BZ 1999568: +Patch15: 0014-vdo-read-new-sysfs-path.patch +Patch16: 0015-tests-check-lvm2-parses-vdo-statistics.patch +Patch17: 0016-filters-fix-memleak-on-mpath-filter-destroy.patch + +BuildRequires: make +BuildRequires: gcc +%if %{enable_testsuite} +BuildRequires: gcc-c++ +%endif +BuildRequires: libselinux-devel >= %{libselinux_version}, libsepol-devel +BuildRequires: libblkid-devel >= %{util_linux_version} +BuildRequires: ncurses-devel +BuildRequires: libedit-devel +BuildRequires: libaio-devel +%if %{enable_lockd_dlm} +BuildRequires: dlm-devel >= %{dlm_version} +%endif +BuildRequires: module-init-tools +BuildRequires: pkgconfig +BuildRequires: systemd-devel +BuildRequires: systemd-units +%if %{enable_lvmdbusd} +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-dbus +BuildRequires: python3-pyudev +%endif +%if %{enable_thin} || %{enable_cache} +BuildRequires: device-mapper-persistent-data >= %{persistent_data_version} +%endif +%if %{enable_lockd_sanlock} +BuildRequires: sanlock-devel >= %{sanlock_version} +%endif +Requires: %{name}-libs = %{?epoch}:%{version}-%{release} +%if 0%{?fedora} +Requires: system-release >= %{system_release_version} +%endif +Requires: bash >= %{bash_version} +Requires(post): systemd-units >= %{systemd_version}, systemd-sysv +Requires(preun): systemd-units >= %{systemd_version} +Requires(postun): systemd-units >= %{systemd_version} +Requires: module-init-tools +%if %{enable_thin} || %{enable_cache} +Requires: device-mapper-persistent-data >= %{persistent_data_version} +%endif + +%description +LVM2 includes all of the support for handling read/write operations on +physical volumes (hard disks, RAID-Systems, magneto optical, etc., +multiple devices (MD), see mdadm(8) or even loop devices, see +losetup(8)), creating volume groups (kind of virtual disks) from one +or more physical volumes and creating one or more logical volumes +(kind of logical partitions) in volume groups. + +%prep +%setup -q -n LVM2.%{version} +%patch1 -p1 -b .backup1 +%patch2 -p1 -b .backup2 +%patch3 -p1 -b .backup3 +%patch4 -p1 -b .backup4 +%patch5 -p1 -b .backup5 +%patch6 -p1 -b .backup6 +%patch7 -p1 -b .backup7 +%patch8 -p1 -b .backup8 +%patch9 -p1 -b .backup9 +%patch10 -p1 -b .backup10 +%patch11 -p1 -b .backup11 +%patch12 -p1 -b .backup12 +%patch13 -p1 -b .backup13 +%patch14 -p1 -b .backup14 +%patch15 -p1 -b .backup15 +%patch16 -p1 -b .backup16 +%patch17 -p1 -b .backup17 + +%build +%global _default_pid_dir /run +%global _default_dm_run_dir /run +%global _default_run_dir /run/lvm +%global _default_locking_dir /run/lock/lvm + +%global _udevdir %{_prefix}/lib/udev/rules.d + +%configure \ + --with-default-dm-run-dir=%{_default_dm_run_dir} \ + --with-default-run-dir=%{_default_run_dir} \ + --with-default-pid-dir=%{_default_pid_dir} \ + --with-default-locking-dir=%{_default_locking_dir} \ + --with-usrlibdir=%{_libdir} \ + --enable-fsadm \ + --enable-write_install \ + --with-user= \ + --with-group= \ + --with-device-uid=0 \ + --with-device-gid=6 \ + --with-device-mode=0660 \ + --enable-pkgconfig \ + --enable-cmdlib \ + --enable-dmeventd \ + --enable-blkid_wiping \ + --with-udevdir=%{_udevdir} --enable-udev_sync \ +%if %{enable_thin} + --with-thin=internal \ +%endif +%if %{enable_cache} + --with-cache=internal \ +%endif +%if %{enable_lvmpolld} + --enable-lvmpolld \ +%endif +%if %{enable_lockd_dlm} + --enable-lvmlockd-dlm --enable-lvmlockd-dlmcontrol \ +%endif +%if %{enable_lockd_sanlock} + --enable-lvmlockd-sanlock \ +%endif +%if %{enable_lvmdbusd} + --enable-dbus-service --enable-notify-dbus \ +%endif +%if %{enable_dmfilemapd} + --enable-dmfilemapd \ +%endif +%if %{enable_writecache} + --with-writecache=internal \ +%endif +%if %{enable_vdo} + --with-vdo=internal --with-vdo-format=%{_bindir}/vdoformat \ +%endif +%if %{enable_integrity} + --with-integrity=internal \ +%endif + --disable-silent-rules \ + --enable-app-machineid \ + --enable-editline \ + --disable-readline + +%make_build + +%install +%make_install +make install_system_dirs DESTDIR=$RPM_BUILD_ROOT +make install_systemd_units DESTDIR=$RPM_BUILD_ROOT +make install_systemd_generators DESTDIR=$RPM_BUILD_ROOT +make install_tmpfiles_configuration DESTDIR=$RPM_BUILD_ROOT +%if %{enable_testsuite} +%make_install -C test +%endif + +%post +%systemd_post blk-availability.service lvm2-monitor.service +if [ "$1" = "1" ] ; then + # FIXME: what to do with this? We do not want to start it in a container/chroot + # enable and start lvm2-monitor.service on completely new installation only, not on upgrades + systemctl enable lvm2-monitor.service + systemctl start lvm2-monitor.service >/dev/null 2>&1 || : +fi + +%if %{enable_lvmpolld} +%systemd_post lvm2-lvmpolld.socket +# lvm2-lvmpolld socket is always enabled and started and ready to serve if lvmpolld is used +# replace direct systemctl calls with systemd rpm macro once this is provided in the macro: +# http://cgit.freedesktop.org/systemd/systemd/commit/?id=57ab2eabb8f92fad5239c7d4492e9c6e23ee0678 +systemctl enable lvm2-lvmpolld.socket +systemctl start lvm2-lvmpolld.socket >/dev/null 2>&1 || : +%endif + +%preun +%systemd_preun blk-availability.service lvm2-monitor.service + +%if %{enable_lvmpolld} +%systemd_preun lvm2-lvmpolld.service lvm2-lvmpolld.socket +%endif + +%postun +%systemd_postun lvm2-monitor.service + +%if %{enable_lvmpolld} +%systemd_postun_with_restart lvm2-lvmpolld.service +%endif + +%triggerun -- %{name} < 2.02.86-2 +%{_bindir}/systemd-sysv-convert --save lvm2-monitor >/dev/null 2>&1 || : +/bin/systemctl --no-reload enable lvm2-monitor.service > /dev/null 2>&1 || : +/sbin/chkconfig --del lvm2-monitor > /dev/null 2>&1 || : +/bin/systemctl try-restart lvm2-monitor.service > /dev/null 2>&1 || : + +%files +%{!?_licensedir:%global license %%doc} +%license COPYING COPYING.LIB +%doc README VERSION WHATS_NEW +%doc doc/lvm_fault_handling.txt + +# Main binaries +%defattr(555,root,root,-) +%{_sbindir}/fsadm +%{_sbindir}/lvm +%{_sbindir}/lvmconfig +%{_sbindir}/lvmdevices +%{_sbindir}/lvmdump +%if %{enable_lvmpolld} +%{_sbindir}/lvmpolld +%endif +%{_sbindir}/vdoimport + +# Other files +%defattr(444,root,root,-) +%{_sbindir}/lvchange +%{_sbindir}/lvconvert +%{_sbindir}/lvcreate +%{_sbindir}/lvdisplay +%{_sbindir}/lvextend +%{_sbindir}/lvmdiskscan +%{_sbindir}/lvmsadc +%{_sbindir}/lvmsar +%{_sbindir}/lvreduce +%{_sbindir}/lvremove +%{_sbindir}/lvrename +%{_sbindir}/lvresize +%{_sbindir}/lvs +%{_sbindir}/lvscan +%{_sbindir}/pvchange +%{_sbindir}/pvck +%{_sbindir}/pvcreate +%{_sbindir}/pvdisplay +%{_sbindir}/pvmove +%{_sbindir}/pvremove +%{_sbindir}/pvresize +%{_sbindir}/pvs +%{_sbindir}/pvscan +%{_sbindir}/vgcfgbackup +%{_sbindir}/vgcfgrestore +%{_sbindir}/vgchange +%{_sbindir}/vgck +%{_sbindir}/vgconvert +%{_sbindir}/vgcreate +%{_sbindir}/vgdisplay +%{_sbindir}/vgexport +%{_sbindir}/vgextend +%{_sbindir}/vgimport +%{_sbindir}/vgimportclone +%{_sbindir}/vgimportdevices +%{_sbindir}/vgmerge +%{_sbindir}/vgmknodes +%{_sbindir}/vgreduce +%{_sbindir}/vgremove +%{_sbindir}/vgrename +%{_sbindir}/vgs +%{_sbindir}/vgscan +%{_sbindir}/vgsplit +%{_mandir}/man5/lvm.conf.5.gz +%{_mandir}/man7/lvmcache.7.gz +%{_mandir}/man7/lvmraid.7.gz +%{_mandir}/man7/lvmreport.7.gz +%{_mandir}/man7/lvmthin.7.gz +%{_mandir}/man7/lvmvdo.7.gz +%{_mandir}/man7/lvmsystemid.7.gz +%{_mandir}/man8/fsadm.8.gz +%{_mandir}/man8/lvchange.8.gz +%{_mandir}/man8/lvconvert.8.gz +%{_mandir}/man8/lvcreate.8.gz +%{_mandir}/man8/lvdisplay.8.gz +%{_mandir}/man8/lvextend.8.gz +%{_mandir}/man8/lvm.8.gz +%{_mandir}/man8/lvm2-activation-generator.8.gz +%{_mandir}/man8/lvm-config.8.gz +%{_mandir}/man8/lvmconfig.8.gz +%{_mandir}/man8/lvmdevices.8.gz +%{_mandir}/man8/lvm-dumpconfig.8.gz +%{_mandir}/man8/lvmdiskscan.8.gz +%{_mandir}/man8/lvmdump.8.gz +%{_mandir}/man8/lvm-fullreport.8.gz +%{_mandir}/man8/lvmsadc.8.gz +%{_mandir}/man8/lvmsar.8.gz +%{_mandir}/man8/lvreduce.8.gz +%{_mandir}/man8/lvremove.8.gz +%{_mandir}/man8/lvrename.8.gz +%{_mandir}/man8/lvresize.8.gz +%{_mandir}/man8/lvs.8.gz +%{_mandir}/man8/lvscan.8.gz +%{_mandir}/man8/pvchange.8.gz +%{_mandir}/man8/pvck.8.gz +%{_mandir}/man8/pvcreate.8.gz +%{_mandir}/man8/pvdisplay.8.gz +%{_mandir}/man8/pvmove.8.gz +%{_mandir}/man8/pvremove.8.gz +%{_mandir}/man8/pvresize.8.gz +%{_mandir}/man8/pvs.8.gz +%{_mandir}/man8/pvscan.8.gz +%{_mandir}/man8/vdoimport.8.gz +%{_mandir}/man8/vgcfgbackup.8.gz +%{_mandir}/man8/vgcfgrestore.8.gz +%{_mandir}/man8/vgchange.8.gz +%{_mandir}/man8/vgck.8.gz +%{_mandir}/man8/vgconvert.8.gz +%{_mandir}/man8/vgcreate.8.gz +%{_mandir}/man8/vgdisplay.8.gz +%{_mandir}/man8/vgexport.8.gz +%{_mandir}/man8/vgextend.8.gz +%{_mandir}/man8/vgimport.8.gz +%{_mandir}/man8/vgimportclone.8.gz +%{_mandir}/man8/vgimportdevices.8.gz +%{_mandir}/man8/vgmerge.8.gz +%{_mandir}/man8/vgmknodes.8.gz +%{_mandir}/man8/vgreduce.8.gz +%{_mandir}/man8/vgremove.8.gz +%{_mandir}/man8/vgrename.8.gz +%{_mandir}/man8/vgs.8.gz +%{_mandir}/man8/vgscan.8.gz +%{_mandir}/man8/vgsplit.8.gz +%{_udevdir}/11-dm-lvm.rules +%{_udevdir}/69-dm-lvm.rules +%if %{enable_lvmpolld} +%{_mandir}/man8/lvmpolld.8.gz +%{_mandir}/man8/lvm-lvpoll.8.gz +%endif +%dir %{_sysconfdir}/lvm +%ghost %{_sysconfdir}/lvm/cache/.cache +%attr(644, -, -) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/lvm/lvm.conf +%attr(644, -, -) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/lvm/lvmlocal.conf +%dir %{_sysconfdir}/lvm/profile +%{_sysconfdir}/lvm/profile/command_profile_template.profile +%{_sysconfdir}/lvm/profile/metadata_profile_template.profile +%{_sysconfdir}/lvm/profile/thin-generic.profile +%{_sysconfdir}/lvm/profile/thin-performance.profile +%{_sysconfdir}/lvm/profile/cache-mq.profile +%{_sysconfdir}/lvm/profile/cache-smq.profile +%{_sysconfdir}/lvm/profile/lvmdbusd.profile +%if %{enable_vdo} +%{_sysconfdir}/lvm/profile/vdo-small.profile +%endif +%dir %{_sysconfdir}/lvm/backup +%dir %{_sysconfdir}/lvm/cache +%dir %{_sysconfdir}/lvm/archive +%dir %{_default_locking_dir} +%dir %{_default_run_dir} +%{_tmpfilesdir}/%{name}.conf +%{_unitdir}/blk-availability.service +%{_unitdir}/lvm2-monitor.service +#%{_unitdir}/lvm-vgchange@.service +%attr(555, -, -) %{_prefix}/lib/systemd/system-generators/lvm2-activation-generator +%if %{enable_lvmpolld} +%{_unitdir}/lvm2-lvmpolld.socket +%{_unitdir}/lvm2-lvmpolld.service +%endif + +############################################################################## +# Library and Development subpackages +############################################################################## +%package devel +Summary: Development libraries and headers +License: LGPLv2 +Requires: %{name} = %{?epoch}:%{version}-%{release} +Requires: device-mapper-devel = %{?epoch}:%{device_mapper_version}-%{release} +Requires: device-mapper-event-devel = %{?epoch}:%{device_mapper_version}-%{release} +Requires: pkgconfig + +%description devel +This package contains files needed to develop applications that use +the lvm2 libraries. + +%files devel +%defattr(444,root,root,-) +%{_libdir}/liblvm2cmd.so +%{_libdir}/libdevmapper-event-lvm2.so +%{_includedir}/lvm2cmd.h + +%package libs +Summary: Shared libraries for lvm2 +License: LGPLv2 +Requires: device-mapper-event = %{?epoch}:%{device_mapper_version}-%{release} + +%description libs +This package contains shared lvm2 libraries for applications. + +%ldconfig_scriptlets libs + +%files libs +%{!?_licensedir:%global license %%doc} +%license COPYING.LIB +%defattr(555,root,root,-) +%{_libdir}/liblvm2cmd.so.* +%{_libdir}/libdevmapper-event-lvm2.so.* +%dir %{_libdir}/device-mapper +%{_libdir}/device-mapper/libdevmapper-event-lvm2mirror.so +%{_libdir}/device-mapper/libdevmapper-event-lvm2snapshot.so +%{_libdir}/device-mapper/libdevmapper-event-lvm2raid.so +%{_libdir}/libdevmapper-event-lvm2mirror.so +%{_libdir}/libdevmapper-event-lvm2snapshot.so +%{_libdir}/libdevmapper-event-lvm2raid.so + +%if %{enable_thin} +%{_libdir}/libdevmapper-event-lvm2thin.so +%{_libdir}/device-mapper/libdevmapper-event-lvm2thin.so +%endif + +%{_libdir}/libdevmapper-event-lvm2vdo.so +%{_libdir}/device-mapper/libdevmapper-event-lvm2vdo.so + +############################################################################## +# LVM locking daemon +############################################################################## +%if %{enable_lockd_dlm} || %{enable_lockd_sanlock} +%package lockd +Summary: LVM locking daemon +Requires: lvm2 = %{?epoch}:%{version}-%{release} +%if %{enable_lockd_sanlock} +Requires: sanlock-lib >= %{sanlock_version} +%endif +%if %{enable_lockd_dlm} +Requires: dlm-lib >= %{dlm_version} +%endif +Requires(post): systemd-units >= %{systemd_version} +Requires(preun): systemd-units >= %{systemd_version} +Requires(postun): systemd-units >= %{systemd_version} + +%description lockd + +LVM commands use lvmlockd to coordinate access to shared storage. + +%post lockd +%systemd_post lvmlockd.service lvmlocks.service + +%preun lockd +%systemd_preun lvmlockd.service lvmlocks.service + +%postun lockd +%systemd_postun lvmlockd.service lvmlocks.service + +%files lockd +%defattr(444,root,root,-) +%%attr(555, -, -) %{_sbindir}/lvmlockd +%%attr(555, -, -) %{_sbindir}/lvmlockctl +%{_mandir}/man8/lvmlockd.8.gz +%{_mandir}/man8/lvmlockctl.8.gz +%{_unitdir}/lvmlockd.service +%{_unitdir}/lvmlocks.service + +%endif + +############################################################################## +# LVM D-Bus daemon +############################################################################## +%if %{enable_lvmdbusd} + +%package dbusd +Summary: LVM2 D-Bus daemon +License: GPLv2 +BuildArch: noarch +Requires: lvm2 >= %{?epoch}:%{version}-%{release} +Requires: dbus +Requires: python3-dbus +Requires: python3-pyudev +Requires: python3-gobject-base +Requires(post): systemd-units >= %{systemd_version} +Requires(preun): systemd-units >= %{systemd_version} +Requires(postun): systemd-units >= %{systemd_version} + +%description dbusd + +Daemon for access to LVM2 functionality through a D-Bus interface. + +%post dbusd +%systemd_post lvm2-lvmdbusd.service + +%preun dbusd +%systemd_preun lvm2-lvmdbusd.service + +%postun dbusd +%systemd_postun lvm2-lvmdbusd.service + +%files dbusd +%defattr(555,root,root,-) +%{_sbindir}/lvmdbusd +%defattr(444,root,root,-) +%{_sysconfdir}/dbus-1/system.d/com.redhat.lvmdbus1.conf +%{_datadir}/dbus-1/system-services/com.redhat.lvmdbus1.service +%{_mandir}/man8/lvmdbusd.8.gz +%{_unitdir}/lvm2-lvmdbusd.service +%{python3_sitelib}/lvmdbusd/* + +%endif + +############################################################################## +# Device-mapper subpackages +############################################################################## +%package -n device-mapper +Summary: Device mapper utility +Version: %{device_mapper_version} +License: GPLv2 +URL: http://sources.redhat.com/dm +Requires: device-mapper-libs = %{?epoch}:%{device_mapper_version}-%{release} +Requires: util-linux >= %{util_linux_version} +Requires: systemd >= %{systemd_version} +# We need dracut to install required udev rules if udev_sync +# feature is turned on so we don't lose required notifications. +Conflicts: dracut < %{dracut_version} + +%description -n device-mapper +This package contains the supporting userspace utility, dmsetup, +for the kernel device-mapper. + +%files -n device-mapper +%{!?_licensedir:%global license %%doc} +%license COPYING COPYING.LIB +%doc WHATS_NEW_DM VERSION_DM README +%doc udev/12-dm-permissions.rules +%defattr(444,root,root,-) +%attr(555, -, -) %{_sbindir}/dmsetup +%attr(555, -, -) %{_sbindir}/blkdeactivate +%attr(555, -, -) %{_sbindir}/dmstats +%{_mandir}/man8/dmsetup.8.gz +%{_mandir}/man8/dmstats.8.gz +%{_mandir}/man8/blkdeactivate.8.gz +%if %{enable_dmfilemapd} +%attr(555, -, -) %{_sbindir}/dmfilemapd +%{_mandir}/man8/dmfilemapd.8.gz +%endif +%{_udevdir}/10-dm.rules +%{_udevdir}/13-dm-disk.rules +%{_udevdir}/95-dm-notify.rules + +%package -n device-mapper-devel +Summary: Development libraries and headers for device-mapper +Version: %{device_mapper_version} +License: LGPLv2 +Requires: device-mapper = %{?epoch}:%{device_mapper_version}-%{release} +Requires: pkgconfig + +%description -n device-mapper-devel +This package contains files needed to develop applications that use +the device-mapper libraries. + +%files -n device-mapper-devel +%defattr(444,root,root,-) +%{_libdir}/libdevmapper.so +%{_includedir}/libdevmapper.h +%{_libdir}/pkgconfig/devmapper.pc + +%package -n device-mapper-libs +Summary: Device-mapper shared library +Version: %{device_mapper_version} +License: LGPLv2 +Requires: device-mapper = %{?epoch}:%{device_mapper_version}-%{release} + +%description -n device-mapper-libs +This package contains the device-mapper shared library, libdevmapper. + +%ldconfig_scriptlets -n device-mapper-libs + +%files -n device-mapper-libs +%{!?_licensedir:%global license %%doc} +%license COPYING COPYING.LIB +%defattr(555,root,root,-) +%{_libdir}/libdevmapper.so.* + +%package -n device-mapper-event +Summary: Device-mapper event daemon +Version: %{device_mapper_version} +Requires: device-mapper = %{?epoch}:%{device_mapper_version}-%{release} +Requires: device-mapper-event-libs = %{?epoch}:%{device_mapper_version}-%{release} +Requires(post): systemd-units +Requires(preun): systemd-units +Requires(postun): systemd-units + +%description -n device-mapper-event +This package contains the dmeventd daemon for monitoring the state +of device-mapper devices. + +%post -n device-mapper-event +%systemd_post dm-event.socket +# dm-event.socket is always enabled and started and ready to serve if dmeventd is used +# replace direct systemctl calls with systemd rpm macro once this is provided in the macro: +# http://cgit.freedesktop.org/systemd/systemd/commit/?id=57ab2eabb8f92fad5239c7d4492e9c6e23ee0678 +systemctl enable dm-event.socket +systemctl start dm-event.socket >/dev/null 2>&1 || : +if [ -e %{_default_pid_dir}/dmeventd.pid ]; then + %{_sbindir}/dmeventd -R || echo "Failed to restart dmeventd daemon. Please, try manual restart." +fi + +%preun -n device-mapper-event +%systemd_preun dm-event.service dm-event.socket + +%files -n device-mapper-event +%defattr(444,root,root,-) +%attr(555, -, -) %{_sbindir}/dmeventd +%{_mandir}/man8/dmeventd.8.gz +%{_unitdir}/dm-event.socket +%{_unitdir}/dm-event.service + +%package -n device-mapper-event-libs +Summary: Device-mapper event daemon shared library +Version: %{device_mapper_version} +License: LGPLv2 + +%description -n device-mapper-event-libs +This package contains the device-mapper event daemon shared library, +libdevmapper-event. + +%ldconfig_scriptlets -n device-mapper-event-libs + +%files -n device-mapper-event-libs +%{!?_licensedir:%global license %%doc} +%license COPYING.LIB +%defattr(555,root,root,-) +%{_libdir}/libdevmapper-event.so.* + +%package -n device-mapper-event-devel +Summary: Development libraries and headers for the device-mapper event daemon +Version: %{device_mapper_version} +License: LGPLv2 +Requires: device-mapper-event = %{?epoch}:%{device_mapper_version}-%{release} +Requires: pkgconfig + +%description -n device-mapper-event-devel +This package contains files needed to develop applications that use +the device-mapper event library. + +%files -n device-mapper-event-devel +%defattr(444,root,root,-) +%{_libdir}/libdevmapper-event.so +%{_includedir}/libdevmapper-event.h +%{_libdir}/pkgconfig/devmapper-event.pc + +############################################################################## +# Testsuite +############################################################################## +%if %{enable_testsuite} +%package testsuite +Summary: LVM2 Testsuite +# Most of the code is GPLv2, the harness in test/lib/{brick-shelltest.h,runner.cpp} is BSD, and C files in test/api are LGPLv2... +License: LGPLv2 and GPLv2 and BSD-2-Clause + +%description testsuite +An extensive functional testsuite for LVM2. + +%files testsuite +%license COPYING COPYING.LIB COPYING.BSD +%{_datadir}/lvm2-testsuite/ +%{_libexecdir}/lvm2-testsuite/ +%{_bindir}/lvm2-testsuite +%endif + +%changelog +* Fri Sep 17 2021 Marian Csontos - 2.03.13-2 +- Fix VDO module compatibility issue. + +* Wed Aug 11 2021 Marian Csontos - 2.03.13-1 +- Update to upstream version 2.03.13. +- Change in obtain_devices_list_from_udev default. +- See WHATS_NEW and WHATS_NEW_DM for more information. + +* Mon Aug 09 2021 Mohan Boddu - 8:2.03.12-4 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Mon May 24 2021 Marian Csontos - 2.03.12-2 +- Fix dependency on newer systemd package than available. + +* Fri May 14 2021 Marian Csontos - 2.03.12-1 +- Update to upstream version 2.03.12. +- See WHATS_NEW and WHATS_NEW_DM for more information. + +* Fri Apr 16 2021 Mohan Boddu - 8:2.03.11-2 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Mon Feb 22 2021 Marian Csontos - 2.03.11-1 +- Fix mpath filtering of NVMe devices. +- Check if lvcreate passes read_only_volume_list with tags and skips zeroing. +- Limit pool metadata spare to 16GiB. +- Improves conversion and allocation of pool metadata. +- Fix different limits used for metadata by lvm2 and thin-tools. +- Fix interrupting lvconvert --splitcache command with striped origin volumes. +- Fix problem with wiping of converted LVs. +- Fix memleak in scanning. +- Fix corner case allocation for thin-pools. +- Fix pvck handling MDA at offset different from 4096. +- Partial or degraded activation of writecache is not allowed. +- Enhance error handling in fsadm and handle correct fsck result. +- Dmeventd lvm plugin ignores higher reserved_stack lvm.conf values. +- Support using BLKZEROOUT for clearing devices. +- Fixed interrup handling. +- Fix block cache when device has too many failing writes. +- Fix block cache waiting for IO completion with failing disks. +- Add configure --enable-editline support as an alternative to readline. +- Enhance reporting and error handling when creating thin volumes. +- Enable vgsplit for VDO volumes. +- Lvextend of vdo pool volumes ensure at least 1 new VDO slab is added. +- Restore lost signal blocking while VG lock is held. +- Improve estimation of needed extents when creating thin-pool. +- Use extra 1% when resizing thin-pool metadata LV with --use-policy. +- Enhance --use-policy percentage rounding. +- Allow pvmove of writecache origin. +- Report integrity fields. +- Integrity volumes defaults to journal mode. + +* Tue Jan 26 2021 Fedora Release Engineering - 2.03.10-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Sun Aug 09 2020 Marian Csontos - 2.03.10-1 +- Add integrity with raid capability. +- Add writecache and integrity support to lvmdbusd. +- Zero pool metadata on allocation (disable with allocation/zero_metadata=0). +- Failure in zeroing or wiping will fail command (bypass with -Zn, -Wn). +- Add lvcreate of new cache or writecache lv with single command. +- Generate unique cachevol name when default required from lvcreate. +- Converting RAID1 volume to one with same number of legs now succeeds with a + warning. +- Fix conversion to raid from striped lagging type. +- Fix conversion to 'mirrored' mirror log with larger regionsize. +- Fix running out of free buffers for async writing for larger writes. +- Fix support for lvconvert --repair used by foreign apps (i.e. Docker). +- Add support for VDO in blkdeactivate script. + +* Tue Jul 28 2020 Fedora Release Engineering - 2.03.09-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 13 2020 Tom Stellard - 2.03.09-3 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + +* Tue May 26 2020 Miro Hrončok - 2.03.09-2 +- Rebuilt for Python 3.9 + +* Thu Mar 26 2020 Marian Csontos - 2.03.09-1 +- Fix showing of a dm kernel error when uncaching a volume with cachevol. +- Fix memleak in syncing of internal cache. +- Fix pvck dump_current_text memleak. +- Fix lvmlockd result code on error path for _query_lock_lv(). +- Update pvck man page and help output. +- Accept more output lines from vdo_format. +- Prevent raid reshaping of stacked volumes. +- Writecache and VDO volume handling improvements. + +* Wed Jan 29 2020 Fedora Release Engineering - 2.03.07-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Tue Dec 03 2019 Marian Csontos - 2.03.07-1 +- Ensure minimum required region size on striped RaidLV creation. +- Fix resize of thin-pool with data and metadata of different segtype. +- Improve mirror type leg splitting. +- Fix activation order when removing merged snapshot. +- Experimental VDO support for lvmdbusd. + +* Wed Oct 23 2019 Marian Csontos - 2.03.06-1 +- IMPORTANT: Prevent creating VGs with PVs with different logical block sizes. +- Fix metadata writes from corrupting with large physical block size. +- Correctly set read_ahead for LVs when pvmove is finished. +- Add support for DM_DEVICE_GET_TARGET_VERSION into device_mapper. +- Activate thin-pool layered volume as 'read-only' device. +- Ignore crypto devices with UUID signature CRYPT-SUBDEV. +- Synchronize with udev when dropping snapshot. +- Add missing device synchronization point before removing pvmove node. +- See WHATS_NEW for more. + +* Wed Sep 18 2019 Marian Csontos - 2.03.05-4 +- Remove unsupported OPTIONS+="event_timeout" from udev rule (#1749857) + +* Tue Aug 27 2019 Adam Williamson - 2.03.05-3 +- Backport fix for converting dbus.UInt to string in Python 3.8 (#1745597) + +* Mon Aug 19 2019 Miro Hrončok - 2.03.05-2 +- Rebuilt for Python 3.8 + +* Wed Jul 31 2019 Marian Csontos - 2.03.05-1 +- IMPORTANT: Prohibit mirrored 'mirror' log via lvcreate and lvconvert. Use RAID1. +- IMPORTANT: Dropped deprecated liblvm2app. +- IMPORTANT: clvmd dropped. Use lvmlockd for cluster locking. +- Dropped lvmetad. +- Deduplication and compression - support for VDO volumes. +- Add device hints to reduce scanning. +- See WHATS_NEW and WHATS_NEW_DM in the documentation directory for more. + +* Thu Jul 25 2019 Fedora Release Engineering - 2.02.185-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Mon May 13 2019 Marian Csontos - 2.02.185-1 +- Fix change of monitoring in clustered volumes. +- Improve -lXXX%%VG modifier which improves cache segment estimation. +- Add synchronization with udev before removing cached devices. +- Fix missing growth of _pmspare volume when extending _tmeta volume. +- Automatically grow thin metadata, when thin data gets too big. +- Add cached devices support to vgsplit. +- Fix signal delivery checking race in libdaemon (lvmetad). +- Add missing Before=shutdown.target to LVM2 services to fix shutdown ordering. + +* Mon Apr 01 2019 Marian Csontos - 2.02.184-1 +- IMPORTANT: Change scan_lvs default to 0 so LVs are not scanned for PVs. +- Fix (de)activation of RaidLVs with visible SubLVs. +- Add scan_lvs config setting to control if lvm scans LVs for PVs. +- Fix missing proper initialization of pv_list struct when adding PV. +- Ensure migration_threshold for cache is at least 8 chunks. +- Enhance ioctl flattening and add parameters only when needed. +- Add DM_DEVICE_ARM_POLL for API completness matching kernel. + +* Thu Mar 07 2019 Igor Gnatenko - 2.02.183-4 +- Remove obsolete scriptlets + +* Sun Feb 17 2019 Igor Gnatenko - 2.02.183-3 +- Rebuild for readline 8.0 + +* Fri Feb 01 2019 Fedora Release Engineering - 2.02.183-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Fri Dec 07 2018 Marian Csontos - 2.02.183-1 +- Bug fix release addressing issus with MD RAID version 1.0 and 0.90. + +* Wed Oct 31 2018 Marian Csontos - 2.02.182-1 +- Important bugfix release fixing possible data corruption. + +* Thu Aug 02 2018 Marian Csontos - 2.02.181-1 +- Reject conversions on raid1 LVs with split tracked SubLVs. +- Reject conversions on raid1 split tracked SubLVs. +- Fix dmstats list failing when no regions exist. +- Reject conversions of LVs under snapshot. +- Limit suggested options on incorrect option for lvconvert subcommand. +- Add vdo plugin for monitoring VDO devices. + +* Thu Jul 19 2018 Marian Csontos - 2.02.180-1 +- Never send any discard ioctl with test mode. +- Fix thin-pool alloc which needs same PV for data and metadata. +- Enhance vgcfgrestore to check for active LVs in restored VG. +- Provide possible layouts when converting between linear and striped/raid. +- Fix unmonitoring of merging snapshots. +- Cache can uses metadata format 2 with cleaner policy. +- Avoid showing internal error in lvs output or pvmoved LVs. +- Fix check if resized PV can also fit metadata area. +- Reopen devices RDWR only before writing to avoid udev issues. +- Change pvresize output confusing when no resize took place. +- Fix lvmetad hanging on shutdown. +- Fix mem leak in clvmd and more coverity issues. + +* Fri Jul 13 2018 Fedora Release Engineering - 2.02.179-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Jul 10 2018 Marian Csontos - 2.02.179-3 +- Remove deprecated python bindings. + +* Tue Jun 19 2018 Miro Hrončok - 2.02.179-2 +- Rebuilt for Python 3.7. + +* Mon Jun 18 2018 Marian Csontos - 2.02.179-1 +- Bugfix release mainly fixing known cache and lvmlockd issues. + +* Wed Jun 13 2018 Marian Csontos - 2.02.178-1 +- Remove the rc1 from release. + +* Tue May 29 2018 Marian Csontos - 2.02.178-0.1.rc1 +- Remove lvm1 and pool format handling and add filter to ignore them. +- Rework disk scanning and when it is used. +- Add new io layer using libaio for faster scanning. +- Support activation of component LVs in read-only mode. +- Avoid non-exclusive activation of exclusive segment types. +- Restore pvmove support for clusterwide active volumes (2.02.177). +- Add prioritized_section() to restore cookie boundaries (2.02.177). +- Again accept striped LV as COW LV with lvconvert -s (2.02.169). +- Restore usability of thin LV to be again external origin for another thin (2.02.169). +- See WHATS_NEW and WHATS_NEW_DM in the documentation directory for more. + +* Wed Apr 04 2018 Marian Csontos - 2.02.177-5 +- Disable python2 bindings. + +* Fri Feb 09 2018 Igor Gnatenko - 2.02.177-4 +- Escape macros in %%changelog + +* Thu Feb 08 2018 Fedora Release Engineering - 2.02.177-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Jan 09 2018 Iryna Shcherbina - 2.02.177-2 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Tue Dec 19 2017 Marian Csontos - 2.02.177-1 +- When writing text metadata content, use complete 4096 byte blocks. +- Change text format metadata alignment from 512 to 4096 bytes. +- When writing metadata, consistently skip mdas marked as failed. +- Refactor and adjust text format metadata alignment calculation. +- Fix python3 path in lvmdbusd to use value detected by configure. +- Reduce checks for active LVs in vgchange before background polling. +- Ensure _node_send_message always uses clean status of thin pool. +- Fix lvmlockd to use pool lock when accessing _tmeta volume. +- Report expected sanlock_convert errors only when retries fail. +- Avoid blocking in sanlock_convert on SH to EX lock conversion. +- Deactivate missing raid LV legs (_rimage_X-missing_Y_Z) on decativation. +- Skip read-modify-write when entire block is replaced. +- Categorise I/O with reason annotations in debug messages. +- Allow extending of raid LVs created with --nosync after a failed repair. +- Command will lock memory only when suspending volumes. +- Merge segments when pvmove is finished. +- Remove label_verify that has never been used. +- Ensure very large numbers used as arguments are not casted to lower values. +- Enhance reading and validation of options stripes and stripes_size. +- Fix printing of default stripe size when user is not using stripes. +- Activation code for pvmove automatically discovers holding LVs for resume. +- Make a pvmove LV locking holder. +- Do not change critical section counter on resume path without real resume. +- Enhance activation code to automatically suspend pvmove participants. +- Prevent conversion of thin volumes to snapshot origin when lvmlockd is used. +- Correct the steps to change lock type in lvmlockd man page. +- Retry lock acquisition on recognized sanlock errors. +- Fix lock manager error codes in lvmlockd. +- Remove unnecessary single read from lvmdiskscan. +- Check raid reshape flags in vg_validate(). +- Add support for pvmove of cache and snapshot origins. +- Avoid using precommitted metadata for suspending pvmove tree. +- Ehnance pvmove locking. +- Deactivate activated LVs on error path when pvmove activation fails. +- Add "io" to log/debug_classes for logging low-level I/O. +- Avoid importing persistent filter in vgscan/pvscan/vgrename. +- Fix memleak of string buffer when vgcfgbackup runs in secure mode. +- Do not print error when clvmd cannot find running clvmd. +- Prevent start of new merge of snapshot if origin is already being merged. +- Fix offered type for raid6_n_6 to raid5 conversion (raid5_n). +- Deactivate sub LVs when removing unused cache-pool. +- Do not take backup with suspended devices. +- Avoid RAID4 activation on incompatible kernels under all circumstances. +- Reject conversion request to striped/raid0 on 2-legged raid4/5. +- Activation tree of thin pool skips duplicated check of pool status. +- Remove code supporting replicator target. +- Do not ignore failure of _info_by_dev(). +- Propagate delayed resume for pvmove subvolumes. +- Suppress integrity encryption keys in 'table' output unless --showkeys supplied. + +* Thu Dec 14 2017 Marian Csontos - 2.02.176-2 +- Add testsuite subpackage. + +* Fri Nov 03 2017 Marian Csontos - 2.02.176-1 +- Fix segfault in lvm_pv_remove in liblvm. (2.02.173) +- Do not allow storing VG metadata with LV without any segment. +- Fix printed message when thin snapshot was already merged. +- Remove created spare LV when creation of thin-pool failed. +- Avoid reading ignored metadata when MDA gets used again. +- Fix detection of moved PVs in vgsplit. (2.02.175) +- Ignore --stripes/--stripesize on RAID takeover +- Disallow creation of snapshot of mirror/raid subLV (was never supported). +- Keep Install section only in *.socket systemd units. +- Improve used paths for generated systemd units and init shells. +- Fix regression in more advanced vgname extraction in lvconvert (2.02.169). +- Allow lvcreate to be used for caching of _tdata LV. +- Avoid internal error when resizing cache type _tdata LV (not yet supported). +- Show original converted names when lvconverting LV to pool volume. +- Move lib code used only by liblvm into metadata-liblvm.c. +- Distinguish between device not found and excluded by filter. +- Monitor external origin LVs. +- Allow lvcreate --type mirror to work with 100%%FREE. +- Improve selection of resource name for complex volume activation lock. +- Avoid cutting first character of resource name for activation lock. +- Support for encrypted devices in fsadm. +- Improve thin pool overprovisioning and repair warning messages. +- Fix incorrect adjustment of region size on striped RaidLVs. +- Issue a specific error with dmsetup status if device is unknown. +- Fix RT_LIBS reference in generated libdevmapper.pc for pkg-config. + +* Mon Oct 09 2017 Marian Csontos - 2.02.175-1 +- Use --help with blockdev when checking for --getsize64 support in fsadm. +- Dump lvmdbusd debug information with SIGUSR1. +- Fix metadata corruption in vgsplit and vgmerge intermediate states. +- Add PV_MOVED_VG PV status flag to mark PVs moving between VGs. +- Fix lvmdbus hang and recognise unknown VG correctly. +- Improve error messages when command rules fail. +- Require LV name with pvmove in a shared VG. +- Allow shared active mirror LVs with lvmlockd, dlm, and cmirrord. +- Support lvconvert --repair with cache and cachepool volumes. +- lvconvert --repair respects --poolmetadataspare option. +- Fix thin pool creation in a shared VG. (2.02.173) +- Schedule exit when received SIGTERM in dmeventd. +- Fix blkdeactivate regression with failing DM/MD devs deactivation (1.02.142). +- Add blkdeactivate -r wait option to wait for MD resync/recovery/reshape. +- Use blkdeactivate -r wait in blk-availability systemd service/initscript. +- Also try to unmount /boot on blkdeactivate -u if on top of supported device. +- Fix typo in blkdeactivate's '--{dm,lvm,mpath}options' option name. +- Correct return value testing when get reserved values for reporting. +- Take -S with dmsetup suspend/resume/clear/wipe_table/remove/deps/status/table. +- Fix mistakenly commented out %%python_provide line for python3-lvm. + +* Mon Oct 02 2017 Troy Dawson - 2.02.174-2 +- Bump to rebuild on rebuilt corosync +- Cleanup spec file conditionals + +* Wed Sep 20 2017 Marian Csontos - 2.02.174-1.f28 +- NOTE: Deprecating python bindings and liblvm2app. +- Prevent raid1 split with trackchanges in a shared VG. +- Avoid double unlocking of client & lockspace mutexes in lvmlockd. +- Fix leaking of file descriptor for non-blocking filebased locking. +- Fix check for 2nd mda at end of disk fits if using pvcreate --restorefile. +- Use maximum metadataarea size that fits with pvcreate --restorefile. +- Always clear cached bootloaderarea when wiping label e.g. in pvcreate. +- Disallow --bootloaderareasize with pvcreate --restorefile. +- Fix lvmlockd check for running lock managers during lock adoption. +- Add --withgeneralpreamble and --withlocalpreamble to lvmconfig. +- Add warning when creating thin-pool with zeroing and chunk size >= 512KiB. +- Introduce exit code 4 EINIT_FAILED to replace -1 when initialisation fails. +- Add synchronization points with udev during reshape of raid LVs. +- Restore umask when creation of node fails. +- Add --concise to dmsetup create for many devices with tables in one command. +- Accept minor number without major in library when it knows dm major number. +- Introduce single-line concise table output format: dmsetup table --concise. + +* Thu Aug 03 2017 Fedora Release Engineering - 2.02.173-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Sun Jul 30 2017 Florian Weimer - 2.02.173-3 +- Rebuild with binutils fix for ppc64le (#1475636) + +* Wed Jul 26 2017 Fedora Release Engineering - 2.02.173-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue Jul 25 2017 Marian Csontos - 2.02.173-1 +- Create /dev/disk/by-part{uuid,label} and gpt-auto-root symlinks with udev. +- Add synchronization points with udev during conversion of raid LVs. +- Improve --size args validation and report more detailed error message. +- Initialize debugging mutex before any debug message in clvmd. +- Log error instead of warn when noticing connection problem with lvmetad. +- Fix memory leak in lvmetad when working with duplicates. +- Remove restrictions on reshaping open and clustered raid devices. +- Add incompatible data_offset to raid metadata to fix reshape activation. +- Accept 'lvm -h' and 'lvm --help' as well as 'lvm help' for help. +- Suppress error message from accept() on clean lvmetad shutdown. +- Tidy clvmd client list processing and fix segfaults. +- Protect clvmd debug log messages with mutex and add client id. +- Fix shellcheck reported issues for script files. + +* Thu Jun 29 2017 Marian Csontos - 2.02.172-1 +- Do not lvdisplay --maps unset settings of cache pool. +- Fix lvdisplay --maps for cache pool without policy settings. +- Support aborting of flushing cache LV. +- Improve lvcreate --cachepool arg validation. +- Cache format2 flag is now using segment name type field. +- Disallow cachepool creation with policy cleaner and mode writeback. +- Lvconvert --repair handles failing raid legs (present but marked 'D'ead). +- Add display_percent helper function for printing percent values. +- Add dm_percent_to_round_float for adjusted percentage rounding. +- Fix lvcreate extent percentage calculation for mirrors. +- Reenable conversion of data and metadata thin-pool volumes to raid. +- Linear to RAID1 upconverts now use "recover" sync action, not "resync". +- No longer necessary to '--force' a repair for RAID1. +- Improve raid status reporting with lvs. +- dm_get_status_raid() handle better some incosistent md statuses. +- Limit maximal size of thin-pool for specific chunk size. +- Print a warning about in-use PVs with no VG using them. +- Disable automatic clearing of PVs that look like in-use orphans. +- Extend validation of filesystems resized by fsadm. +- Properly handle subshell return codes in fsadm. +- Stop using '--yes' mode when fsadm runs without terminal. +- Support storing status flags via segtype name field. +- Enhance lvconvert automatic settings of possible (raid) LV types. +- Add missing NULL to argv array when spliting cmdline arguments. +- Don't reinstate still-missing devices when correcting inconsistent metadata. +- Allow lvchange to change properties on a thin pool data sub LV. +- Fix reusing of dm_task structure for status reading (used by dmeventd). +- Drop unneeded --config option from raid dmeventd plugin. +- Accept truncated files in calls to dm_stats_update_regions_from_fd(). +- Restore Warning by 5% increment when thin-pool is over 80% (1.02.138). +- Reset array with dead rimage devices once raid gets in sync. + +* Fri Jun 09 2017 Marian Csontos - 2.02.171-3 +- Fix lvmdbusd not passing --all with vgreduce --removemissing. + +* Wed May 17 2017 Marian Csontos - 2.02.171-2 +- Fix lvmdbusd mangling config options. + +* Tue May 09 2017 Marian Csontos - 2.02.171-1 +- Add RAID takeover and reshaping. +- Add pvcreate prompt when device size doesn't match setphysicalvolumesize. +- Remove obsolete lvmchange binary - convert to built-in command. +- Support cache segment with configurable metadata format. +- Add option for lvcreate/lvconvert --cachemetadataformat auto|1|2. +- Add allocation/cache_metadata_format profilable settings. +- Command line options, help and man pages using common definitions. +- Add build-time configuration command line to 'lvm version' output. +- Disable lvmetad when lvconvert --repair is run. +- Raise mirror/raid default regionsize to 2MiB. +- Support shrinking of RaidLVs. +- Introduce global/fsadm_executable to make fsadm path configurable. +- Look for limited thin pool metadata size when using 16G metadata. +- Add lvconvert pool creation rule disallowing options with poolmetadata. +- Fix missing lvmlockd LV locks in lvchange and lvconvert. +- Fix dmeventd setup for lvchange --poll. +- Fix use of --poll and --monitor with lvchange and vgchange. +- Disallow lvconvert of hidden LV to a pool. +- Ignore --partial option when not used for activation. +- Allow --activationmode option with lvchange --refresh. +- Allow valid lvconvert --regionsize change +- Fix SIGINT blocking to prevent corrupted metadata +- Fix systemd unit existence check for lvmconf --services --startstopservices. +- Check and use PATH_MAX buffers when creating vgrename device paths. +- Handle known table line parameter order change in specific raid target vsns. +- Show more information for cached volumes in lvdisplay [-m]. +- Use function cache_set_params() for both lvcreate and lvconvert. +- Skip rounding on cache chunk size boudary when create cache LV. +- Improve cache_set_params support for chunk_size selection. +- Fix metadata profile allocation/cache_[mode|policy] setting. +- Fix missing support for using allocation/cache_pool_chunk_size setting. +- Support conversion of raid type, stripesize and number of disks +- Reject writemostly/writebehind in lvchange during resynchronization. +- Deactivate active origin first before removal for improved workflow. +- Fix regression of accepting both --type and -m with lvresize. (2.02.158) +- Add extra memory page when limiting pthread stack size in clvmd. +- Support striped/raid0* <-> raid10_near conversions. +- Support region size changes on existing RaidLVs. +- Avoid parallel usage of cpg_mcast_joined() in clvmd with corosync. +- Support raid6_{ls,rs,la,ra}_6 segment types and conversions from/to it. +- Support raid6_n_6 segment type and conversions from/to it. +- Support raid5_n segment type and conversions from/to it. +- Support new internal command _dmeventd_thin_command. +- Introduce new dmeventd/thin_command configurable setting. +- Use new default units 'r' for displaying sizes. +- Also unmount mount point on top of MD device if using blkdeactivate -u. +- Restore check preventing resize of cache type volumes (2.02.158). +- Add missing udev sync when flushing dirty cache content. +- vgchange -p accepts only uint32 numbers. +- Report thin LV date for merged LV when the merge is in progress. +- Detect if snapshot merge really started before polling for progress. +- Checking LV for merging origin requires also it has merged snapshot. +- Extend validation of metadata processing. +- Enable usage of cached volumes as snapshot origin LV. +- Fix displayed lv name when splitting snapshot (2.02.146). +- Warn about command not making metadata backup just once per command. +- Enable usage of cached volume as thin volume's external origin. +- Support cache volume activation with -real layer. +- Improve search of lock-holder for external origin and thin-pool. +- Support status checking of cache volume used in layer. +- Avoid shifting by one number of blocks when clearing dirty cache volume. +- Extend metadata validation of external origin LV use count. +- Fix dm table when the last user of active external origin is removed. +- Improve reported lvs status for active external origin volume. +- Fix table load for splitted RAID LV and require explicit activation. +- Always active splitted RAID LV exclusively locally. +- Do not use LV RAID status bit for segment status. +- Check segtype directly instead of checking RAID in segment status. +- Reusing exiting code for raid image removal. +- Fix pvmove leaving -pvmove0 error device in clustered VG. +- Avoid adding extra '_' at end of raid extracted images or metadata. +- Optimize another _rmeta clearing code. +- Fix deactivation of raid orphan devices for clustered VG. +- Fix lvconvert raid1 to mirror table reload order. +- Add internal function for separate mirror log preparation. +- Fix segfault in lvmetad from missing NULL in daemon_reply_simple. +- Simplify internal _info_run() and use _setup_task_run() for mknod. +- Better API for internal function _setup_task_run. +- Avoid using lv_has_target_type() call within lv_info_with_seg_status. +- Simplify internal lv_info_with_seg_status API. +- Decide which status is needed in one place for lv_info_with_seg_status. +- Fix matching of LV segment when checking for it info status. +- Report log_warn when status cannot be parsed. +- Test segment type before accessing segment members when checking status. +- Implement compatible target function for stripe segment. +- Use status info to report merge failed and snapshot invalid lvs fields. +- See WHATS_NEW and WHATS_NEW_DM in the documentation directory for more. + +* Fri Feb 10 2017 Fedora Release Engineering - 2.02.168-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Jan 12 2017 Igor Gnatenko - 2.02.168-3 +- Rebuild for readline 7.x + +* Mon Dec 19 2016 Miro Hrončok - 2.02.168-2 +- Rebuild for Python 3.6 + +* Thu Dec 01 2016 Peter Rajnoha - 2.02.168-1 +- Display correct sync_percent on large RaidLVs +- lvmdbusd --blackboxsize added, used to override default size of 16 +- Allow a transiently failed RaidLV to be refreshed +- Use lv_update_and_reload() inside mirror code where it applies. +- Preserve mirrored status for temporary layered mirrors. +- Use transient raid check before repairing raid volume. +- Implement transient status check for raid volumes. +- Only log msg as debug if lvm2-lvmdbusd unit missing for D-Bus notification. +- Avoid duplicated underscore in name of extracted LV image. +- Missing stripe filler now could be also 'zero'. +- lvconvert --repair accepts --interval and --background option. +- More efficiently prepare _rmeta devices when creating a new raid LV. +- Document raid status values. +- Always exit dmsetup with success when asked to display help/version. + +* Tue Nov 15 2016 Peter Rajnoha - 2.02.167-2 +- Only log msg as debug if lvm2-lvmdbusd unit missing for D-Bus notification. + +* Mon Nov 07 2016 Peter Rajnoha - 2.02.167-1 +- Use log_error in regex and sysfs filter to describe reason of failure. +- Fix blkdeactivate to deactivate dev stack if dev on top already unmounted. +- Prevent non-synced raid1 repair unless --force +- Prevent raid4 creation/conversion on non-supporting kernels +- Add direct striped -> raid4 conversion +- Fix raid4 parity image pair position on conversions from striped/raid0* +- Fix a few unconverted return code values for some lvconvert error path. +- Disable lvconvert of thin pool to raid while active. +- Disable systemd service start rate limiting for lvm2-pvscan@.service. +- Log failure of raid device with log_error level. +- Use dm_log_with_errno and translate runtime to dm_log only when needed. +- Make log messages from dm and lvm library different from dmeventd. +- Notice and Info messages are again logged from dmeventd and its plugins. +- Dmeventd now also respects DM_ABORT_ON_INTERNAL_ERRORS as libdm based tool. +- Report as non default dm logging also when logging with errno was changed. +- Use log_level() macro to consistently decode message log level in dmeventd. +- Still produce output when dmsetup dependency tree building finds dev missing. +- Check and report pthread_sigmask() failure in dmeventd. +- Check mem alloc fail in _canonicalize_field_ids(). +- Use unsigned math when checking more then 31 legs of raid. +- Fix 'dmstats delete' with dmsetup older than v1.02.129 +- Fix stats walk segfault with dmsetup older than v1.02.129 + +* Thu Oct 06 2016 Peter Rajnoha - 2.02.166-2 +- Add various fixes for lvmdbusd from upcoming lvm2 version 2.02.167. + +* Mon Sep 26 2016 Peter Rajnoha - 2.02.166-1 +- Fix lvm2-activation-generator to read all LVM2 config sources. (2.02.155) +- Fix lvchange-rebuild-raid.sh to cope with older target versions. +- Use dm_config_parse_without_dup_node_check() to speedup metadata reading. +- Fix lvconvert --repair regression +- Fix reported origin lv field for cache volumes. (2.02.133) +- Always specify snapshot cow LV for monitoring not internal LV. (2.02.165) +- Fix lvchange --discard|--zero for active thin-pool. +- Enforce 4MiB or 25% metadata free space for thin pool operations. +- Fix lock-holder device for thin pool with inactive thin volumes. +- Use --alloc normal for mirror logs even if the mimages were stricter. +- Use O_DIRECT to gather metadata in lvmdump. +- Ignore creation_time when checking for matching metadata for lvmetad. +- Fix possible NULL pointer derefence when checking for monitoring. +- Add lvmreport(7) man page. +- Don't install lvmraid(7) man page when raid excluded. (2.02.165) +- Report 0% as dirty (copy%%) for cache without any used block. +- Fix lvm2api reporting of cache data and metadata percent. +- Restore reporting of metadata usage for cache volumes (2.02.155). +- Support raid scrubbing on cache origin LV. +- Fix man entry for dmsetup status. +- Introduce new dm_config_parse_without_dup_node_check(). +- Don't omit last entry in dmstats list --group. + +* Wed Sep 07 2016 Peter Rajnoha - 2.02.165-1 +- Add lvmraid(7) man page. +- Use udev db to check for mpath components before running pvscan for lvmetad. +- Use lsblk -s and lsblk -O in lvmdump only if these options are supported. +- Fix number of stripes shown in lvcreate raid10 message when too many. +- Change lvmdbusd to use new lvm shell facilities. +- Do not monitor cache-pool metadata when LV is just being cleared. +- Add allocation/cache_pool_max_chunks to prevent misuse of cache target. +- Give error not segfault in lvconvert --splitmirrors when PV lies outside LV. +- Fix typo in report/columns_as_rows config option name recognition (2.02.99). +- Avoid PV tags when checking allocation against parallel PVs. +- Disallow mirror conversions of raid10 volumes. +- Fix dmeventd unmonitoring when segment type (and dso) changes. +- Don't allow lvconvert --repair on raid0 devices or attempt to monitor them. +- No longer adjust incorrect number of raid stripes supplied to lvcreate. +- Move lcm and gcd to lib/misc. +- Fix vgsplit of external origins. (2.02.162) +- Prohibit creation of RAID LVs unless VG extent size is at least the page size. +- Suppress some unnecessary --stripesize parameter warnings. +- Fix 'pvmove -n name ...' to prohibit collocation of RAID SubLVs +- Improve explanation of udev fallback in libdevmapper.h. + +* Mon Aug 15 2016 Peter Rajnoha - 2.02.164-2 +- Fix selection of PVs when allocating raid0_meta. +- Fix sdbus socket leak leading to hang in lvmnotify. +- Specify max stripes for raid LV types: raid0:64; 1:10; 4,5:63; 6:62; 10:32. +- Avoid double suffix when naming _rmeta LV paired with _rimage LV. + +* Wed Aug 10 2016 Peter Rajnoha - 2.02.163-1 +- Add profile for lvmdbusd which uses lvm shell json report output. +- Restrict in-command modification of some parms in lvm shell. +- Apply LVM_COMMAND_PROFILE early for lvm shell. +- Refactor reporting so lvm shell log report collects whole of cmd execution. +- Support LVM_*_FD envvars to redirect output to file descriptors. +- Limit use of --corelog and --mirrorlog to mirrors in lvconvert. +- Reject --nosync option for RAID6 LVs in lvcreate. +- Do not refresh whole cmd context if profile dropped after processing LVM cmd. +- Support straightforward lvconvert between striped and raid4 LVs. +- Support straightforward lvconvert between raid1 and mirror LVs. +- Report supported conversions when asked for unsupported raid lvconvert. +- Add "--rebuild PV" option to lvchange to allow for PV selective rebuilds. +- Preserve existing mirror region size when using --repair. +- Forbid stripe parameters with lvconvert --repair. +- Unify stripe size validation into get_stripe_params to catch missing cases. +- Further lvconvert validation logic refactoring. +- Add "lvm fullreport" man page. +- Add dm_report_destroy_rows/dm_report_group_output_and_pop_all for lvm shell. +- Adjust group handling and json production for lvm shell. + +* Fri Jul 29 2016 Peter Rajnoha - 2.02.162-1 +- Support lvconvert -Zn also when doing full cache pool conversion. +- Suppress not zeroing warn when converting to thin LV for non-zeroing tpool. +- Fix automatic updates of PV extension headers to newest version. +- Improve lvconvert --trackchanges validation to require --splitmirrors 1. +- Add note about lastlog built-in command to lvm man page. +- Fix unrecognised segtype flag message. +- lvconvert not clears cache pool metadata ONLY with -Zn. +- Enabled lvconvert --uncache to work with partial VG. +- Fix json reporting to escape '"' character that may appear in reported string. + +* Thu Jul 21 2016 Peter Rajnoha - 2.02.161-3 +- Enable LVM notifications over dbus for lvmdbusd. + +* Tue Jul 19 2016 Fedora Release Engineering - 2.02.161-2 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Mon Jul 18 2016 Peter Rajnoha - 2.02.161-1 +- Prohibit some lvchange/lvresize that were failing on raid0 volumes. +- Fix segfaults in complex vgsplits. (2.02.159) +- Reformat unwieldy lvconvert man page. +- Allow --force to be passed through to pvcreate from vgcreate. (2.02.144) +- Fix lvresize of filesystem when LV has already right size (2.02.141) +- New LVM_LOG_FILE_MAX_LINES env var to limit max size of created logs. +- Disable queueing on mpath devs in blk-availability systemd service/initscript. +- Add new -m|--mpathoption disablequeueing to blkdeactivate. +- Automatically group regions with 'create --segments' unless --nogroup. +- Fix resource leak when deleting the first member of a group. +- Allow --bounds with 'create --filemap' for dmstats. +- Enable creation of filemap regions with histograms. +- Enable histogram aggregation for regions with more than one area. +- Enable histogram aggregation for groups of regions. +- Add a --filemap option to 'dmstats create' to allow mapping of files. +- Add dm_stats_create_regions_from_fd() to map file extents to regions. + +* Thu Jul 07 2016 Peter Rajnoha - 2.02.160-1 +- Minor fixes from coverity. + +* Thu Jul 07 2016 Peter Rajnoha - 2.02.159-1 +- Add raid0_meta segment type that provides metadata space for raid conversions. +- Fix created link for a used pool for vgmknode. +- Introduce and use is_power_of_2 macro. +- Support conversions between striped and raid0 segment types. +- Add infrastructure for raid takeover lvconvert options. +- Update default dmstats field selections for groups. +- Add 'obj_type', 'group_id', and 'statsname' fields to dmstats reports. +- Add --area, --region, and --group to dmstats to control object selection. +- Add --alias, --groupid, --regions to dmstats for group creation and deletion. +- Add 'group' and 'ungroup' commands to dmstats. +- Allow dm_stats_delete_group() to optionally delete all group members. +- Add dm_stats_get_object_type() to return the type of object present. +- Add dm_stats_walk_init() allowing control of objects visited by walks. +- Add dm_stats_get_group_descriptor() to return the member list as a string. +- Introduce dm_stats_get_nr_groups() and dm_stats_group_present(). +- Add dm_stats_{get,set}_alias() to set and retrieve alias names for groups. +- Add dm_stats_get_group_id() to return the group ID for a given region. +- Add dm_stats_{create,delete}_group() to allow grouping of stats regions. +- Add enum-driven dm_stats_get_{metric,counter}() interfaces. +- Add dm_bitset_parse_list() to parse a string representation of a bitset. +- Thin dmeventd plugin umounts lvm2 volume only when pool is 95% or more. + +* Tue Jun 28 2016 Peter Rajnoha - 2.02.158-1 +- Add a more efficient native vgimportclone command to replace the script. +- Make lvmlockd always attempt to connect to lvmetad if no connection exists. +- Let lvmetad handle new connections after shutdown signal. +- Disable lvmetad when vgcfgrestore begins and enable it again after. +- Make pvscan do activation if lvmetad is configured but not running. +- Fix rescanning the PVs for a single VG when using lvmetad. +- Pool metadata lvresize uses now same code as resize of normal volume. +- Preserve monitoring status when updating thin-pool metadata. +- Return 0 (inactive) when status cannot be queried in _lv_active(). +- Switch to log_warn() for failing activation status query. +- Replace vgimportclone script with binary. +- While lvmetad is shutting down, continue handling all connections cleanly. +- Refactor lvconvert argument handling code. +- Notify lvmetad when vgcfgrestore changes VG metadata. +- Add --logonly option to report only cmd log for a command, not other reports. +- Add log/command_log_selection to configure default selection used on cmd log. +- Use 'orphan' object type in cmd log for groups to collect PVs not yet in VGs. +- Add lvm lastlog command for query and display of last cmd's log in lvm shell. +- Report per-object return codes via cmd log while processing multiple objects. +- Annotate processing code with log report hooks for per-object command log. +- Also pass common printed messages (besides warnings and errors) to log report. +- Log warnings and errors via report during cmd processing if this is enabled. +- Make it possible to iterate over internal 'orphan' VGs in process_each_vg fn. +- Make -S|--select option groupable that allows this option to be repeated. +- Make -O|--sort option groupable that allows this option to be repeated. +- Add --configreport option to select report for which next options are applied. +- Add support for priorities on grouping command arguments. +- Add report/{pvs,vgs,lvs,pvsegs,segs}_{cols,sort}_full to lvm.conf. +- Add lvm fullreport command for joined PV, VG, LV and segment report per VG. +- Integrate report group handling and cmd log report into cmd processing code. +- Add log/report_command_log to lvm.conf to enable or disable cmd log report. +- Add log/report_output_format to lvm.conf for default report output format. +- Recognize --reportformat {basic|json} option to select report output format. +- Add log/command_log_{sort,cols} to lvm.conf to configure command log report. +- Add log_object_{type,name,id,group,group_id} fields to cmd log. +- Add log_{seq_num,type,context,message,errno,ret_code} fields to cmd log. +- Add CMDLOG report type - a separate report type for command logging. +- Recognize 'all' keyword used in selection as synonym for "" (no selection). +- Add dm_report_set_selection to set selection for multiple output of report. +- Add DM_REPORT_OUTPUT_MULTIPLE_TIMES flag for multiple output of same report. +- Move field width handling/sort init from dm_report_object to dm_report_output. +- Add _LOG_BYPASS_REPORT flag for bypassing any log report currently set. +- Introduce DM_REPORT_GROUP_JSON for report group with JSON output format. +- Introduce DM_REPORT_GROUP_BASIC for report group with basic report output. +- Introduce DM_REPORT_GROUP_SINGLE for report group having single report only. +- Add dm_report_group_{create,push,pop,destroy} to support report grouping. + +* Fri Jun 17 2016 Peter Rajnoha - 2.02.157-2 +- Change pvscan --cache -aay to scan locally if lvmetad fails. + +* Mon Jun 13 2016 Peter Rajnoha - 2.02.156-1 +- Don't allow duplicate orphan PVs to be used with vgcreate/vgextend/pvcreate. +- Improve handling of lvmetad update failures. +- Yes/No prompt accepts '^[ ^t]*([Yy]([Ee]([Ss]|)|)|[Nn]([Oo]|))[ ^t]*$'. +- If available, also collect output from lsblk command when running lvmdump -s. + +* Mon Jun 06 2016 Peter Rajnoha - 2.02.155-2 +- Fix regression in blkdeactivate causing dm and md devices to be skipped. (2.02.155) + +* Mon Jun 06 2016 Peter Rajnoha - 2.02.155-1 +- Reject PV tags on pvmove cmdline because only 1 PV is supported. (2.02.141) +- Fix compilation error when building with configure --disable-devmapper. +- Fix lvmconfig --type diff to display complete diff if config cascade used. +- Automatically filter out partitioned loop devices with partscan (losetup -P). +- Fix lvm devtypes internal error if -S used with field name from pvs/vgs/lvs. +- When reporting Data%%,Snap%%,Meta%%,Cpy%%Sync use single ioctl per LV. +- Add lvseg_percent_with_info_and_seg_status() for percent retrieval. +- Enhance internal seg_status handling to understand snapshots better. +- When refresh failed in suspend, call resume upon error path. +- Support passthrough cache mode when waiting for clean cache. +- Check cache status only for 'in-use' cache pools. +- Extend setup_task() to preset flushing for dm_task object. +- When checking LV is a merging COW, validate its a COW LV first. +- Correcting value in copy_percent() for 100%%. +- Update vgreduce to use process_each_vg. +- Update lvconvert to use process_each_lv. +- Update pvscan to use process_each_vg for autoactivation. +- Add basic support for --type raid0 using md. +- Add support for lvchange --cachemode for cached LV. +- Fix liblvm2app error handling when setting up context. +- Delay liblvm2app init in python code until it is needed. +- Simplify thread locking in lvmetad to fix locking problems. +- Allow pvremove -ff to remove a duplicate PV. +- Fix lvm2-activation-generator to read lvm.conf without full command setup. +- Allow a minimal context to be used in lvm2app for reading lvm.conf. +- Report passthrough caching mode when parsing cache mode. + +* Mon May 16 2016 Peter Rajnoha - 2.02.154-1 +- Fix liblvm segfault after failure initialising lvmetad connection. +- Retry open without O_NOATIME if it fails (not file owner/CAP_FOWNER). +- Split _report into one fn for options and arguments and one for processing. +- Show library version in message even if dm driver version is unavailable. + +* Tue May 10 2016 Peter Rajnoha - 2.02.153-2 +- Change warning messages related to duplicate PVs. +- A named device is always processed itself, not switched for a duplicate. +- Add PV attr "d" and report field "duplicate" for duplicate PVs. +- Add config setting to disallow VG changes when duplicate PVs exist. +- Use device size and active LVs to choose the preferred duplicate PV. +- Disable lvmetad when duplicate PVs are seen. +- Support --chunksize option also when caching LV when possible. +- Add function to check for target presence and version via 1 ioctl. + +* Mon May 02 2016 Peter Rajnoha - 2.02.152-1 +- Use any inherited tags when wiping metadata sub LVs to ensure activation. +- Add str_list_wipe. +- Improve support for interrupting procesing of volumes during lvchange. +- Use failed command return code when lvchanging read-only volume. +- Show creation transaction_id and zeroing state of pool with thin volume. +- Stop checking for dm_cache_mq policy with cache target 1.9 (alias to smq). +- Check first /sys/module/dm_* dir existance before using modprobe. +- Remove mpath from 10-dm.rules, superseded by 11-dm-mpath.rules (mpath>=0.6.0). +- Add dm_udev_wait_immediate to libdevmapper for waiting outside the library. + +* Mon Apr 25 2016 Peter Rajnoha - 2.02.151-1 +- Fix error path after reusing of _setup_task (2.02.150). +- Fix memory access for empty sysfs values (2.02.149). +- Disable lvmetad when lvm1 metadata is seen, so commands revert to scanning. +- Suppress errors when snapshot merge gets delayed because volume is in use. +- Avoid internal snapshot LV names in messages. +- Autodetect and use /run/lock dir when available instead of /var/lock. +- lvchange --refresh for merging thin origin will retry to deactivate snapshot. +- Recognize in-progress snapshot merge for thin volumes from dm table. +- Avoid deciding to initiate a pending snapshot merge during resume. +- Improve retrying lvmetad requests while lvmetad is being updated. +- Read devices instead of using the lvmetad cache if rescan fails. +- Move lvmetad token/filter check and device rescan to the start of commands. +- Don't try deactivating fictional internal LV before snapshot merge. (2.02.105) +- When not obtaining devs from udev, check they exist before caching them. +- Detect device mismatch also when compiling without udev support. +- Do not strip LVM- when debug reporting not found uuid. + +* Mon Apr 11 2016 Peter Rajnoha - 2.02.150-1 +- Avoid using flushing dm status ioctl when checking for usable DM device. +- Check for devices without LVM- uuid prefix only with kernels < 3.X. +- Reuse %%FREE size aproximation with lvcreate -l%%PVS thin-pool. +- Allow the lvmdump directory to exist already provided it is empty. +- Show lvconverted percentage with 2 decimal digits. +- Fix regression in suspend when repairing --type mirror (2.02.133). +- Change log_debug ioctl flags from single characters into words. + +* Mon Apr 04 2016 Peter Rajnoha - 2.02.149-2 +- Do not flush thin-pool when checking metadata fullness. +- Remove spurious error about no value in /sys/dev/block/major:minor/dm/uuid. +- Fix device mismatch detection for LV if persistent .cache file is used. +- Fix holder device not being found in /dev while sysfs has it during dev scan. + +* Tue Mar 29 2016 Peter Rajnoha - 2.02.148-1 +- Introduce TARGET_NAME and MODULE NAME macros. +- Replace hard-coded module and target names with macros. +- Add pv_major and pv_minor report fields. +- Detect and warn about mismatch between devices used and assumed for an LV. +- Adjust raid status function. + +* Mon Mar 21 2016 Peter Rajnoha - 2.02.147-5 +- If available, use /proc/self/mountinfo to detect mounted volume in fsadm. +- Fix resize of stacked raid thin data volume (2.02.141). +- Fix test for lvremove failure in lvconvert --uncache (2.02.146). + +* Fri Mar 11 2016 Peter Rajnoha - 2.02.146-4 +- More man page cleanups in lvconvert. +- Fix makefile vpath in /udev when generating udev rules files. +- Another attempt to improve VG name parsing for lvconvert (2.02.144). +- Use new cache status info and skip flushing for failed cache. +- Support --uncache with missing PVs. +- Improve parsing of cache status and report Fail, Error, needs_check, ro. + +* Fri Mar 11 2016 Peter Rajnoha - 2.02.146-3 +- Tidy report field names, headings and widths. +- Add vgscan --notifydbus to send a dbus notification. +- Add dbus notification from commands after a PV/VG/LV changes state. + +* Wed Mar 09 2016 Peter Rajnoha - 2.02.145-2 +- Require python3-gobject-base insetad of python3-gobject. + +* Mon Mar 07 2016 Peter Rajnoha - 2.02.145-1 +- Make it possible to use lvremove and lvrename on historical LVs. +- For historical LVs, report 'none' for lv_layout and 'history' for lv_role. +- Add full_{ancestors,descendants} fields to report LV ancestry with history. +- Report (h)istorical state within 5th bit (State) of the lv_attr field. +- Add lv_historical reporting field to report if LV is historical or not. +- Add lv_time_removed reporting field to display removal time for hist. LVs. +- Report lv_name, lv_uuid, vg_name, lv_time for historical LVs. +- Add --nohistory switch to lvremove to disable history recording on demand. +- Add -H|--history switch to lvs and lvdisplay to include historical LVs. +- Create historical LVs out of removed thin snapshot LVs and record in history. +- Add metadata/lvs_history_retention_time for automatic removal of hist. LVs. +- Add metadata/record_lvs_history config for switching LV history recording. +- Add support and infrastructure for tracking historical LVs. +- Improve lvconvert man page. +- Add kernel_cache_policy lvs field. +- Display [unknown] instead of 'unknown device' in pvs output. +- Fix error path when pvcreate allocation fails (2.02.144). +- Display [unknown] instead of blank for unknown VG names in pvs output. +- Fix dm_config_write_node and variants to return error on subsection failures. +- Remove 4096 char limit due to buffer size if writing dm_config_node. + +* Mon Feb 29 2016 Peter Rajnoha - 2.02.144-1 +- Only show (u)sed pv_attr char when PV is not (a)llocatable. (2.02.143) +- Update makefile to generate lcov output also for lvmpolld and lvmlockd. +- Fix SystemdService lvm2-lvmdbusd.service name. +- Improve support for env LVM_VG_NAME for reference VG name in lvconvert. +- Fix regression when lvresize accepted zero sizes. (2.02.141) +- Always warn user about PV in use even when pvremove uses --force --force. +- Use uninitialized pool header detection in all cases. +- Fix read error detection when checking for uninitialized thin-pool header. +- Fix error path for internal error in lvmetad VG lookup code. +- Fix string boundary check in _get_canonical_field_name(). +- Always initialized hist struct in _stats_parse_histogram(). + +* Wed Feb 24 2016 Peter Rajnoha - 2.02.143-4 +- Reinstate lvm2-lockd on all architectures as sanlock package is fixed now. + +* Tue Feb 23 2016 Peter Rajnoha - 2.02.143-3 +- Remove Requires: sanlock-lib for lvm2-lockd subpackage if sanlock not compiled. + +* Tue Feb 23 2016 Peter Rajnoha - 2.02.143-2 +- Add Requires: python3-gobject dependency for lvm2-dbusd subpackage. +- Build lvm2-lockd with sanlock support only on x86_64, arch64 and power64 arch. + +* Mon Feb 22 2016 Peter Rajnoha - 2.02.143-1 +- Introduce new lvm2-dbusd package providing LVM D-Bus daemon and service. +- Fix error path when sending thin-pool message fails in update_pool_lv(). +- Support reporting CheckNeeded and Fail state for thin-pool and thin LV. +- For failing thin-pool and thin volume correctly report percentage as INVALID. +- Report -1, not 'unkown' for lv_{snapshot_invalid,merge_failed} with --binary. +- Add configure --enable-dbus-service for an LVM D-Bus service. +- Replace configure --enable-python_bindings with python2 and python3 versions. +- If PV belongs to some VG and metadata missing, skip it if system ID is used. +- Automatically change PV header extension to latest version if writing PV/VG. +- Identify used PVs in pv_attr field by new 'u' character. +- Add pv_in_use reporting field to report if PV is used or not. +- Add pv_ext_vsn reporting field to report PV header extension version. +- Add protective flag marking PVs as used even if no metadata available. +- Improve status parsing for thin-pool and thin devices. + +* Mon Feb 15 2016 Peter Rajnoha - 2.02.142-1 +- Fix memory pool corruption in pvmove (2.02.141). +- Support control of spare metadata creation when repairing thin-pool. +- Fix config type of 'log/verbose' from bool to int (2.02.99). +- Fix inverted data LV thinp watermark calc for dmeventd response (2.02.133). +- Use use_blkid_wiping=0 if not defined in lvm.conf and support not compiled in. +- Do not check for suspended devices if scanning for lvmetad update. +- Clear cached bootloader areas when PV format changed. +- Fix partn table filter with external_device_info_source="udev" and blkid<2.20. +- Use fully aligned allocations for dm_pool_strdup/strndup() (1.02.64). +- Fix thin-pool table parameter feature order to match kernel output. + +* Thu Feb 04 2016 Fedora Release Engineering - 2.02.141-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Mon Jan 25 2016 Peter Rajnoha - 2.02.141-1 +- Add metadata/check_pv_device_sizes switch to lvm.conf for device size checks. +- Warn if device size is less than corresponding PV size in metadata. +- Cache device sizes internally. +- Restore support for command breaking in process_each_lv_in_vg() (2.02.118). +- Use correct mempool when process_each_lv_in_vg() (2.02.118). +- Fix lvm.8 man to show again prohibited suffixes. +- Fix configure to set proper use_blkid_wiping if autodetected as disabled. +- Initialise udev in clvmd for use in device scanning. (2.02.116) +- Add seg_le_ranges report field for common format when displaying seg devices. +- Honour report/list_item_separator for seg_metadata_le_ranges report field. +- Don't mark hidden devs in -o devices,metadata_devices,seg_pe_ranges.(2.02.140) +- Change LV sizes in seg_pe_ranges report field to match underlying devices. +- Add kernel_cache_settings report field for cache LV settings used in kernel. +- Fix man page for dmsetup udevcreatecookie. + +* Mon Jan 18 2016 Peter Rajnoha - 2.02.140-3 +- Fix lvm2app to return either 0 or 1 for lvm_vg_is_{clustered,exported}. +- Add kernel_discards report field to display thin pool discard used in kernel. +- Correct checking of target presence when driver access is disabled. +- Eval poolmetadatasize arg earlier in lvresize. +- Fix vgcfgrestore to respect allocatable attribute of PVs. +- Add report/mark_hidden_devices to lvm.conf. +- Use brackets consistently in report fields to mark hidden devices. +- Restore background polling processing during auto-activation (2.02.119). +- Fix invalid memory read when reporting cache LV policy_name (2.02.126). + +* Mon Jan 11 2016 Peter Rajnoha - 2.02.139-2 +- Update lvmlockd with the new VG seqno before devices are suspended. +- Rework vgrename to use the common processing code in toollib. +- Make pvs show new devices on the system since the last .cache update. +- Document F,D and M thin pool health status chars for lv_attr in lvs man page. +- Also add lvm2-activation{-early,-net}.service systemd status for lvmdump -s. + +* Mon Jan 04 2016 Peter Rajnoha - 2.02.138-1 +- Support lvrename for hidden (used) cache pools. +- Fix lvrename for stacked cache pools +- Better support for dmsetup static linkage. +- Extend validity checks on dmeventd client socket. + +* Mon Dec 07 2015 Peter Rajnoha - 2.02.137-1 +- Restore archiving before changing metadata in vgextend (2.02.117). +- Dropped internal usage of log_suppress(2). +- Cleaned logging code for buffer size usage. +- Added internal id_read_format_try() function to check and read valid UUID. +- Change lvcreate, lvrename, lvresize to use process_each_vg. +- Change process_each_vg to handle single VG as separate arg. +- Issue error if ambiguous VG name is supplied in most commands. +- Make process_each fns always work through full list of known VG names. +- Use dm_get_status_mirror() instead of individual parsers. +- Add mem pool arg for check_transient_status() target function. +- Avoid misleading error with -m is omitted with lvconvert to raid types. +- Add system_id to vginfo cache. +- Mirror plugin in dmeventd uses dm_get_status_mirror(). +- Add dm_get_status_mirror() for parsing mirror status line. + +* Wed Dec 02 2015 Peter Rajnoha - 2.02.136-1 +- Add new --sinceversion option for lvmconfig --type new. +- Fix inactive table loaded for wrapping thin-pool when resizing it. +- Extend the list of ignored libraries when locking memory. +- Show error message when trying to create unsupported raid type. +- Improve preloading sequence of an active thin-pool target. +- Drop extra space from cache target line to fix unneded table reloads. + +* Mon Nov 23 2015 Peter Rajnoha - 2.02.135-1 +- Add a model file for Coverity. +- Show correct error message for unsupported yet cache pool repair. +- Allow lvconvert cache pools' data and metadata LV to raid. +- Fix reading of old metadata with missing cache policy or mode settings. +- Issue error if external_device_info_source=udev and udev db record incomplete. +- Update lvmetad duplicate VG name handling to use hash function extensions. +- Detect invalid vgrenames by vgid where the name is unchanged. +- Fix passing of 32bit values through daemons (mostly lvmlockd). +- Use local memory pool for whole alloc_handle manipulation. +- Add missing pointer validation after dm_get_next_target(). +- Do not deref NULL pointer in debug message for _match_pv_tags(). +- Drop unneeded stat() call when checking for sysfs file. +- Fix memory leak on error path of failing thin-pool percentage check. +- Add missing test for failing node allocation in lvmetad. +- Correct configure messages when enabling/disabling lvmlockd. +- Extend dm_hash to support multiple values with the same key. +- Add missing check for allocation inside dm_split_lvm_name(). +- Test dm_task_get_message_response for !NULL in dm_stats_print_region(). +- Add checks for failing dm_stats_create() in dmsetup. +- Add missing fifo close when failed to initialize client connection. + +* Wed Nov 18 2015 Peter Rajnoha - 2.02.134-4 +- Refactor some lvmetad code and adjust some duplicate PV messages. +- No longer repair/wipe VG/PVs if inaccessible because foreign or shared. +- Pass correct data size to mirror log calc so log can be bigger than 1 extent. + +* Tue Nov 10 2015 Fedora Release Engineering - 2.02.133-3 +- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5 + +* Mon Nov 02 2015 Peter Rajnoha - 2.02.133-2 +- Shutdown lvmetad automatically after one hour of inactivity. + +* Fri Oct 30 2015 Peter Rajnoha - 2.02.133-1 +- Support repeated -o|--options for reporting commands. +- Support -o- and -o# for reporting commands to remove and compact fields. +- Fix missing PVs from pvs output if vgremove is run concurrently. +- Remove unwanted error message when running pvs/vgs/lvs and vgremove at once. +- Check newly created VG's metadata do not overlap in metadata ring buffer. +- Check metadata area size is at least the minimum size defined for the format. +- Thin pool targets uses low_water_mark from profile. +- Dropping 'yet' from error of unsupported thick snapshot of snapshots. +- Do not support unpartitioned DASD devices with CDL formatted with pvcreate. +- For thins use flush for suspend only when volume size is reduced. +- Enable code which detects the need of flush during suspend. +- Ensure --use-policy will resize volume to fit below threshold. +- Correct percentage evaluation when checking thin-pool over threshold. +- Fix lvmcache to move PV from VG to orphans if VG is removed and lvmetad used. +- Fix lvmcache to not cache even invalid info about PV which got removed. +- Support checking of memlock daemon counter. +- Allow all log levels to be used with the lvmetad -l option. +- Add optional shutdown when idle support for lvmetad. +- Fix missing in-sync progress info while lvconvert used with lvmpolld. +- Add report/compact_output_cols to lvm.conf to define report cols to compact. +- Do not change logging in lvm2 library when it's already set. +- Check for enough space in thin-pool in command before creating new thin. +- Make libblkid detect all copies of the same signature if use_blkid_wiping=1. +- Fix vgimportclone with -n to not add number unnecessarily to base VG name. +- Cleanup vgimportclone script and remove dependency on awk, grep, cut and tr. +- Add vg_missing_pv_count report field to report number of missing PVs in a VG. +- Properly identify internal LV holding sanlock locks within lv_role field. +- Add metadata_devices and seg_metadata_le_ranges report fields for raid vols. +- Fix lvm2-{activation,clvmd,cmirrord,monitor} service to exec before mounting. +- Disable thin monitoring plugin when it fails too often (>10 times). +- Fix/restore parsing of empty field '-' when processing dmeventd event. +- Enhance dm_tree_node_size_changed() to recognize size reduction. +- Support exit on idle for dmenventd (1 hour). +- Add support to allow unmonitor device from plugin itself. +- New design for thread co-operation in dmeventd. +- Dmeventd read device status with 'noflush'. +- Dmeventd closes control device when no device is monitored. +- Thin plugin for dmeventd improved percentage usage. +- Snapshot plugin for dmeventd improved percentage usage. +- Add dm_hold_control_dev to allow holding of control device open. +- Add dm_report_compact_given_fields to remove given empty fields from report. +- Use libdm status parsing and local mem raid dmeventd plugin. +- Use local mem pool and lock only lvm2 execution for mirror dmeventd plugin. +- Lock protect only lvm2 execution for snapshot and thin dmeventd plugin. +- Use local mempool for raid and mirror plugins. +- Reworked thread initialization for dmeventd plugins. +- Dmeventd handles snapshot overflow for now equally as invalid. +- Convert dmeventd to use common logging macro system from libdm. +- Return -ENOMEM when device registration fails instead of 0 (=success). +- Enforce writethrough mode for cleaner policy. +- Add support for recognition and deactivation of MD devices to blkdeactivate. +- Move target status functions out of libdm-deptree. +- Correct use of max_write_behind parameter when generating raid target line. +- Fix dm-event systemd service to make sure it is executed before mounting. + +* Mon Oct 26 2015 Peter Rajnoha - 2.02.132-2 +- Remove %%{epoch} from cmirror requires. + +* Wed Sep 23 2015 Peter Rajnoha - 2.02.132-1 +- Fix lvmconf to set locking_type=2 if external locking library is requested. +- Remove verbose message when rescanning an unchanged device. (2.02.119) +- Add origin_uuid, mirror_log_uuid, move_pv_uuid, convert_lv_uuid report fields. +- Add pool_lv_uuid, metadata_lv_uuid, data_lv_uuid reporting fields. +- Fix PV label processing failure after pvcreate in lvm shell with lvmetad. +- Update man pages for dmsetup and dmstats. +- Improve help text for dmsetup. +- Use --noflush and --nolockfs when removing device with --force. +- Parse new Overflow status string for snapshot target. +- Check dir path components are valid if using dm_create_dir, error out if not. +- Fix /dev/mapper handling to remove dangling entries if symlinks are found. +- Make it possible to use blank value as selection for string list report field. + +* Wed Sep 16 2015 Peter Rajnoha - 2.02.131-1 +- Fix PV label processing failure after pvcreate in lvm shell with lvmetad. +- Rename 'make install_full_man' to install_all_man and add all_man target. +- Fix vgimportclone cache_dir path name (2.02.115). +- Swapping of LV identifiers handles more complex LVs. +- Use passed list of PVS when allocating space in lvconvert --thinpool. +- Disallow usage of --stripe and --stripesize when creating cache pool. +- Warn user when caching raid or thin pool data LV. +- When layering LV, move LV flags with segments. +- Ignore persistent cache if configuration changed. (2.02.127) +- Fix devices/filter to be applied before disk-accessing filters. (2.02.112) +- Make tags only when requested via 'make tags'. +- Configure supports --disable-dependency-tracking for one-time builds. +- Fix usage of configure.h when building in srcdir != builddir. +- Do not check for full thin pool when activating without messages (1.02.107). + +* Mon Sep 07 2015 Peter Rajnoha - 2.02.130-1 +- Fix use of uninitialized device status if reading outdated .cache record. +- Restore support for --monitor option in lvcreate (2.02.112). +- Read thin-pool data and metadata percent without flush. +- Detect blocked thin-pool and avoid scanning their thin volumes. +- Check if dm device is usable before checking its size (2.02.116). +- Extend parsing of cache_check version in configure. +- Make lvpoll error messages visible in lvmpolld's stderr and in syslog. +- Add 'make install_full_man' to install all man pages regardless of config. +- Parse thin-pool status with one single routine internally. +- Add --histogram to select default histogram fields for list and report. +- Add report fields for displaying latency histogram configuration and data. +- Add dmstats --bounds to specify histogram boundaries for a new region. +- Add dm_histogram_to_string() to format histogram data in string form. +- Add public methods to libdm to access numerical histogram config and data. +- Parse and store histogram data in dm_stats_list() and dm_stats_populate(). +- Add an argument to specify histogram bounds to dm_stats_create_region(). +- Add dm_histogram_bounds_from_{string,uint64_t}() to parse histogram bounds. +- Add dm_histogram handle type to represent a latency histogram and its bounds. + +* Wed Sep 02 2015 Peter Rajnoha - 2.02.129-2 +- Reinstate dm_task_get_info@Base to libdevmapper exports. (1.02.106) + +* Thu Aug 27 2015 Peter Rajnoha - 2.02.129-1 +- Drop error message when vgdisplay encounters an exported VG. (2.02.27) +- Fix shared library generation to stop exporting internal functions.(2.02.120) +- Accept --cachemode with lvconvert. +- Fix and improve reporting properties of cache-pool. +- Enable usage of --cachepolicy and --cachesetting with lvconvert. +- Don't allow to reduce size of thin-pool metadata. +- Fix debug buffer overflows in cmirrord logging. +- Add --foreground and --help to cmirrord. +- Add 'precise' column to statistics reports. +- Add --precise switch to 'dmstats create' to request nanosecond counters. +- Add precise argument to dm_stats_create_region(). +- Add support to libdm-stats for precise_timestamps +- Fix devmapper.pc pkgconfig file to declare -lrt dependency properly. + +* Tue Aug 18 2015 Peter Rajnoha - 2.02.128-1 +- Allocation setting cache_pool_cachemode is replaced by cache_mode. +- Don't attempt to close config file that couldn't be opened. +- Check for valid cache mode in validation of cache segment. +- Change internal interface handling cache mode and policy. +- When no cache policy specified, prefer smq (if available) over mq. +- Add demo cache-mq and cache-smq profiles. +- Add cmd profilable allocation/cache_policy,cache_settings,cache_mode. +- Require cache_check 0.5.4 for use of --clear-needs-check-flag. +- Fix lvmetad udev rules to not override SYSTEMD_WANTS, add the service instead. +- Fix 'dmstats list -o all' segfault. +- Separate dmstats statistics fields from region information fields. +- Add interval and interval_ns fields to dmstats reports. +- Do not include internal glibc headers in libdm-timestamp.c (1.02.104) +- Exit immediately if no device is supplied to dmsetup wipe_table. +- Suppress dmsetup report headings when no data is output. (1.02.104) +- Adjust dmsetup usage/help output selection to match command invoked. +- Fix dmsetup -o all to select correct fields in splitname report. +- Restructure internal dmsetup argument handling across all commands. +- Add dm_report_is_empty() to indicate there is no data awaiting output. +- Add more arg validation for dm_tree_node_add_cache_target(). +- Add --alldevices switch to replace use of --force for stats create / delete. + +* Mon Aug 10 2015 Peter Rajnoha - 2.02.127-1 +- Do not init filters, locking, lvmetad, lvmpolld if command doesn't use it. +- Order fields in struct cmd_context more logically. +- Add lock_type to lvmcache VG summary and info structs. +- Fix regression in cache causing some PVs to bypass filters (2.02.105). +- Make configure --enable-realtime the default now. +- Add dmstats.8 man page +- Add dmstats --segments switch to create one region per device segment. +- Add dmstats --regionid, --allregions to specify a single / all stats regions. +- Add dmstats --allprograms for stats commands that filter by program ID. +- Add dmstats --auxdata and --programid args to specify aux data and program ID. +- Add report stats sub-command to provide repeating stats reports. +- Add clear, delete, list, and print stats sub-commands. +- Add create stats sub-command and --start, --length, --areas and --areasize. +- Recognize 'dmstats' as an alias for 'dmsetup stats' when run with this name. +- Add a 'stats' command to dmsetup to configure, manage and report stats data. +- Add statistics fields to dmsetup -o. +- Add libdm-stats library to allow management of device-mapper statistics. +- Add --nosuffix to suppress dmsetup unit suffixes in report output. +- Add --units to control dmsetup report field output units. +- Add support to redisplay column headings for repeating column reports. +- Fix report header and row resource leaks. +- Report timestamps of ioctls with dmsetup -vvv. +- Recognize report field name variants without any underscores too. +- Add dmsetup --interval and --count to repeat reports at specified intervals. +- Add dm_timestamp functions to libdevmapper. +- Recognise vg/lv name format in dmsetup. +- Move size display code to libdevmapper as dm_size_to_string. + +* Mon Jul 27 2015 Peter Rajnoha - 2.02.126-2 +- Fix long option hyphen removal. (2.02.122) +- Fix clvmd freeze if client disappears without first releasing its locks. +- Fix lvconvert segfaults while performing snapshots merge. +- Ignore errors during detection if use_blkid_wiping=1 and --force is used. +- Recognise DM_ABORT_ON_INTERNAL_ERRORS env var override in lvm logging fn. +- Fix alloc segfault when extending LV with fewer stripes than in first seg. +- Fix handling of cache policy name. +- Set cache policy before with the first lvm2 cache pool metadata commit. +- Fix detection of thin-pool overprovisioning (2.02.124). +- Fix lvmpolld segfaults on 32 bit architectures. +- Add lvmlockd lock_args validation to vg_validate. +- Fix ignored --startstopservices option if running lvmconf with systemd. +- Hide sanlock LVs when processing LVs in VG unless named or --all used. +- Introduce libdevmapper wrappers for all malloc-related functions. + +* Tue Jul 14 2015 Peter Rajnoha - 2.02.125-2 +- Add Requires: system-release>=23 for lvmpolld to be enabled by default + instead of original Requires: fedora-release which may break installations + in environments where fedora-release is not available. + +* Tue Jul 07 2015 Peter Rajnoha - 2.02.125-1 +- Fix getline memory usage in lvmpolld. +- Add support --clear-needs-check-flag for cache_check of cache pool metadata. +- Add lvmetactl for developer use only. +- Rename global/lock_retries to lvmlockd_retries. +- Replace --enable-lvmlockd by --enable-lockd-sanlock and --enable-lockd-dlm. +- Include tool.h for default non-library use. +- Introduce format macros with embedded % such as FMTu64. + +* Fri Jul 03 2015 Peter Rajnoha - 2.02.124-1 +- Move sending thin pool messages from resume to suspend phase. +- Report warning when pool is overprovisioned and not auto resized. +- Recognize free-form date/time values for lv_time field in selection criteria. +- Added experimental lvmlockd with configure --enable-lvmlockd. +- Fix regression in select to match string fields if using synonyms (2.02.123). +- Fix regression when printing more lv names via display_lvname (2.02.122). +- Add missing error logging to unlock_vg and sync_local_dev_names callers. +- Add experimental support to passing messages in suspend tree. +- Add dm_report_value_cache_{set,get} to support caching during report/select. +- Add dm_report_reserved_handler to handle report reserved value actions. +- Support dynamic value in select: DM_REPORT_FIELD_RESERVED_VALUE_DYNAMIC_VALUE. +- Support fuzzy names in select: DM_REPORT_FIELD_RESERVED_VALUE_FUZZY_NAMES. +- Thin pool trace messages show a device name and major:minor. +- Add new lvm2-lockd subpackage with lvmlockd daemon. + +* Wed Jul 01 2015 Peter Rajnoha - 2.02.123-1 +- Add report/time_format lvm.conf option to define time format for report. +- Fix makefile shell compare == when building lvmetad lvmpolld (2.02.120). +- Add --type full to lvmconfig for full configuration tree view. +- Add undocumented environment variables to lvm man page. (2.02.119) +- Add device synchronization point before activating a new snapshot. +- Add --withspaces to lvmconfig to add spaces in output for better readability. +- Add custom main function to libdaemon. +- Use lvmetad to track out-of-date metadata discovered. +- Fix makefile shell compare == when building lvmetad lvmpolld (2.02.120). +- Add --type full to lvmconfig for full configuration tree view. +- Add undocumented environment variables to lvm man page. (2.02.119) +- Add device synchronization point before activating a new snapshot. +- Add --withspaces to lvmconfig to add spaces in output for better readability. +- Add custom main function to libdaemon. +- Use lvmetad to track out-of-date metadata discovered. +- Add since, after, until and before time operators to be used in selection. +- Add support for time in reports and selection: DM_REPORT_FIELD_TYPE_TIME. +- Support report reserved value ranges: DM_REPORT_FIELD_RESERVED_VALUE_RANGE. +- Support report reserved value names: DM_REPORT_FIELD_RESERVED_VALUE_NAMED. +- Add DM_CONFIG_VALUE_FMT_{INT_OCTAL,STRING_NO_QUOTES} config value format flag. +- Add DM_CONFIG_VALUE_FMT_COMMON_{ARRAY,EXTRA_SPACE} config value format flag. +- Add dm_config_value_{get,set}_format_flags to get and set config value format. + +* Mon Jun 22 2015 Peter Rajnoha - 2.02.122-1 +- Flush stdout before printing to stderr. +- Use pre-allocated buffer for printed LV names in display_lvname. +- Support thins with size of external origin unaligned with thin pool chunk. +- Allow extension of reduced thin volumes with external origins. +- Consider snapshot and origin LV as unusable if component devices suspended. +- Fix lvmconfig segfault on settings with undefined default value (2.02.120). +- Add explicit 's' (shared) LV activation mode. +- Ignore hyphens in long options names (i.e. --long-option == --longoption). +- Distinguish between on-disk and lvmetad versions of text metadata. +- Remove DL_LIBS from Makefiles for daemons that don't need them. +- Zero errno in before strtoul call in dmsetup if tested after the call. +- Zero errno in before strtoul call in lvmpolld. +- Fix a segfault in pvscan --cache --background command. +- Fix test for AREA_PV when checking for failed mirrors. +- Do not use --sysinit in lvm2-activation{-early,-net}.service if lvmpolld used. +- Maintain outdated PV info in lvmetad till all old metadata is gone from disk. +- Do not fail polling when poll LV not found (already finished or removed). +- Replace poll_get_copy_vg/lv fns with vg_read() and find_lv() in polldaemon. +- Close all device fds only in before sleep call in polldaemon. +- Simplify Makefile targets that generate exported symbols. +- Move various -D settings from Makefiles to configure.h. +- New dm_tree_node_set_thin_pool_read_only(DM_1_02_99) for read-only thin pool. +- Enhance error message when thin-pool message fails. +- Fix dmeventd logging to avoid threaded use of static variable. +- Remove redundant dmeventd SIGALRM coded. +- Add dm_task_get_errno() to return any unexpected errno from a dm ioctl call. +- Use copy of errno made after each dm ioctl call in case errno changes later. + +* Wed Jun 17 2015 Fedora Release Engineering - 2.02.120-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Thu May 21 2015 Peter Rajnoha - 2.02.120-1 +- Enable and use lvmpolld - the LVM polling daemon by default. +- Add Requires: fedora-release>=23-0.13 for lvmpolld to be enabled by default. +- Make various adjustments to Makefile compilation flags. +- Add lvmpolld debug message class. +- Add lvmpolld client mode for querying running server instance for status info. +- Fix some libdaemon socket creation and reuse error paths. +- Daemons (libdaemon) support exit on idle also in non-systemd environment. +- Provide make dist and make rpm targets +- Configure lvm.conf for use_lvmetad and use_lvmpolld. +- Add lvpoll for cmdline communication with lvmpolld. +- Add lvmpolld acting as a free-standing version of polldaemon. +- Avoid repeated identical lvmetad VG lookups in commands processing all VGs. +- Handle switches to alternative duplicate PVs efficiently with lvmetad. +- Properly validate PV size for pvcreate --restorefile. +- Fix check if pvcreate wiped device (2.02.117). +- Fix storing of vgid when caching metadata (2.02.118). +- Fix recursive lvm-config man page. (2.02.119) +- Refactor polldaemon interfaces to poll every operation by VG/LV couple +- Skip wait after testing in _wait_for_single_lv when polling finished +- Return 'None' in python for empty string properties instead of crashing. +- Distinguish signed numerical property type in reports for lvm2app library. +- Reread raid completion status immediately when progress appears to be zero. +- lvm2app closes locking on lvm_quit(). +- Configure detects /run or /var/run. +- Add missing newline in clvmd --help output. +- New dm_task_get_info(DM_1_02_97) supports internal_suspend state. +- New symbols are versioned and comes with versioned symbol name (DM_1_02_97). + +* Mon May 04 2015 Peter Rajnoha - 2.02.119-1 +- New lvm2-python3-libs subpackage to provide Python 3 bindings for LVM2. +- New LVM_LOG_FILE_EPOCH, LVM_EXPECTED_EXIT_STATUS env vars. Man page to follow. +- Remove detailed content from lvm.conf man page: use lvmconfig instead. +- Generate complete config files with lvmconfig or 'make generate'. +- Also display info on deprecated config with lvmconfig --withcomments. +- Display version since which config is deprecated in lvmconfig --withversions. +- Add --showdeprecated to lvmconfig to also display deprecated settings. +- Hide deprecated settings in lvmconfig output for all types but current,diff. +- Introduce support for exit on idle feature in libdaemon +- Add --showunsupported to lvmconfig to also display unsupported settings. +- Display unsupported settings for lvmconfig --type current,diff only by default +- Honour lvmconfig --ignoreunsupported and --ignoreadvanced for all --type. +- Make python bindings usable with python3 (and compatible with 2.6 & 2.7). +- Add lvmconfig -l|--list as shortcut for lvmconfig --type list --withsummary. +- Add lvmconfig --type list to display plain list of configuration settings. +- Introduce lvmconfig as the preferred form of 'lvm dumpconfig'. +- Add lv_ancestors and lv_descendants reporting fields. +- Add --ignorelocal option to dumpconfig to ignore the local section. +- Close connection to lvmetad after fork. +- Make lvchange able to resume background pvmove polling again. +- Split pvmove update metadata fn in an initial one and a subsequent one. +- Refactor shared pvmove and lvconvert code into new _poll files. +- Add --unconfigured option to dumpconfig to print strings unconfigured. +- Add --withsummary option to dumpconfig to print first line - summary comment. +- Use number of device holders to help choose between duplicate PVs. +- Try to make lvmetad and non-lvmetad duplicate PV handling as similar as poss. +- Issue warnings about duplicate PVs discovered by lvmetad. +- Track alternative devices with matching PVIDs in lvmetad. +- Check for lvm binary in blkdeactivate and skip LVM processing if not present. +- Add --enable-halvm and --disable-halvm options to lvmconf script. +- Add --services, --mirrorservice and --startstopservices option to lvmconf. +- Use proper default value of global/use_lvmetad when processing lvmconf script. +- Respect allocation/cling_tag_list during intial contiguous allocation. +- Make changes persist with python addTag/removeTag. +- Set correct vgid when updating cache when writing PV metadata. +- More efficient clvmd singlenode locking emulation. +- Reject lvcreate -m with raid4/5/6 to avoid unexpected layout. +- Don't skip invalidation of cached orphans if vg write lck is held (2.02.118). +- Log relevant PV tags when using cling allocation. +- Fix selection to not match if using reserved value in criteria with >,<,>=,<. +- Fix selection to not match reserved values for size fields if using >,<,>=,<. +- Include uuid or device number in log message after ioctl failure. +- Add DM_INTERNAL_SUSPEND_FLAG to dm-ioctl.h. +- Move blkdeactivate script from lvm2 package to device-mapper subpackage. +- Install blkdeactivate script and its man page with make install_device-mapper. + +* Tue Mar 24 2015 Peter Rajnoha - 2.02.118-1 +- Fix LV processing with selection to always do the selection on initial state. +- Store metadata size + checksum in lvmcache and add struct lvmcache_vgsummary. +- Remove inaccessible clustered PVs from 'pvs -a'. +- Don't invalidate cached orphan information while global lock is held. +- Avoid rescan of all devices when requested pvscan for removed device. +- Measure configuration timestamps with nanoseconds when available. +- Disable lvchange of major and minor of pool LVs. +- Fix pvscan --cache to not scan and read ignored metadata areas on PVs. +- Add After=iscsi-shutdown.service to blk-availability.service systemd unit. +- Disallow vgconvert from changing metadata format when lvmetad is used. +- Don't do a full read of VG when creating a new VG with an existing name. +- Reduce amount of VG metadata parsing when looking for vgname on a PV. +- Avoid reparsing same metadata when reading same metadata from multiple PVs. +- Save extra device open/close when scanning device for size. +- Fix seg_monitor field to report status also for mirrors and thick snapshots. +- Replace LVM_WRITE with LVM_WRITE_LOCKED flags in metadata if system ID is set. +- Preserve original format type field when processing backup files. +- Implement status action for lvm2-monitor initscript to display monitored LVs. +- Allow lvchange -p to change kernel state only if metadata state differs. +- Fix incorrect persistent .cache after report with label fields only (2.02.106). +- Reinstate PV tag recognition for pvs if reporting label fields only (2.02.105). +- Rescan devices before vgimport with lvmetad so exported VG is seen. +- Fix hang by adjusting cluster mirror regionsize, avoiding CPG msg limit. +- Do not crash when --cachepolicy is given without --cachesettings. +- Add NEEDS_FOREIGN_VGS flag to vgimport so --foreign is always supplied. +- Add --foreign to the 6 display and reporting tools and vgcfgbackup. +- Install /etc/lvm/lvmlocal.conf template with local section for systemid. +- Record creation_host_system_id in lvm2 metadata (never set yet). +- Reinstate recursive config file tag section processing. (2.02.99) +- Add 'lvm systemid' to display the current system ID (never set yet). +- Fix configure to properly recognize --with-default-raid10-segtype option. +- Do not refresh filters/rescan if no signature is wiped during pvcreate. +- Enforce none external dev info for wiping during pvcreate to avoid races. +- Add global/system_id_source and system_id_file to lvm.conf (disabled). +- Add support for VG system_id to control host access to VGs. +- Update vgextend to use process_each_vg. +- Add --ignoreskippedcluster to pvchange. +- Allow pvchange to modify several properties at once. +- Update pvchange to use process_each_pv. +- Fix pvs -a used with lvmetad to filter out devices unsuitable for PVs. +- Fix selection to recognize units for ba_start, vg_free and seg_start fields. +- Add support for -S/--select to vgexport and vgimport. +- Add support for -S/--select to vgdisplay, lvdisplay and pvdisplay without -C. +- Add support for -S/--select to vgremove and lvremove. +- Add support for -S/--select to vgchange,lvchange and pvchange. +- Add infrastructure to support selection for non-reporting tools. +- Add LVM_COMMAND_PROFILE env var to set default command profile name to use. +- Set CLOEXEC flag on file descriptors originating in libdaemon. +- Add dm_report_object_is_selected for generalized interface for report/select. + +* Fri Jan 30 2015 Peter Rajnoha - 2.02.116-3 +- Deactivate unused thin pools activated with lvm2 pre-2.02.112 versions. +- Check lock holding LV when lvconverting stacked raid LV in cluster. +- Support udev external dev info for filters: PV min size, mpath, md, partition. +- Add fw_raid_component_detection lvm.conf option to enable FW raid detection. +- Add devices/external_device_info_source lvm.conf option ("none" by default). +- Scan pools in for_each_sub_lv() and add for_each_sub_lv_except_pools(). +- Fix lvm2app lvm_lv_get_property return value for fields with info/status ioctl. +- Fix lvm2app regression in lvm_lv_get_attr causing unknown values (2.02.115). +- Preserve chunk size with repair and metadata swap of a thin pool. +- Fix raid --splitmirror 1 functionality (2.02.112). +- Fix tree preload to handle splitting raid images. +- Do not support unpartitioned DASD devices. +- Improve config validation to check if setting with string value can be empty. + +* Thu Jan 29 2015 Peter Rajnoha - 2.02.115-2 +- Set default cache_mode to writehrough when missing in metadata. +- Add BuildRequires: device-mapper-persistent-data + for proper thin and cache tool configuration. + +* Thu Jan 22 2015 Peter Rajnoha - 2.02.115-1 +- Report segment types without monitoring support as undefined. +- Support lvchange --errorwhenfull for thin pools. +- Improve the processing and reporting of duplicate PVs. +- Report lv_health_status and health attribute also for thin pool. +- Add lv_when_full reporting field. +- Add support for lvcreate --errorwhenfull y|n for thin pools. +- Fix lvconvert --repair to honour resilience requirement for segmented RAID LV. +- Filter out partitioned device-mapper devices as unsuitable for use as PVs. +- Also notify lvmetad about filtered device if using pvscan --cache DevicePath. +- Use LVM's own selection instead of awk expressions in clvmd startup scripts. +- Do not filter out snapshot origin LVs as unusable devices for an LVM stack. +- Fix incorrect rimage names when converting from mirror to raid1 LV (2.02.112). +- Introduce pvremove_many to avoid excessive metadata re-reading and messages. +- Check for cmirror availability during cluster mirror creation and activation. +- Add cache_policy and cache_settings reporting fields. +- Add missing recognition for --binary option with {pv,vg,lv}display -C. +- Fix vgimportclone to notify lvmetad about changes done if lvmetad is used. +- Fix vgimportclone to properly override config if it is missing in lvm.conf. +- Fix automatic use of configure --enable-udev-systemd-background-jobs. +- Correctly rename active split LV with -splitmirrors for raid1. +- Add report/compact_output to lvm.conf to enable/disable compact report output. +- Still restrict mirror region size to power of 2 when VG extent size is not. +- Reduce severity of ioctl error message when dmeventd waitevent is interrupted. +- Report 'unknown version' when incompatible version numbers were not obtained. +- Report more info from thin pool status (out of data, metadata-ro, fail). +- Support error_if_no_space for thin pool target. +- Fix segfault while using selection with regex and unbuffered reporting. +- Add dm_report_compact_fields to remove empty fields from report output. +- Remove unimplemented dm_report_set_output_selection from libdevmapper.h. + +* Fri Nov 28 2014 Alasdair Kergon - 2.02.114-3 +- Avoid file descriptor leak in clients that open repeated lvmetad connections. +- Add --cachepolicy and --cachesettings to lvcreate. +- Fix regression when parsing /dev/mapper dir (2.02.112). +- Fix missing rounding to 64KB when estimating optimal thin pool chunk size. +- Fix typo in clvmd initscript causing CLVMD_STOP_TIMEOUT var to be ignored. +- Fix size in pvresize "Resizing to ..." verbose msg to show proper result size. + +* Thu Nov 27 2014 Peter Rajnoha - 2.02.113-2 +- Fix regression when parsing /dev/mapper dir (2.02.112). +- Fix missing rounding to 64KB when estimating optimal thin pool chunk size. +- Fix typo in clvmd initscript causing CLVMD_STOP_TIMEOUT variable to be ignored. +- Fix size in pvresize "Resizing to ..." verbose msg to show proper result size. + +* Tue Nov 25 2014 Alasdair Kergon - 2.02.113-1 +- Add --cachepolicy and --cachesettings options to lvchange. +- Validate that converted volume and specified pool volume differ in lvconvert. +- Fix regression in vgscan --mknodes usage (2.02.112). +- Default to configure --enable-udev-systemd-background-jobs for systemd>=205. +- Fix ignore_vg() to properly react on various vg_read errors (2.02.112). +- Failed recovery returns FAILED_RECOVERY status flag for vg_read(). +- Exit with non-zero status code when pvck encounters a problem. +- Fix clean_tree after activation/resume for cache target (2.02.112). +- Fix memory corruption with sorting empty string lists (1.02.86). +- Fix man dmsetup.8 syntax warning of groff. +- Accept unquoted strings and / in place of {} when parsing configs. + +* Tue Nov 11 2014 Peter Rajnoha - 2.02.112-1 +- Add cache_{read,write}_{hits,misses} reporting fields. +- Add cache_{total,used,dirty}_blocks reporting fields. +- Add _corig as reserved suffix. +- Reduce number of VG writes and commits when creating spare volumes. +- When remove_layer_from_lv() removes layer, restore subLV names. +- Cache-pool in use becomes invisible LV. +- Don't prompt for removal of _pmspare in VG without pool metadata LV. +- Deactivation of snapshot origin detects and deactivates left-over snapshots. +- Properly report error when taking snapshot of any cache type LV. +- Add basic thread debugging messages to dmeventd. +- Include threads being shutdown in dmeventd device registration responses. +- Inital support for external users of thin pools based on transaction_id. +- Report some basic percentage info for cache pools. +- Introduce size_mb_arg_with_percent() for advanced size arg reading. +- Add extra support for '.' as decimal point in size args. +- Add configure parameters for default segment type choices. +- Add global/sparse_segtype_default setting to use thin for --type sparse. +- Update and correct lvcreate and lvcovert man pages. +- Mark pools and snapshots as unzeroable volumes. +- Check for zeroing of volume after segment type is fully detected. +- Better support for persistent major and minor options with lvcreate. +- Refactor lvcreate towards more complete validation of all supported options. +- Support lvcreate --type linear. +- Improve _should_wipe_lv() to warn with message. +- Inform about temporarily created volumes only in verbose mode. +- Better support for --test mode with pool creation. +- Query lock holding LV when replacing and converting raid volumes. +- Add extra validate for locked lv within validate_lv_cache_create(). +- Add internal lvseg_name() function. +- Skip use of lock files for virtual internal VG names. +- Fix selection on {vg,lv}_permissions fields to properly match selection criteria. +- Fix lv_permissions reporting to display read-only{-override} instead of blank. +- Fix liblvm2cmd and lvm shell to respect quotes around args in cmd line string. +- Permit extent sizes > 128KB that are not power of 2 with lvm2 format. +- Remove workaround for lvm2-monitor.service hang on stop if lvmetad stopped. +- Change vgremove to use process_each_lv_in_vg. +- Allow lvconvert --repair and --splitmirrors on internal LVs. +- Introduce WARN_ flags to control some metadata warning messages. +- Use process_each_pv in vgreduce. +- Refactor process_each_pv in toollib. +- Introduce single validation routine for pool chunk size. +- Support --yes like --force in vg/lvremove to skip y|n prompt. +- Support --yes with lvconvert --splitsnapshot. +- Fix detection of unsupported thin external lvconversions. +- Fix detection of unsupported cache and thin pool lvconversions. +- Fix detection of unsupported lvconversion of cache to snapshot. +- Improve code for creation of cache and cache pool volumes. +- Check cluster-wide (not local) active status before removing LV. +- Properly check if activation of removed cached LV really activated. +- lvremove cached LV removes cachepool (keep with lvconvert --splitcache). +- Always remove spare LV with last removed pool volume. +- Support lvconvert --splitcache and --uncache of cached LV. +- Option --cache has also shortcut -H (i.e. lvcreate -H). +- Refactor lvcreate code and better preserve --type argument. +- Refactor filter processing around lvmetad. +- Refactor process_each_lv in toollib. +- Refactor process_each_vg in toollib. +- Pools cannot be used as external origin. +- Use lv_update_and_reload() for snapshot reload. +- Don't print message in adjusted_mirror_region_size() in activation. +- Improve lv_update_and_reload() to find out proper lock holding LV. +- Improve search of LV in lv_ondisk(). +- Do not scan sysfs in lv_check_not_in_use() when device is closed. +- Backup final metadata after resync of mirror/raid. +- Unify handling of --persistent option for lvcreate and lvchange. +- Validate major and minor numbers stored in metadata. +- Use -fPIE when linking -pie executables. +- Support DEBUG_MEMLOCK to trap unsupported mmap usage. +- Enable cache segment type by default. +- Ensure only supported volume types are used with cache segments. +- Fix inablility to specify cachemode when 'lvconvert'ing to cache-pool. +- Grab cluster lock for active LVs when setting clustered attribute. +- Use va_copy to properly pass va_list through functions. +- Add function to detect rotational devices. +- Review internal checks for mirror/raid/pvmove volumes. +- Track mirror segment type with separate MIRROR flag. +- Fix cmirror endian conversions. +- Introduce lv_is_pvmove/locked/converting/merging macros. +- Avoid leaving linear logical volume when thin pool creation fails. +- Don't leak alloc_handle on raid target error path. +- Properly validate raid leg names. +- Archive metadata before starting their modification in raid target. +- Add missing vg_revert() in suspend_lv() raid and snapshot error path. +- Add missing backup of lvm2 metadata after some raid modifications. +- Use vg memory pool for extent allocation. +- Add allocation/physical_extent_size config option for default PE size of VGs. +- Demote an error to a warning when devices known to lvmetad are filtered out. +- Re-order filter evaluation, making component filters global. +- Fix logic that checks for full scan before iterating through devices. +- Introduce common code to modify metadata and reload updated LV. +- Fix rename of active snapshot volume in cluster. +- Make sure shared libraries are built with RELRO option. +- Update cache creation and dm_config_node to pass policy. +- Allow activation of any thin-pool if transaction_id supplied is 0. +- Don't print uninitialized stack bytes when non-root uses dm_check_version(). +- Fix selection criteria to not match reserved values when using >, <, >=, <. +- Add DM_LIST_HEAD_INIT macro to libdevmapper.h. +- Fix dm_is_dm_major to not issue error about missing /proc lines for dm module. + +* Mon Sep 01 2014 Peter Rajnoha - 2.02.111-1 +- Pass properly sized char buffers for sscanf when initializing clvmd. +- Reinstate nosync logic when extending mirror. (2.02.110) +- Fix total area extent calculation when allocating cache pool. (2.02.110) +- Restore proper buffer size for parsing mountinfo line (1.02.89) + +* Wed Aug 27 2014 Peter Rajnoha - 2.02.110-1 +- Fix manipulation with thin-pools which are excluded via volume_list. +- Support lv/vgremove -ff to remove thin vols from broken/inactive thin pools. +- Fix typo breaking configure --with-lvm1=shared. +- Modify lvresize code to handle raid/mirrors and physical extents. +- Don't allow pvcreate to proceed if scanning or filtering fails. +- Cleanly error when creating RAID with stripe size < PAGE_SIZE. +- Print name of LV which on activation triggers delayed snapshot merge. +- Add lv_layout and lv_role LV reporting fields. +- Properly display lvs lv_attr volume type and target type bit for cache origin. +- Fix pvcreate_check() to update cache correctly after signature wiping. +- Fix primary device lookup failure for partition when processing mpath filter. +- If LV inactive and non-clustered, do not issue "Cannot deactivate" on -aln. +- Remove spurious "Skipping mirror LV" message on pvmove of clustered mirror. +- Improve libdevmapper-event select() error handling. +- Add extra check for matching transation_id after message submitting. +- Add dm_report_field_string_list_unsorted for str. list report without sorting. +- Support --deferred with dmsetup remove to defer removal of open devices. +- Update dm-ioctl.h to include DM_DEFERRED_REMOVE flag. +- Add support for selection to match string list subset, recognize { } operator. +- Fix string list selection with '[value]' to not match list that's superset. +- Fix string list selection to match whole words only, not prefixes. + +* Sun Aug 17 2014 Fedora Release Engineering - 2.02.109-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Tue Aug 5 2014 Alasdair Kergon - 2.02.109-1 +- Allow approximate allocation with +%%FREE in lvextend. +- Fix a segfault in lvscan --cache when devices were already missing. (2.02.108) +- Display actual size changed when resizing LV. +- Remove possible spurious "not found" message on PV create before wiping. +- Handle upgrade from 2.02.105 when an LV now gaining a uuid suffix is active. +- Remove lv_volume_type field from reports. (2.02.108) +- Fix incorrect persistent .cache after vgcreate with PV creation. (2.02.108) +- Add dm_tree_set_optional_uuid_suffixes to libdevmapper to handle upgrades. + +* Wed Jul 23 2014 Alasdair Kergon - 2.02.108-1 +- Remove an erroneous duplicate const from libdevmapper.h. (2.02.107) +- Add lvscan --cache which re-scans constituents of a particular LV. +- Make dmeventd's RAID plugin re-scan failed PVs when lvmetad is in use. +- Improve code sharing for lvconvert and lvcreate and pools (cache & thin). +- Improve lvconvert --merge validation. +- Improve lvconvert --splitsnapshot validation. +- Add report/list_item_separator lvm.conf option. +- Add lv_active_{locally,remotely,exclusively} LV reporting fields. +- Enhance lvconvert thin, thinpool, cache and cachepool command line support. +- Display 'C' only for cache and cache-pool target types in lvs. +- Prompt for confirmation before change LV into a snapshot exception store. +- Return proper error codes for some failing lvconvert funtions. +- Add initial code to use cache tools (cache_check|dump|repair|restore). +- Support lvdisplay --maps for raid. +- Add --activationmode degraded to activate degraded raid volumes by default. +- Add separate lv_active_{locally,remotely,exclusively} LV reporting fields. +- Recognize "auto"/"unmanaged" values in selection for appropriate fields only. +- Add report/binary_values_as_numeric lvm.conf option for binary values as 0/1. +- Add --binary arg to pvs,vgs,lvs and {pv,vg,lv}display -C for 0/1 on reports. +- Add separate reporting fields for each each {pv,vg,lv}_attr bit. +- Separate LV device status reporting fields out of LV fields. +- Fix regression causing PVs not in VGs to be marked as allocatable (2.02.59). +- Fix VG component of lvid in vgsplit/vgmerge and check in vg_validate. +- Add lv_full_name, lv_parent and lv_dm_path fields to reports. +- Change lv_path field to suppress devices that never appear in /dev/vg. +- Postpone thin pool lvconvert prompts (2.02.107). +- Require --yes option to skip prompt to lvconvert thin pool chunksize. +- Support lvremove -ff to remove thin volumes from broken thin pools. +- Require --yes to skip raid repair prompt. +- Change makefile %%.d generation to handle filename changes without make clean. +- Fix use of buildir in make pofile. +- Enhance private volumes UUIDs with suffixed for easier detection. +- Do not use reserved _[tc]meta volumes for temporary LVs. +- Leave backup pool metadata with _meta%%d suffix instead of reserved _tmeta%%d. +- Allow RAID repair to reuse PVs from same image that suffered a failure. +- New RAID images now avoid allocation on any PVs in the same parent RAID LV. +- Always reevaluate filters just before creating PV. +- Fix dm_report_field_string_list to handle delimiter with multiple chars. +- Add dm_report_field_reserved_value for per-field reserved value definition. + +* Fri Jul 18 2014 Tom Callaway - 2.02.107-2 +- fix license handling + +* Tue Jun 24 2014 Peter Rajnoha - 2.02.107-1 +- Add cmirror-standalone subpackage containing new lvm2-cmirrord.service + systemd unit for standalone cmirrord daemon management without cluster + resource manager involvement. +- Add lvm2-cluster-standalone subpackage containing new lvm2-clvmd.service + and lvm2-cluster-activation.service systemd unit for standalone clvmd + daemon management without cluster resource manager involvement. +- Add Requires: resource-agents for lvm2-cluster and cmirror subpackages. + The resource-agents package provides "clvm" cluster resource to manage + clvmd and cmirrord instances. This replaces obsolete clvmd and cmirrord + initscripts. +- Introduce LCK_ACTIVATION to avoid concurrent activation of basic LV types. +- Fix open_count test for lvchange --refresh or mirrors and raids. +- Update pvs,vgs,lvs and lvm man page for selection support. +- Add -S/--select to lvm devtypes for report selection. +- Add -S/--select to pvs,vgs,lvs and {pv,vg,lv}display -C for report selection. +- Use dm_report_init_with_selection now, implicit "selected" field appears. +- Make use of libdm's DM_REPORT_FIELD_TYPE{SIZE,PERCENT,STRING_LIST} for fields. +- Support all-or-nothing pvmove --atomic. +- Automatically add snapshot metadata size for -l %%ORIGIN calculation. +- When converting RAID origin to cache LV, properly rename sub-LVs. +- Use RemoveOnStop for lvm2-lvmetad.socket systemd unit. +- Add thin-generic configuration profile for generic thin settings. +- Fix crash when reporting empty labels on pvs. +- Use retry_deactivation also when cleaning orphan devices. +- Wait for client threads when shutting down lvmetad. +- Remove PV from cache on pvremove. +- Avoid repeatedly reporting of failure to connect to lvmetad. +- Introduce MDA_FAILED to permit metadata updates even if some mdas are missing. +- Prompt when setting the VG cluster attr if the cluster is not setup. +- Allow --yes to skip prompt in vgextend (worked only with -f). +- Don't use name mangling for LVM - it never uses dm names with wrong char set. +- Remove default.profile and add {command,metadata}_profile_template.profile. +- Use proper umask for systemd units generated by lvm2-activation-generator. +- Check for failing mirror_remove_missing() function. +- Prompt before converting volumes to thin pool and thin pool metadata. +- Add dumpconfig --type profilable-{metadata,command} to select profile type. +- Exit immediately with error if command profile is found invalid. +- Separate --profile cmd line arg into --commandprofile and --metadataprofile. +- Strictly separate command profiles and per-VG/LV profiles referenced in mda. +- Fix dumpconfig --type diff when run as second and later cmd in lvm shell. +- Fix wrong profile reuse from previous run if another cmd is run in lvm shell. +- Move cache description from lvm(8) to new lvmcache(7) man page. +- Display skipped prompt in silent mode. +- Make reporting commands show help about possible sort keys on '-O help'. +- Add metadata_percent to lvs_cols. +- Take account of parity areas with alloc anywhere in _calc_required_extents. +- Use proper uint64 casting for calculation of cache metadata size. +- Better support for nesting of blocking signals. +- Use only sigaction handler and drop duplicate signal handler. +- Separate signal handling and flock code out into lib/misc. +- Don't start dmeventd checking seg_monitor and monitoring is disabled. +- Catch CTRL-c during pvremove prompts. +- Show correct availability status for snapshot origin in lvscan. +- Move segment thin pool/volume info into segment display 'lvdisplay --maps'. +- Display thin pool usage even when just thin volume is available. +- Display monitoring status for monitorable segments in 'lvdisplay --maps'. +- Display virtual extents for virtual LVs in 'lvdisplay --maps'. +- Make vgsplit fail cleanly when not all PVs are specified for RAID 4/5/6. +- Make vgsplit work on mirrors with logs that share PVs with images. +- Use devices/ignore_suspended_devices=0 by default if not defined in lvm.conf. +- Use proper libmem mempool for allocation of unknown segment name. +- Add --readonly to reporting and display tools for lock-free metadata access. +- Add locking_type 5 for dummy locking for tools that do not need any locks. +- Fix _recover_vg() error path when lock conversion fails. +- Use X for LV attributes that are unknown when activation disabled. +- Only output lvdisplay 'LV Status' field when activation is enabled. +- Use lvmetad_used() in pvscan instead of config_tree. +- Configure --enable-udev-systemd-background-jobs if not disabled explicitly. +- Add lvmdump -s to collect system info and context (currently systemd only). +- Refactor allocation code to make A_POSITIONAL_FILL explicit. +- Use thread-safe ctime_r() for clvmd debug logging. +- Skip adding replies to already finished reply thread. +- Use mutex to check number of replies in request_timed_out() in clvmd. +- Drop usage of extra reply_mutex for localsock in clvmd. +- Protect manipulation with finished flag with mutex in clvmd. +- Shift mutex creation and destroy for localsock in clvmd to correct place. +- Fix usage of --test option in clvmd. +- Skip more libraries to be mlocked in memory. +- Remove LOCKED flag for pvmove replaced with error target. +- Return invalid command when specifying negative polling interval. +- Make "help" and "?" reporting fields implicit. +- Recognize implicit "selected" field if using dm_report_init_with_selection. +- Add support for implicit reporting fields which are predefined in libdm. +- Add DM_REPORT_FIELD_TYPE_PERCENT: separate number and percent fields. +- Add dm_percent_range_t,dm_percent_to_float,dm_make_percent to libdm for reuse. +- Add dm_report_reserved_value to libdevmapper for reserved value definition. +- Also display field types when listing all fields in selection help. +- Recognize "help" keyword in selection string to show brief help for selection. +- Always order items reported as string list field lexicographically. +- Add dm_report_field_string_list to libdevmapper for direct string list report. +- Add DM_REPORT_FIELD_TYPE_STRING_LIST: separate string and string list fields. +- Add dm_str_list to libdevmapper for string list type definition and its reuse. +- Add dmsetup -S/--select to define selection criteria for dmsetup reports. +- Add dm_report_init_with_selection to intialize report with selection criteria. +- Add DM_REPORT_FIELD_TYPE_SIZE: separate number and size reporting fields. +- Use RemoveOnStop for dm-event.socket systemd unit. +- Document env var 'DM_DEFAULT_NAME_MANGLING_MODE' in dmsetup man page. +- Warn user about incorrect use of cookie with 'dmsetup remove --force'. +- Also recognize 'help'/'?' as reserved sort key name to show help. +- Add dm_units_to_factor for size unit parsing. +- Increase bitset size for minors for thin dmeventd plugin. + +* Mon Jun 09 2014 Alasdair Kergon - 2.02.106-5 +- Remove separate sub-package release tags to fix last commit. + +* Sat Jun 07 2014 Fedora Release Engineering - 2.02.106-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue Apr 29 2014 Peter Rajnoha - 2.02.106-3 +- Remove obsolete lvm2-sysvinit subpackage. + +* Thu Apr 24 2014 Peter Rajnoha - 2.02.106-2 +- Require exact lvm2/device-mapper version among LVM2 subpackages + so all of them are always updated synchronously within one update. + +* Fri Apr 11 2014 Peter Rajnoha - 2.02.106-1 +- Require latest device-mapper-persistent-data 0.3.2-1. +- Fix ignored --dataalignment/dataalignmentoffset for pvcreate --restorefile. +- Fix lost information about bootloader area when using lvmetad. +- Don't require --major to be specified when using -My option on kernels > 2.4. +- Add configure --disable-thin_check_needs_check to support old thin_check. +- Use thin_check --clear-needs-check-flag by default. +- Add lvmthin man page to section 7. +- Ensure mapped device names are not too long in vg_validate and lvrename. +- Ensure resume failure in lvrename results in command failure. +- Add explicit error message when using lvdisplay -c -m. +- Report error if superfluous argument (e.g. PV name) supplied to pvscan. +- Fix error message for pvdisplay -c -m and add one for pvdisplay -c -s. +- Use EINVALID_CMD_LINE correctly instead of ECMD_FAILED in vgimport/export. +- Obtain list of known VGs from lvmetad for pvchange --all. +- Add man page for lvm-dumpconfig to section 8. +- Validate name for renamed sub LVs. +- When lvrename fails on argument parsing return EINVALID_CMD_LINE. +- Fix exit code regression in failing pvchange command (2.02.66). +- Include 'lvm dumpconfig --type missing' and '--type diff' output to lvmdump. +- Return failure when specifying negative size for pvresize. +- Fix memory corruption in cmd context refresh if clvmd leaks opened device. +- Reinitialise lvmcache properly on fork to fix premature polldaemon exit. +- Add 'lvm dumpconfig --type diff' to show differences from defaults. +- Fix swap signature detection for devices smaller then 2MB. +- Resolve memory release order for clvmd shutdown. +- Report error when lvm2 activation is released in critical_section. +- Fix memory corruption when pvscan reports long pv names. +- Do not report internal orphan VG names when reporting pvdisplay/pvscan. +- Fix pvdisplay -c man page referencing KB instead of sectors. +- Skip redundant synchronization calls on local clvmd. +- Use correct PATH_MAX for locking dir path. +- Do not check for backups when when its creation is disabled. +- Don't allow --mergedconfig without --type current in dumpconfig. Fix memleak. +- Make global/lvdisplay_shows_full_device_path lvm.conf setting profilable. +- Make global/{units|si_unit_consistency|suffix} lvm.conf setting profilable. +- Validate minimal chunk size for snapshot COW volume in lvconvert. +- Disallow lvconvert of origin to snapshot COW volume. +- Make report lvm.conf settings profilable. +- Add existing report settings to lvm.conf. +- Use VG read lock during 'pvscan --cache -aay' autoactivation. +- Issue a VG refresh before autoactivation only if the PV has changed/is new. +- Add flag to lvmetad protocol to indicate the PV scanned has changed/is new. +- Also add vgname to lvmetad protocol when referencing VGs for PVs scanned. +- Add man page for lvm2-activation-generator. +- Don't print an error and accept empty value for global/thin_disabled_features. +- Do not try to check empty pool with scheduled messages. +- Fix return value in pool_has_message() when quering for any message. +- Cleanup all client resources on clvmd exit. +- Use BLKID_CFLAGS when compiling with blkid support. +- Make lvm 'dumpconfig --type default' complete for it to be consumed by lvm. +- Run pvscan --cache via systemd-run in udev if the PV label is detected lost. +- Fix memleak when lvmetad discovers PV to appear on another device. +- Fix calculation of maximum size of COW device for snapshot (2.02.99). +- Do not allow stripe size to be bigger then extent size for lvresize. +- Zero snapshot COW header when creating read-only snapshot. +- Comment out config lines in dumpconfig output without default values defined. +- Improve detection of clustered mirror support. +- Enhance raid code with feature flags, for now checks for raid10. +- Move parsing of VG metadata from vg_commit() back to vg_write() (2.02.99) +- Avoid a PV label scan while in a critical section. +- Create /dev/disk/by-id/lvm-pv-uuid- symlink for each PV via udev. +- lvcreate computes RAID4/5/6 stripes if not given from # of allocatable PVs. +- Fix merging of old snapshot into thin volume origin. +- Use --ignoreskippedcluster in lvm2-monitor initscript/systemd unit. +- Do not use VG read/write state for LV read/write state. +- Use --ignoreskippedcluster in activation systemd units if use_lvmetad=0. +- Allow approximate allocation when specifying size in percentage terms. +- Add basic LVM support for cache[pool] segment types. +- Use local exclusive activation for creation of raid in cluster. +- Use correctly signed 64b constant when selecting raid volumes. +- Remove ExecReload from lvmetad systemd unit: lvmetad -R undefined. (2.02.98) +- Do not fork lvmetad if running under systemd. +- Wipe DM_snapshot_cow signature without prompt in new LVs with blkid wiping. +- Avoid exposing temporary devices when initializing raid metadata volumes. +- Add internal tags command to display any tags defined on the host. +- Prohibit use of external origin with size incompatible with thin pool. +- Avoid trying to convert single to thin pool and volume at the same time. +- Add support for partitions on ZFS zvol. +- Fix unwanted drop of hold flocks on forked children. +- Respect LVM_LVMETAD_PIDFILE env var for lvm command. +- Fix test when checking target version for available thin features. +- Detect thin feature external_origin_extend and limit extend when missing. +- Issue error if libbblkid detects signature and fails to return offset/length. +- Update autoconf config.guess/sub to 2014-01-01. +- Online thin pool metadata resize requires 1.10 kernel thin pool target. +- Check for sprintf error when building internal device path. +- Check for sprintf error when creating path for dm control node. +- When buffer for dm_get_library_version() is too small, return error code. +- Always reinitialize _name_mangling_mode in dm_lib_init(). +- Stop timeout thread immediately when the last worker thread is finished. +- Fix dmeventd logging with parallel wait event processing. +- Reuse _node_send_messages() for validation of transaction_id in preload. +- Transaction_id could be lower by one only when messages are prepared. +- Wrap is_selinux_enabled() to be called just once. +- Use correctly signed 64b constant when working with raid volumes. +- Exit dmeventd with pidfile cleanup instead of raising SIGKILL on DIE request. +- Add new DM_EVENT_GET_PARAMETERS request to dmeventd protocol. +- Do not use systemd's reload for dmeventd restart, use dmeventd -R instead. + +* Mon Jan 27 2014 Peter Rajnoha - 2.02.105-2 +- Avoid exposing temporary devices when initializing thin pool volume. +- Remove udev rule for multipath's PATH_FAILED event processing, + multipath handles that properly in its own udev rules now. +- Remove duplicate udev rule for cryptsetup temporary devices, + cryptsetup handles that properly directly in its code. + +* Tue Jan 21 2014 Peter Rajnoha - 2.02.105-1 +- Fix thin LV flagging for udev to skip scanning only if the LV is wiped. +- Replace use of xfs_check with xfs_repair in fsadm. +- Mark lvm1 format metadata as FMT_OBSOLETE. Do not use it with lvmetad. +- Invalidate cached VG struct after a PV in it gets orphaned. (2.02.87) +- Mark pool format metadata as FMT_OBSOLETE. +- Use major:minor in lvm2-pvscan@.service for proper global_filter application. +- Syntax and spelling fixes in some man pages. +- Dependency scan counts with snapshots and external origins. +- Make sure VG extent size is always greater or equal to PV phys. block size. +- Optimize double call of stat() for cached devices. +- Enable support for thin provisioning for default configuration. +- Disable online thin pool metadata resize for 1.9 kernel thin target. +- Shortened code for initialization of raid segment types. +- Test for remote exclusive activation after activation fails. +- Support lvconvert --merge for thin snapshots. +- Add support to read thin device id from table line entry. +- Drop extra test for origin when testing merging origin in lv_refresh(). +- Extend lv_remove_single() to not print info about removed LV. +- Replace open_count check with lv_check_not_in_use() for snapshot open test. +- Add error messages with LV names for failing lv refresh. +- Compile/link executables with new RELRO and PIE options (non-static builds). +- Support per-object compilation cflags via CFLAGS_object.o. +- Automatically detect support for compiler/linker options to use RELRO and PIE. +- Add --splitsnapshot to lvconvert to separate out cow LV. +- Reinstate origin reload to complete lvconvert -s with active LVs. (2.02.98) +- Select only active volume groups if vgdisplay -A is used. +- Add -p and LVM_LVMETAD_PID env var to lvmetad to change pid file. +- Allow lvmetad to reuse stale socket. +- Only unlink lvmetad socket on error if created by the same process. +- Append missing newline to lvmetad missing socket path error message. +- Add allocation/use_blkid_wiping to lvm.conf to enable blkid wiping. +- Enable blkid_wiping by default if the blkid library is present. +- Add configure --disable-blkid_wiping to disable libblkid signature detection. +- Add -W/--wipesignatures lvcreate option to support wiping on new LVs. +- Add allocation/wipe_signatures_when_zeroing_new_lvs to lvm.conf. +- Do not fail the whole autoactivation if the VG refresh done before fails. +- Do not connect to lvmetad on vg/lvchange --sysinit -aay and socket absent. +- Use lv_check_not_in_use() when testing device in use before merging. +- Check for failure of lvmcache_add_mda() when writing pv. +- Check for failure of dev_get_size() when reporting device size. +- Drop extra unneeded '/' when scanning sysfs directory. +- Fix undef value if skipped clustered VG ignored for toollib PV seg. (2.02.103) +- Support validation of VG/LV names in liblvm/python. +- Allow creation of PVs with arguments to liblvm/python. +- Ensure sufficient metadata copies retained in liblvm/python vgreduce. +- Fix installation of profiles from conf subdir when not building in srcdir. +- Show UUIDs for missing PVs in reports. +- Add reporting of thin_id device id for thin volumes. +- Fix reporting of empty numerical values for recently-added fields. +- Revert activation of activated nodes if a node preload callback fails. +- Avoid busy looping on CPU when dmeventd reads event DM_WAIT_RETRY. +- Ensure global mutex is held when working with dmeventd thread. +- Drop taking timeout mutex for un/registering dmeventd monitor. +- Allow section names in config file data to be quoted strings. +- Close fifos before exiting in dmeventd restart() error path. +- Catch invalid use of string sort values when reporting numerical fields. +- Require util-linux >= 2.24 for blkid wiping support (via device-mapper pkg). +- Add BuildRequires: libblkid-devel to build with blkid wiping functionality. +- Do not install /run and /run/lvm directory but only own them by lvm2 package. + These dirs are controlled by systemd's tmpfiles.d/lvm2.conf configuration. +- Consolidate file permissions for all packaged files. + +* Thu Jan 16 2014 Ville Skyttä - 2.02.104-4 +- Drop INSTALL from docs, escape percents in %%changelog. + +* Fri Dec 13 2013 Peter Rajnoha - 2.02.104-3 +- Change lvm2-python-libs to require lvm2, not just lvm2-libs. + +* Wed Dec 11 2013 Peter Rajnoha - 2.02.104-2 +- Fix SYSTEMD_READY assignment for foreign devs in lvmetad rules. + +* Thu Nov 14 2013 Peter Rajnoha - 2.02.104-1 +- Workaround VG refresh race during autoactivation by retrying the refresh. +- Handle failures in temporary mirror used when adding images to mirrors. +- Fix and improve logic for implicitely exclusive activations. +- Return success when LV cannot be activated because of volume_list filter. +- Return proper error state for remote exclusive activation. +- Fix clvmd message verification to not reject REMOTE flag. (2.02.100) +- Compare equality of double values with DBL_EPSILON predefined constant. +- Use additional gcc warning flags by default. +- Add ignore_lvm_mirrors to config file to read/ignore labels on mirrors. +- Use #ifdef __linux__ instead of linux throughout. +- Consistently report on stderr when device is not found for dmsetup info. +- Skip race errors when non-udev dmsetup build runs on udev-enabled system. +- Skip error message when holders are not present in sysfs. + +* Wed Oct 30 2013 Peter Rajnoha - 2.02.103-3 +- Fix missing lvmetad scan for PVs found on MD partitions. +- Respect DM_UDEV_DISABLE_OTHER_RULES_FLAG in lvmetad udev rules. + +* Fri Oct 25 2013 Peter Rajnoha - 2.02.103-2 +- Add internal flag for temporary LVs to properly direct udev to not interfere. +- Fix endless loop in blkdeactivate ... if unable to umount/deactivate. +- Add dev-block-:.device systemd alias for complete PV tracking. +- Use major:minor as short form of --major and --minor arg for pvscan --cache. +- Remove 2>/dev/null from three lvm commands executed by vgimportclone. +- Add configure --enable-udev-systemd-background-jobs. +- Add lvm2-pvscan@.service to run pvscan as a service for lvmetad/autoactivation. +- Fix lvconvert swap of poolmetadata volume for active thin pool. +- Check for open count with a timeout before removal/deactivation of an LV. +- Report RAID images split with tracking as out-of-sync ("I"). +- Improve parsing of snapshot lv segment. +- Add workaround for deactivation problem of opened virtual snapshot. +- Disable unsupported merge for virtual snapshot. +- Move code to remove virtual snapshot from tools to lib for lvm2app. +- Fix possible race during daemon worker thread creation (lvmetad). +- Fix possible deadlock while clearing lvmetad cache for full rescan. +- Fix possible race while creating/destroying memory pools. +- Recognise NVM Express devices in filter. +- Fix failing metadata repair when lvmetad is used. +- Fix incorrect memory handling when reading messages from lvmetad. +- Fix locking in lvmetad when handling the PV which is gone. +- Recognize new flag to skip udev scanning in udev rules and act appropriately. +- Add support for flagging an LV to skip udev scanning during activation. +- Improve message when unable to change discards setting on active thin pool. +- Run full scan before vgrename operation to avoid any cache name collision. +- Fix lvconvert when converting to a thin pool and thin LV at once. +- Skip race errors when non-udev dmsetup build runs on udev-enabled system. +- Skip error message when holders are not present in sysfs. +- Use __linux__ instead of linux define to make libdevmapper.h C compliant. + +* Fri Oct 04 2013 Peter Rajnoha - 2.02.103-1 +- Ensure vgid matches before removing vgname entry from lvmetad cache. +- Add --ignoreskippedcluster for exit status success when clustered VGs skipped. +- Fix 3 minute udev timeout so that it is applied for all LVM volumes. +- Fix thin/raid & activation config defaults with configure --disable-devmapper. +- Fix RAID calculation for sufficient allocatable space. +- lvconvert from linear to mirror or RAID1 now honors mirror_segtype_default. +- Add thin-performance configuration profile. +- Add lvm.conf allocation/thin_pool_chunk_size_policy option. +- Fix contiguous & cling allocation policies for parity RAID. (2.02.100) +- Have lvmconf --enable/disable-cluster reset/set use_lvmetad. +- Add seg_size_pe field to reports. +- Support start+length notation with command line PE ranges. +- Exit cleanly with message when pvmove cannot restart because LV is inactive. +- Define symbolic names for subsystem udev flags in libdevmapper for easier use. +- Make subsystem udev rules responsible for importing DM_SUBSYSTEM_UDEV_FLAG*. + +* Tue Sep 24 2013 Peter Rajnoha - 2.02.102-1 +- Fix missing build dependency for scripts subdir in Makefile. +- Fix node up/down handling in clvmd corosync module. +- Fix 3-thread clvmd deadlock triggered by cleanup on EOF from client. +- Remove VG from lvmetad before restoring it with vgcfgrestore. +- Add devtypes report command to display built-in recognised block device types. +- Fix CC Makefile override which had reverted to using built-in value. (2.02.75) +- Recognise bcache block devices in filter (experimental). +- Run lvm2-activation-net after lvm2-activation service to prevent parallel run. +- Add man page entries for lvmdump's -u and -l options. +- Fix lvm2app segfault while using lvm_list_pvs_free fn if there are no PVs. +- Improve of clvmd singlenode locking simulation. +- lvconvert no longer converts LVs of "mirror" segment type to thinpool. +- lvconvert no longer converts thinpool sub-LVs to "mirror" segment type. +- Direct udev to use 3min timeout for LVM devices. Recent udev has default 30s. +- Do not scan multipath or RAID components and avoid incorrect autoactivation. +- Fix MD/loop udev handling to fire autoactivation after setup or coldplug only. +- Make RAID capable of single-machine exclusive operations in a cluster. +- Drop calculation of read ahead for deactivated volume. +- Check for exactly one lv segment in validation of thin pools and volumes. +- Fix dmeventd unmonitoring of thin pools. +- Fix lvresize for stacked thin pool volumes (i.e. mirrors). +- Write Completed debug message before reinstating log defaults after command. +- Refresh existing VG before autoactivation (event retrigger/device reappeared). +- Use pvscan -b in udev rules to avoid a deadlock on udev process count limit. +- Add pvscan -b/--background for the command to be processed in the background. +- Don't assume stdin file descriptor is readable. +- Avoid unlimited recursion when creating dtree containing inactive pvmove LV. +- Require exactly 3 arguments for lvm2-activation-generator. Remove defaults. +- Inform lvmetad about any lost PV label to make it in sync with system state. +- Support most of lvchange operations on stacked thin pool meta/data LVs. +- Enable non-clustered pvmove of snapshots and snapshot origins. +- Add ability to pvmove non-clustered RAID, mirror, and thin volumes. +- Make lvm2-activation-generator silent unless it's in error state. +- Remove "mpath major is not dm major" msg for mpath component scan (2.02.94). +- Prevent cluster mirror logs from being corrupted by redundant checkpoints. +- Fix ignored lvmetad update on loop device configuration (2.02.99). +- Use LVM_PATH instead of hardcoded value in lvm2 activation systemd generator. +- Fix vgck to notice on-disk corruption even if lvmetad is used. +- Move mpath device filter before partitioned filter (which opens devices). +- Require confirmation for vgchange -c when no VGs listed explicitly. +- Also skip /var and /var/log by default in blkdeactivate when unmounting. +- Add support for bind mounts in blkdeactivate. +- Add blkdeactivate -v/--verbose for debug output from external tools used. +- Add blkdeactivate -e/--errors for error messages from external tools used. +- Suppress messages from external tools called in blkdeactivate by default. +- Fix inability to remove a VG's cluster flag if it contains a mirror. +- Fix bug making lvchange unable to change recovery rate for RAID. +- Prohibit conversion of thin pool to external origin. +- Workaround gcc v4.8 -O2 bug causing failures if config/checks=1 (32bit arch). +- Verify clvmd message validity before processing and log error if incorrect. +- When creating PV on existing LV don't forbid reserved LV names on LVs below. +- When converting mirrors, default segtype should be the same unless specified. +- Make "raid1" the default mirror segment type. +- Fix clogd descriptor leak when daemonizing. +- Fix clvmd descriptor leak on restart. +- Add pipe_open/close() to use instead of less efficient/secure popen(). +- Inherit and apply any profile attached to a VG if creating new thin pool. +- Add initial support thin pool lvconvert --repair. +- Add --with-thin-repair and --with-thin-dump configure options. +- Add lvm.conf thin_repair/dump_executable and thin_repair_options. +- Require 1.9 thin pool target version for online thin pool metadata resize. +- Ignore previous LV seg with alloc contiguous & cling when num stripes varies. +- Fix segfault if devices/global_filter is not specified correctly. +- Tidy dmeventd fifo initialisation. +- Detect invalid sector supplied to 'dmsetup message'. +- Free any previously-set string if a dm_task_set_* function is called again. +- Do not allow passing empty new name for dmsetup rename. +- Display any output returned by 'dmsetup message'. +- Add dm_task_get_message_response to libdevmapper. +- Create dmeventd timeout threads as "detached" so exit status is freed. +- Add DM_ABORT_ON_INTERNAL_ERRORS env var support to abort on internal errors. + +* Tue Aug 06 2013 Peter Rajnoha - 2.02.99-2 +- Fix metadata area offset/size overflow if it's >= 4g and while using lvmetad. +- Require the newest device-mapper-persistent-data-0.2.3-1. +- Fix spec file's util-linux version definition for proper expansion when used. + +* Thu Jul 25 2013 Peter Rajnoha - 2.02.99-1 +- o Features/Extensions/Additions: +- Add support for poolmetadataspare LV, that will be used for pool recovery. +- Improve activation order when creating thin pools in non-clustered VG. +- Add lvm2-activation-net systemd unit to activate LVs on net-attached storage. +- Automatically flag thin snapshots to be skipped during activation. +- Add support for persistent flagging of LVs to be skipped during activation. +- Make selected thinp settings customizable by a profile. +- Support storing profile name in metadata for both VGs and LVs. +- Add support for configuration profiles. +- Add support for thin volumes in vgsplit. +- Add lvresize support for online thin pool metadata volume resize. +- Add detection for thin pool metadata resize kernel support. +- Add vg->vg_ondisk / lv_ondisk() holding committed metadata. +- Add detection of mounted fs also for vgchange deactivation. +- Detect maximum usable size for snapshot for lvresize. +- Improve RAID kernel status retrieval to include sync_action/mismatch_cnt. +- Add external origin support for lvcreate. +- Support automatic config validation. +- Add PV header extension: extension version, flags and bootloader areas. +- Initial support for lvconvert of thin external origin. +- Improve activation code for better support of stacked devices. +- vgimport '--force' now allows import of VGs with missing PVs. +- Allow removal or replacement of RAID LV components that are error segments. +- Make 'vgreduce --removemissing' able to handle RAID LVs with missing PVs. +- Give precedence to EMC power2 devices with duplicate PVIDs. +- Recognise Storage Class Memory (IBM S/390) devices in filter. +- Recognise STEC skd devices in filter. +- Recognise Violin Memory vtms devices in filter. +- Automatically restore MISSING PVs with no MDAs. +- Detect mounted fs also via reading /proc/self/mountinfo. +- o Command Interface/Options: +- Support ARG_GROUPABLE with merge_synonym (for --raidwritemostly). +- Add --ignoreactivationskip to lvcreate/vgchange/lvchange to ignore skip flag. +- Add --setactivationskip to lvcreate/lvchange to set activation skip flag. +- Add --type profilable to lvm dumpconfig to show profilable config settings. +- Add --mergedconfig to lvm dumpconfig for merged --config/--profile/lvm.conf. +- Support changing VG/LV profiles: vgchange/lvchange --profile/--detachprofile. +- Add new --profile command line arg to select a configuration profile for use. +- For creation of snapshot require size for at least 3 chunks. +- Do not accept size parameters bigger then 16EiB. +- Accept --yes in all commands so test scripts can be simpler. +- Add lvcreate/lvchange --[raid]{min|max}recoveryrate for raid LVs. +- Add lvchange --[raid]writemostly/writebehind support for RAID1 +- Add lvchange --[raid]syncaction for scrubbing of RAID LVs. +- Add --validate option to lvm dumpconfig to validate current config on demand. +- Add --ignoreadvanced and --ignoreunsupported switch to lvm dumpconfig. +- Add --withcomments and --withversions switch to lvm dumpconfig. +- Add --type {current|default|missing|new} and --atversion to lvm dumpconfig. +- Add --bootloaderareasize to pvcreate and vgconvert to create bootloader area. +- Do not take a free lv name argument for lvconvert --thinpool option. +- Allow lvconvert --stripes/stripesize only with --mirrors/--repair/--thinpool. +- Do not ignore -f in lvconvert --repair -y -f for mirror and raid volumes. +- Support use of option --yes for lvchange --persistent. +- Fix clvmd support for option -d and properly use its argument. +- o Reporting: +- Issue an error msg if lvconvert --type used incorrectly with other options. +- Use LOG_DEBUG/ERR msg severity instead default for lvm2-activation-generator. +- Add LV report fields: raid_mismatch_count/raid_sync_action/raid_write_behind. +- Add LV reporting fields raid_min_recovery_rate, raid_max_recovery_rate. +- Add sync_percent as alias for copy_percent LV reporting field. +- Add lv_ prefix to modules reporting field. +- Use units B or b (never E) with no decimal places when displaying sizes < 1k. +- List thin-pool and thin modules for thin volumes. +- Add 's(k)ip activation' bit to lvs -o lv_attr to indicate skip flag attached. +- Improve error loging when user tries to interrupt commands. +- Add vgs/lvs -o vg_profile/lv_profile to report profiles attached to VG/LV. +- Report lvs volume type 'e' with higher priority. +- Report lvs volume type 'o' also for external origin volumes. +- Report lvs target type 't' only for thin pools and thin volumes. +- Add "active" LV reporting field to show activation state. +- Add "monitor" segment reporting field to show dmevent monitoring status. +- Add explicit message about unsupported pvmove for thin/thinpool volumes. +- Add pvs -o pv_ba_start,pv_ba_size to report bootloader area start and size. +- Fix pvs -o pv_free reporting for PVs with zero PE count. +- Report blank origin_size field if the LV doesn't have an origin instead of 0. +- Report partial and in-sync RAID attribute based on kernel status +- Log output also to syslog when abort_on_internal_error is set. +- Change lvs heading Copy%% to Cpy%%Sync and print RAID4/5/6 sync%% there too. +- Report error for nonexisting devices in dmeventd communication. +- Reduce some log_error messages to log_warn where we don't fail. +- o Configuration: +- Add activation/auto_set_activation_skip to control activation skip flagging. +- Add default.profile configuration profile and install it on make install. +- Add config/profile_dir to set working directory to load profiles from. +- Use mirror_segtype_default if type not specified for linear->mirror upconvert. +- Refine lvm.conf and man page documentation for autoactivation feature. +- Override system's global_filter settings for vgimportclone. +- Find newest timestamp of merged config files. +- Add 'config' section to lvm.conf to set the way the LVM configuration is handled. +- Add global/raid10_segtype_default to lvm.conf. +- Accept activation/raid_region_size in preference to mirror_region_size config. +- Add log/debug_classes to lvm.conf to control debug log messages. +- Allow empty activation/{auto_activation|read_only|}_volume_list config option. +- Relax ignore_suspended_devices to read from mirrors that don't have a device marked failed. +- o Documentation: +- Add man page entries for profile configuration and related options. +- Document lvextend --use-policies option in man. +- Improve lvcreate, lvconvert and lvm man pages. +- o API/interfaces: +- liblvm/python API: Additions: PV create/removal/resize/listing +- liblvm/python API: Additions: LV attr/origin/Thin pool/Thin LV creation +- Fix exported symbols regex for non-GNU busybox sed. +- Add LV snapshot support to liblvm and python-lvm. +- Remove python liblvm object. systemdir can only be changed using env var now. +- Add dm_get_status_snapshot() for parsing snapshot status. +- Append discards and read-only fields to exported struct dm_status_thin_pool. +- Validate passed params to dm_get_status_raid/thin/thin_pool(). +- Add dm_mountinfo_read() for parsing /proc/self/mountinfo. +- Add dm_config_write_{node_out/one_node_out} for enhanced config output. +- Add dm_config_value_is_bool to check for boolean value in supported formats. +- Add DM_ARRAY_SIZE public macro. +- Add DM_TO_STRING public macro. +- Implement ref-counting for parents in python lib. +- o Fixes (general): +- Do not zero init 4KB of thin snapshot for non-zeroing thin pool (2.02.94). +- Correct thin creation error paths. +- Add whole log_lv and metadata_lv sub volumes when creating partial tree. +- Properly use snapshot layer for origin which is also thin volume. +- Avoid generating metadata backup when calling update_pool_lv(). +- Send thin messages also for active thin pool and inactive thin volume. +- Avoid creation of multiple archives for one command. +- Avoid flushing thin pool when just requesting transaction_id. +- Fix use of too big chunks of memory when communication with lvmetad. +- Also filter partitions on mpath components if multipath_component_detection=1. +- Do not use persistent filter with lvmetad. +- Move syslog code out of signal handle in dmeventd. +- Fix lvresize --use-policies of VALID but 100%% full snapshot. +- Skip monitoring of snapshots that are already bigger then origin. +- Refuse to init a snapshot merge in lvconvert if there's no kernel support. +- Fix alignment of PV data area if detected alignment less than 1 MB (2.02.74). +- Fix creation and removal of clustered snapshot. +- Fix clvmd caching of metadata when suspending inactive volumes. +- Fix lvmetad error path in lvmetad_vg_lookup() for null vgname. +- Fix clvmd _cluster_request() return code in memory fail path. +- Fix vgextend to not allow a PV with 0 MDAs to be used while already in a VG. +- Fix PV alignment to incorporate alignment offset if the PV has zero MDAs. +- Fix missing cleanup of flags when the LV is detached from pool. +- Fix check for some forbidden discards conversion of thin pools. +- Limit RAID device replacement to repair only if LV is not in-sync. +- Disallow RAID device replacement or repair on inactive LVs. +- Unlock vg mutex in error path when lvmetad tries to lock_vg. +- Detect key string duplication failure in config_make_nodes_v in libdaemon. +- Disallow pvmove on RAID LVs until they are addressed properly +- Recognize DM_DISABLE_UDEV environment variable for a complete fallback. +- When no --stripes argument is given when creating a RAID10 volume, default to 2 stripes. +- Do not allow lvconvert --splitmirrors on RAID10 logical volumes. +- Repair a mirrored log before the mirror itself when both fail. +- Avoid trying to read a mirror that has a failed device in its mirrored log. +- Fix segfault for truncated string token in config file after the first '"'. +- Fix config node lookup inside empty sections to not return the section itself. +- Fix parsing of 64bit snapshot status in dmeventd snapshot plugin. +- Always return success on dmeventd -V command call. +- o Fixes (segfaults/crashes/deadlocks/races): +- Fix segfault when reporting raid_syncaction for older kernels. +- Fix vgcfgrestore crash when specified incorrect vg name. +- Check for memory failure of dm_config_write_node() in lvmetad. +- Prevent double free error after dmeventd call of _fill_device_data(). +- o Fixes (resource leaks/memleaks): +- Release memory allocated with _cached_info(). +- Release memory and unblock signals in lock_vol error path. +- Fix memory resource leak in memlocking error path. +- Fix memleak in dmeventd thin plugin in device list obtaining err path. +- Fix socket leak on error path in lvmetad's handle_connect. +- Fix memleak on error path for lvmetad's pv_found. +- Fix memleak in device_is_usable mirror testing function. +- Fix memory leak on error path for pvcreate with invalid uuid. +- Fix resource leak in error path of dmeventd's umount of thin volume. +- o Testing: +- Fix test for active snapshot in cluster before resizing it. +- Add python-lvm unit test case +- o Other: +- Use local activation for clearing snapshot COW device. +- Add configure --with-default-profile-subdir to select dir to keep profiles in. +- Creation of snapshot takes at most 100%% origin coverage. +- Use LC_ALL to set locale in daemons and fsadm instead of lower priority LANG. +- Optimize out setting the same value of read_ahead. +- Automatically deactivate failed preloaded dm tree node. +- Process thin messages once to active thin pool target for dm_tree. +- o Packaging: +- Add /etc/lvm/profile dir and /etc/lvm/profile/default.profile to lvm2 package. +- Do not include /lib/udev and /lib/udev/rules.d in device-mapper package. +- Fix some incorrect changelog dates. + +* Tue May 14 2013 Peter Rajnoha - 2.02.98-9 +- Fix 'dmsetup splitname -o' to not fail if used without '-c' switch (1.02.68). +- Close open dmeventd FIFO file descriptors on exec (FD_CLOEXEC). +- Fix premature DM version checking which caused useless mapper/control access. +- Recognize DM_DISABLE_UDEV environment variable for a complete fallback. +- Do not verify udev operations if --noudevsync command option is used. +- Fix blkdeactivate to handle nested mountpoints and mangled mount paths. +- Fix a crash-inducing race condition in lvmetad while updating metadata. +- Fix possible race while removing metadata from lvmetad. +- Fix possible deadlock when querying and updating lvmetad at the same time. +- Avoid a global lock in pvs when lvmetad is in use. +- Fix crash in pvscan --cache -aay triggered by non-mda PV. +- Fix lvm2app to return all property sizes in bytes. +- Add lvm.conf option global/thin_disabled_features. +- Add lvconvert support to swap thin pool metadata volume. +- Implement internal function detach_pool_metadata_lv(). +- Fix lvm2app and return lvseg discards property as string. +- Allow forced vgcfgrestore of lvm2 metadata with thin volumes. +- Add lvm.conf thin pool defs thin_pool_{chunk_size|discards|zero}. +- Support discards for non-power-of-2 thin pool chunks. +- Support allocation of pool metadata with lvconvert command. +- Move common functionality for thin lvcreate and lvconvert to toollib. +- Use lv_is_active() instead of lv_info() call. + +* Fri May 03 2013 Peter Rajnoha - 2.02.98-8 +- Fix non-functional autoactivation of LVM volumes on top of MD devices. + +* Fri Apr 19 2013 Peter Rajnoha - 2.02.98-7 +- Autoactivate VG/LV on coldplug of DM-based PVs at boot. + +* Tue Apr 09 2013 Peter Rajnoha - 2.02.98-6 +- Synchronize with udev in pvscan --cache and fix dangling udev_sync cookies. +- Fix autoactivation to not autoactivate VG/LV on each change of the PVs used. + +* Thu Feb 14 2013 Fedora Release Engineering - 2.02.98-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Thu Dec 06 2012 Peter Rajnoha - 2.02.98-4 +- Skip mlocking [vectors] on arm architecture. + +* Sat Nov 17 2012 Peter Rajnoha - 2.02.98-3 +- Add lvm2-activation-generator systemd generator to automatically generate + systemd units to activate LVM2 volumes even if lvmetad is not used. + This replaces lvm activation part of the former fedora-storage-init + script that was included in the initscripts package before. +- Enable lvmetad - the LVM metadata daemon by default. +- Exit pvscan --cache immediately if cluster locking used or lvmetad not used. +- Don't use lvmetad in lvm2-monitor.service ExecStop to avoid a systemd issue. +- Remove dependency on fedora-storage-init.service in lvm2 systemd units. +- Depend on lvm2-lvmetad.socket in lvm2-monitor.service systemd unit. +- Init lvmetad lazily to avoid early socket access on config overrides. +- Hardcode use_lvmetad=0 if cluster locking used and issue a warning msg. +- Fix dm_task_set_cookie to properly process udev flags if udev_sync disabled. + +* Sat Oct 20 2012 Peter Rajnoha - 2.02.98-2 +- Incorporate former python-lvm package in lvm2 as lvm2-python-libs subpackage. + +* Tue Oct 16 2012 Peter Rajnoha - 2.02.98-1 +- Don't try to issue discards to a missing PV to avoid segfault. +- Fix vgchange -aay not to activate non-matching LVs that follow a matching LV. +- Fix lvchange --resync for RAID LVs which had no effect. +- Add RAID10 support (--type raid10). +- Introduce blkdeactivate script to deactivate block devs with dependencies. +- Apply 'dmsetup mangle' for dm UUIDs besides dm names. +- Use -q as short form of --quiet. +- Suppress non-essential stdout with -qq. +- Add log/silent to lvm.conf equivalent to -qq. +- Add (p)artial attribute to lvs. +- Implement devices/global_filter to hide devices from lvmetad. +- Add lvmdump -l, to collect a state dump from lvmetad. +- Add --discards to lvconvert. +- Add support for lvcreate --discards. +- Add --poolmetadata to lvconvert and support thin meta/data dev stacking. +- Support creation of read-only thin volumes (lvcreate -p r). +- Support changes of permissions for thin snapshot volumes. +- Make lvremove ask before discarding data areas. +- Prohibit not yet supported change of thin-pool to read-only. +- Using autoextend percent 0 for thin pool fails 'lvextend --use-policies'. +- Make vgscan --cache an alias for pvscan --cache. +- Clear lvmetad metadata/PV cache before a rescan. +- Fix a segmentation fault upon receiving a corrupt lvmetad response. +- Give inconsistent metadata warnings in pvscan --cache. +- Avoid overlapping locks that could cause a deadlock in lvmetad. +- Fix memory leaks in libdaemon and lvmetad. +- Optimize libdaemon logging for a fast no-output path. +- Only create lvmetad pidfile when running as a daemon (no -f). +- Warn if lvmetad is running but disabled. +- Warn about running lvmetad with use_lvmetad = 0 in example.conf. +- Update lvmetad help output (flags and their meaning). +- Make pvscan --cache read metadata from LVM1 PVs. +- Make libdaemon buffer handling asymptotically more efficient. +- Make --sysinit suppress lvmetad connection failure warnings. +- Prohibit usage of lvcreate --thinpool with --mirrors. +- Fix lvm2api origin reporting for thin snapshot volume. +- Add implementation of lvm2api function lvm_percent_to_float. +- Allow non power of 2 thin chunk sizes if thin pool driver supports that. +- Allow limited metadata changes when PVs are missing via [vg|lv]change. +- Do not start dmeventd for lvchange --resync when monitoring is off. +- Remove pvscan --cache from lvm2-lvmetad init script. +- Remove ExecStartPost with pvscan --cache from lvm2-lvmetad.service. +- Report invalid percentage for property snap_percent of non-snaphot LVs. +- Disallow conversion of thin LVs to mirrors. +- Fix lvm2api data_percent reporting for thin volumes. +- Do not allow RAID LVs in a clustered volume group. +- Enhance insert_layer_for_lv() with recursive rename for _tdata LVs. +- Skip building dm tree for thin pool when called with origin_only flag. +- Ensure descriptors 0,1,2 are always available, using /dev/null if necessary. +- Use /proc/self/fd when available for closing opened descriptors efficiently. +- Fix inability to create, extend or convert to a large (> 1TiB) RAID LV. +- Update lvmetad communications to cope with clients using different filters. +- Clear LV_NOSYNCED flag when a RAID1 LV is converted to a linear LV. +- Disallow RAID1 upconvert if the LV was created with --nosync. +- Depend on systemd-udev-settle in units generated by activation generator. +- Disallow addition of RAID images until the array is in-sync. +- Fix RAID LV creation with '--test' so valid commands do not fail. +- Add lvm_lv_rename() to lvm2api. +- Fix setvbuf code by closing and reopening stream before changing buffer. +- Disable private buffering when using liblvm. +- When private stdin/stdout buffering is not used always use silent mode. +- Fix 32-bit device size arithmetic needing 64-bit casting throughout tree. +- Fix dereference of NULL in lvmetad error path logging. +- Fix buffer memory leak in lvmetad logging. +- Correct the discards field in the lvs manpage (2.02.97). +- Use proper condition to check for discards settings unsupported by kernel. +- Reinstate correct default to ignore discards for thin metadata from old tools. +- Issue error message when -i and -m args do not match specified RAID type. +- Change lvmetad logging syntax from -ddd to -l {all|wire|debug}. +- Add new libdaemon logging infrastructure. +- Support unmount of thin volumes from pool above thin pool threshold. +- Update man page to reflect that dm UUIDs are being mangled as well. +- Add 'mangled_uuid' and 'unmangled_uuid' fields to dmsetup info -c -o. +- Mangle device UUID on dm_task_set_uuid/newuuid call if necessary. +- Add dm_task_get_uuid_mangled/unmangled to libdevmapper. +- Always reset delay_resume_if_new flag when stacking thin pool over anything. +- Don't create value for dm_config_node and require dm_config_create_value call. +- Check for existing new_name for dmsetup rename. +- Fix memory leak in dmsetup _get_split_name() error path. +- Clean up spec file and keep support only for Fedora 18 upwards. +- Use systemd macros in rpm scriptlets to set up systemd units. +- Add Requires: bash >= 4.0 for blkdeactivate script. + +* Tue Aug 07 2012 Alasdair Kergon - 2.02.97-1 +- Improve documention of allocation policies in lvm.8. +- Increase limit for major:minor to 4095:1048575 when using -My option. +- Add generator for lvm2 activation systemd units. +- Add lvm_config_find_bool lvm2app fn to retrieve bool value from config tree. +- Respect --test when using lvmetad. +- No longer capitalise first LV attribute char for invalid snapshots. +- Allow vgextend to add PVs to a VG that is missing PVs. +- Recognise Micron PCIe SSDs in filter and move array out to device-types.h. +- Fix dumpconfig to print only without its siblings. (2.02.89) +- Do not issue "Failed to handle a client connection" error if lvmetad killed. +- Support lvchange --discards and -Z with thin pools. +- Add discard LV segment field to reports. +- Add --discards to lvcreate --thin. +- Set discard and external snapshot features if thin pool target is vsn 1.1+. +- Count percentage of completeness upwards not downwards when merging snapshot. +- Skip activation when using vg/lvchange --sysinit -a ay and lvmetad is active. +- Fix extending RAID 4/5/6 logical volumes +- Fix test for PV with unknown VG in process_each_pv to ignore ignored mdas. +- Fix _alloc_parallel_area to avoid picking already-full areas for raid devices. +- Never issue discards when LV extents are being reconfigured, not deleted. +- Allow release_lv_segment_area to fail as functions it calls can fail. +- Fix missing sync of filesystem when creating thin volume snapshot. +- Allow --noflush with dmsetup status and wait (for thin target). +- Add dm_config_write_one_node to libdevmapper. +- Add dm_vasprintf to libdevmapper. +- Support thin pool message release/reserve_metadata_snap in libdevmapper. +- Support thin pool discards and external origin features in libdevmapper. + +* Thu Jul 19 2012 Fedora Release Engineering - 2.02.96-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Wed Jul 04 2012 Peter Rajnoha - 2.02.96-3 +- Use configure --with-default-pid-dir=/run. +- Use globally set prefix for udev rules path. + +* Mon Jul 02 2012 Peter Rajnoha - 2.02.96-2 +- Compile with lvmetad support enabled. +- Add support for volume autoactivation using lvmetad. +- Update man pages with --activate ay option and auto_activation_volume_list. +- Use vgchange -aay instead of vgchange -ay in clmvd init script. +- Add activation/auto_activation_volume_list to lvm.conf. +- Add --activate ay to lvcreate, lvchange, pvscan and vgchange. +- Add --activate synonym for --available arg and prefer --activate. +- Open device read-only to obtain readahead value. +- Add configure --enable-udev-rule-exec-detection to detect exec path in rules. +- Use sbindir in udev rules by default and remove executable path detection. +- Remove hard-coded paths for dmeventd fifos and use default-dm-run-dir. +- Add configure --with-lvmetad-pidfile to remove hard-coded value. +- Add configure --with-default-pid-dir for common directory with pid files. +- Add configure --with-default-dm-run-dir to set run directory for dm tools. +- Add documentation references in systemd units. +- Clean up spec file and keep support only for Fedora 17 upwards. + +* Mon Jun 18 2012 Alasdair Kergon - 2.02.96-1 +- Require device-mapper-persistent-data package for thin provisioning. +- Set delay_resume_if_new on deptree snapshot origin. +- Log value chosen in _find_config_bool like other variable types do. +- Wait for dmeventd to exit after sending it DM_EVENT_CMD_DIE when restarting. +- Append 'Used' to {Blk}DevNames/DevNos dmsetup report headers for clarity. +- Remove dmeventd fifos on exit if they are not managed by systemd. +- Use SD_ACTIVATION environment variable in systemd units to detect systemd. +- Only start a new dmeventd instance on restart if one was already running. +- Extend the time waited for input from dmeventd fifo to 5 secs. (1.02.73) +- Fix error paths for regex filter initialization. +- Re-enable partial activation of non-thin LVs until it can be fixed. (2.02.90) +- Fix alloc cling to cling to PVs already found with contiguous policy. +- Fix cling policy not to behave like normal policy if no previous LV seg. +- Fix allocation loop not to use later policies when --alloc cling without tags. +- Fix division by zero if PV with zero PE count is used during vgcfgrestore. +- Add initial support for thin pool lvconvert. +- Fix lvrename for thin volumes (regression in for_each_sub_lv). (2.02.89) +- Fix up-convert when mirror activation is controlled by volume_list and tags. +- Warn of deadlock risk when using snapshots of mirror segment type. +- Fix bug in cmirror that caused incorrect status info to print on some nodes. +- Remove statement that snapshots cannot be tagged from lvm man page. +- Disallow changing cluster attribute of VG while RAID LVs are active. +- Fix lvconvert error message for non-mergeable volumes. +- Allow subset of failed devices to be replaced in RAID LVs. +- Prevent resume from creating error devices that already exist from suspend. +- Update and correct lvs man page with supported column names. +- Handle replacement of an active device that goes missing with an error device. +- Change change raid1 segtype always to request a flush when suspending. +- Add udev info and context to lvmdump. +- Add lvmetad man page. +- Fix RAID device replacement code so that it works under snapshot. +- Fix inability to split RAID1 image while specifying a particular PV. +- Update man pages to give them all the same look&feel. +- Fix lvresize of thin pool for striped devices. +- For lvresize round upward when specifying number of extents. +- For lvcreate with %%FREE support rounding downward stripe alignment. +- Change message severity to log_very_verbose for missing dev info in udev db. +- Fix lvconvert when specifying removal of a RAID device other than last one. +- Fix ability to handle failures in mirrored log in dmeventd plugin. (2.02.89) +- Fix unlocking volume group in vgreduce in error path. +- Cope when VG name is part of the supplied name in lvconvert --splitmirrors -n. +- Fix exclusive lvchange running from other node. (2.02.89) +- Add 'vgscan --cache' functionality for consistency with 'pvscan --cache'. +- Keep exclusive activation in pvmove if LV is already active. +- Disallow exclusive pvmove if some affected LVs are not exclusively activated. +- Remove unused and wrongly set cluster VG flag from clvmd lock query command. +- Fix pvmove for exclusively activated LV pvmove in clustered VG. (2.02.86) +- Update and fix monitoring of thin pool devices. +- Check hash insert success in lock_vg in clvmd. +- Check for buffer overwrite in get_cluster_type() in clvmd. +- Fix global/detect_internal_vg_cache_corruption config check. +- Fix initializiation of thin monitoring. (2.02.92) +- Cope with improperly formatted device numbers in /proc/devices. (2.02.91) +- Exit if LISTEN_PID environment variable incorrect in lvmetad systemd handover. +- Fix fsadm propagation of -e option. +- Fix fsadm parsing of /proc/mounts files (don't check for substrings). +- Fix fsadm usage of arguments with space. +- Fix arg_int_value alongside ARG_GROUPABLE --major/--minor for lvcreate/change. +- Fix name conflicts that prevent down-converting RAID1 when specifying a device +- Improve thin_check option passing and use configured path. +- Add --with-thin-check configure option for path to thin_check. +- Fix error message when pvmove LV activation fails with name already in use. +- Better structure layout for device_info in dev_subsystem_name(). +- Change message severity for creation of VG over uninitialised devices. +- Fix error path for failed toolcontext creation. +- Don't unlink socket on lvmetad shutdown if instantiated from systemd. +- Restart lvmetad automatically from systemd if it exits from uncaught signal. +- Fix warn msg for thin pool chunk size and update man for chunksize. (2.02.89) + +* Thu Jun 07 2012 Kay Sievers - 2.02.95-8 +- Remove explicit Requires: libudev, rpm takes care of that: + $ rpm -q --requires device-mapper | grep udev + libudev.so... + +* Tue Jun 05 2012 Peter Rajnoha - 2.02.95-7 +- Use BuildRequires: systemd-devel instead of BuildRequires: libudev-devel. +- Remove unsupported udev_get_dev_path libudev call used for checking udev dir. + +* Thu Mar 29 2012 Fabio M. Di Nitto - 2.02.95-6 +- BuildRequires and Requires on newer version of corosync and dlm. +- Restart clvmd on upgrades. + +* Mon Mar 19 2012 Peter Rajnoha - 2.02.95-5 +- Do not strictly require openais for cmirror subpackage. + +* Mon Mar 19 2012 Peter Rajnoha - 2.02.95-4 +- Reinstate cmirror support. +- Detect lvm binary path in lvmetad udev rules. +- Use pvscan --cache instead of vgscan in systemd units/init scripts. + +* Fri Mar 16 2012 Fabio M. Di Nitto - 2.02.95-3 +- Rebuild against new corosync (soname change). +- BuildRequires and Requires on newer version of corosync. + +* Thu Mar 08 2012 Peter Rajnoha - 2.02.95-2 +- Reload dm-event systemd service on upgrade. + +* Tue Mar 06 2012 Alasdair Kergon - 2.02.95-1 +- If unspecified, adjust thin pool metadata and chunk size to fit into 128MB. +- Deactivation of failed thin check on thin pool returns success. +- Check for multiply-mangled names in auto mangling mode. +- Fix dm_task_get_name_unmangled to not unmangle already unmangled name. +- Check whether device names are properly mangled on ioctl return. + +* Sat Mar 03 2012 Alasdair Kergon - 2.02.94-1 +- Add support to execute thin_check with each de/active of thin pool. +- Fix automatic estimation of metadata device size for thin pool. +- Wipe initial 4KiB of non zeroed thin volumes. +- Update code-base to incorporate new metadata daemon. (Not used in Fedora yet.) +- Numerous minor cleanups across the code-base. +- Fix dmsetup / dm_task_set_name to properly resolve path to dm name. (2.02.93) + +* Thu Feb 23 2012 Alasdair Kergon - 2.02.93-1 +- Moved systemd tmpfiles installation upstream for lvm2 lock and run dirs. +- Require number of stripes to be greater than parity devices in higher RAID. +- Fix allocation code to allow replacement of single RAID 4/5/6 device. +- Check all tags and LV names are in a valid form before writing any metadata. +- Allow 'lvconvert --repair' to operate on RAID 4/5/6. +- Fix build_parallel_areas_from_lv to account correctly for raid parity devices. +- Print message when faulty raid devices have been replaced. + +* Mon Feb 20 2012 Alasdair Kergon - 2.02.92-1 +- Read dmeventd monitoring config settings for every lvm command. +- For thin devices, initialize monitoring only for thin pools not thin volumes. +- Make conversion from a synced 'mirror' to 'raid1' not cause a full resync. +- Add clvmd init dependency on dlm service when running with new corosync. +- Switch to using built-in blkid in 13-dm-disk.rules. +- Add "watch" rule to 13-dm-disk.rules. +- Detect failing fifo and skip 20s retry communication period. +- Replace any '\' char with '\\' in dm table specification on input. +- New 'mangle' options in dmsetup/libdevmapper for transparent reversible + encoding of characters that udev forbids in device names. +- Add --manglename option to dmsetup to select the name mangling mode. +- Add mangle command to dmsetup to provide renaming to correct mangled form. +- Add 'mangled_name' and 'unmangled_name' fields to dmsetup info -c -o. +- Mangle device name on dm_task_set_name/newname call if necessary. +- Add dm_task_get_name_mangled/unmangled to libdevmapper. +- Add dm_set/get_name_mangling_mode to set/get name mangling in libdevmapper. + +* Mon Feb 13 2012 Peter Rajnoha - 2.02.91-2 +- Add configure --with-systemdsystemunitdir. + +* Sun Feb 12 2012 Alasdair Kergon - 2.02.91-1 +- New upstream with trivial fixes and refactoring of some lvmcache and orphan code. + +* Wed Feb 1 2012 Alasdair Kergon - 2.02.90-1 +- Drop support for cman, openais and cmirror for f17. Require dlm not cluster. +- Automatically detect whether corosync clvmd needs to use confdb or cmap. +- Disable partial activation for thin LVs and LVs with all missing segments. +- sync_local_dev_names before (re)activating mirror log for initialisation. +- Do not print warning for pv_min_size between 512KB and 2MB. +- Clean up systemd unit ordering and requirements. +- Allow ALLOC_NORMAL to track reserved extents for log and data on same PV. +- Fix data%% report for thin volume used as origin for non-thin snapshot. + +* Thu Jan 26 2012 Alasdair Kergon - 2.02.89-2 +- New upstream release with experimental support for thinly-provisioned devices. +- The changelog for this release is quite long and contained in + WHATS_NEW and WHATS_NEW_DM in the documentation directory. + +* Fri Jan 13 2012 Fedora Release Engineering - 2.02.88-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Fri Dec 30 2011 Peter Robinson - 2.02.88-2 +- update util-linux-ng -> util-linux dependency as it changed long ago. + +* Mon Aug 22 2011 Alasdair Kergon - 2.02.88-1 +- Remove incorrect 'Breaking' error message from allocation code. (2.02.87) +- Add lvconvert --merge support for raid1 devices split with --trackchanges. +- Add --trackchanges support to lvconvert --splitmirrors option for raid1. +- Add dm_tree_node_add_null_area for temporarily-missing raid devs tracked. +- Support lvconvert of -m1 raid1 devices to a higher number. +- Support splitting off a single raid1 rimage in lvconvert --splitmirrors. +- Add -V as short form of --virtualsize in lvcreate. + +* Fri Aug 12 2011 Peter Rajnoha - 2.02.87-1 +- Cache and share generated VG structs to improve performance. +- Suppress locking error messages in monitoring init scripts. +- Add global/detect_internal_vg_cache_corruption to lvm.conf. +- If pipe in clvmd fails return busy instead of using uninitialised descriptors. +- Initialise clvmd locks before lvm context to avoid open descriptor leaks. +- Suppress low-level locking errors and warnings while using --sysinit. +- Add test for fcntl error in singlenode client code. +- Compare file size (as well as timestamp) to detect changed config file. +- Change DEFAULT_UDEV_SYNC to 1 so udev_sync is used if there is no config file. +- Update udev rules to skip DM flags decoding for removed devices. +- Remove device name prefix from dmsetup line output if -j & -m or -u supplied. +- Add new segtype 'raid' for MD RAID 1/4/5/6 support with dmeventd plugin. +- Add ability to reduce the number of mirrors in raid1 arrays to lvconvert. +- Add support for systemd file descriptor handover in dmeventd. +- Add systemd unit file to provide lvm2 monitoring. +- Add systemd unit files for dmeventd. +- Use new oom killer adjustment interface (oom_score_adj) when available. +- Fix read-only identical table reload supression. +- Remove --force option from lvrename manpage. + +* Wed Aug 03 2011 Peter Rajnoha - 2.02.86-5 +- Change DEFAULT_UDEV_SYNC to 1 so udev_sync is used even without any config. + +* Thu Jul 28 2011 Peter Rajnoha - 2.02.86-4 +- Add support for systemd file descriptor handover to dmeventd. +- Add support for new oom killer adjustment interface (oom_score_adj). + +* Wed Jul 20 2011 Peter Rajnoha - 2.02.86-3 +- Fix broken lvm2-sysinit Requires: lvm2 dependency. + +* Mon Jul 18 2011 Peter Rajnoha - 2.02.86-2 +- Add dm-event and lvm2-monitor unit files for use with systemd. +- Add sysvinit subpackage for legacy SysV init script support. + +* Fri Jul 8 2011 Alasdair Kergon - 2.02.86-1 +- Fix activation sequences to avoid trapped I/O with multiple LVs. +- Fix activation sequences to avoid allocating tables while devs suspended. +- Remove unnecessary warning in pvcreate for MD linear devices. +- Add activation/checks to lvm.conf to perform additional ioctl validation. +- Append 'm' attribute to pv_attr for missing PVs. +- Fix to preserve exclusive activation of mirror while up-converting. +- Reject allocation if number of extents is not divisible by area count. +- Fix cluster mirror creation to work with new mirror allocation algorithm. +- Ignore activation/verify_udev_operations if dm kernel driver vsn < 4.18. +- Add activation/verify_udev_operations to lvm.conf, disabled by default. +- Ignore inconsistent pre-commit metadata on MISSING_PV devs while activating. +- Add proper udev library context initialization and finalization to liblvm. +- Downgrade critical_section errors to debug level until it is moved to libdm. +- Fix ignored background polling default in vgchange -ay. +- Fix reduction of mirrors with striped segments to always align to stripe size. +- Validate mirror segments size. +- Fix extent rounding for striped volumes never to reduce more than requested. +- Fix create_temp_name to replace any '/' found in the hostname with '?'. +- Always use append to file in lvmdump. selinux policy may ban file truncation. +- Propagate test mode to clvmd to skip activation and changes to held locks. +- Permit --available with lvcreate so non-snapshot LVs need not be activated. +- Clarify error message when unable to convert an LV into a snapshot of an LV. +- Do not issue an error message when unable to remove .cache on read-only fs. +- Avoid memlock size mismatch by preallocating stdio line buffers. +- Report internal error if suspending a device using an already-suspended dev. +- Report internal error if any table is loaded while any dev is known suspended. +- Report error if a table load requiring target parameters has none supplied. +- Add dmsetup --checks and dm_task_enable_checks framework to validate ioctls. +- Add age_in_minutes parameter to dmsetup udevcomplete_all. +- Disable udev fallback by default and add --verifyudev option to dmsetup. +- Add dm_get_suspended_counter() for number of devs in suspended state by lib. +- Fix "all" report field prefix matching to include label fields with pv_all. +- Delay resuming new preloaded mirror devices with core logs in deptree code. + +* Wed Jun 22 2011 Zdenek Kabelac - 2.02.84-3 +- Updated uname string test. + +* Sat Jun 4 2011 Milan Broz - 2.02.84-2 +- Accept kernel 3.0 uname string in libdevmapper initialization. +- Make systemd initscripts configurable. + +* Wed Feb 9 2011 Alasdair Kergon - 2.02.84-1 +- Fix big-endian CRC32 checksumming broken since 2.02.75. If affected, + ensure metadata backups in /etc/lvm/backup are up-to-date (vgcfgbackup) + then after updating to 2.02.84 restore metadata from them (using pvcreate + with -Zn --restorefile and -u if PVs can no longer be seen, then + vgcfgrestore -f). +- Reinstate libdevmapper DEBUG_MEM support. (Removed in 1.02.62.) + +* Tue Feb 08 2011 Fedora Release Engineering - 2.02.83-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Fri Feb 4 2011 Alasdair Kergon - 2.02.83-1 +- Allow exclusive activation of snapshots in a cluster. +- Don't lose LV exclusive lock state when suspending clustered devices. +- Fix fs operation stack handling when multiple operations on same device. +- Increase hash table sizes to 1024 LV names and 64 PV uuids. +- When setting up mda wipe first 4k of it as was intended. +- Remove unneeded checks for open_count in lv_info(). +- Synchronize with udev before checking open_count in lv_info(). +- Add "dmsetup ls --tree" output to lvmdump. +- Fix udev synchronization with no-locking --sysinit (2.02.80). +- Improve man page style consistency for pvcreate, pvremove, pvresize, pvscan. +- Avoid rebuilding of uuid validation table. +- Improve lvcreate error text from insufficient "extents" to "free space". +- Always use O_DIRECT when opening block devices to check for partitioning. +- Move creation of device nodes from 'create' to 'resume'. +- Add --addnodeonresume and --addnodeoncreate options to dmsetup. +- Add dm_task_set_add_node to libdevmapper to control dev node creation time. +- Add dm_task_secure_data to libdevmapper to wipe ioctl buffers in kernel. +- Log debug message when expected uevent is not generated. +- Set DM_UDEV_DISABLE_OTHER_RULES_FLAG for suspended DM devices in udev rules. +- Begin a new pool object for each row in _output_as_rows() correctly. + +* Mon Jan 24 2011 Alasdair Kergon - 2.02.82-2 +- Bring lvscan man page up-to-date. +- Fix lvchange --test to exit cleanly. +- Add change_tag to toollib. +- Allow multiple pvchange command line options to be specified together. +- Do not fail pvmove polling if another process cleaned up first. +- Avoid clvmd incrementing dlm lockspace reference count more than once. +- Add -f (don't fork) option to clvmd and fix clvmd -d description. + +* Mon Jan 17 2011 Alasdair Kergon - 2.02.81-1 +- Add disk to allowed mirrored log type conversions. +- Accept fusion fio in device type filter. +- Speed up command processing by caching resolved config tree. +- Use same dm cookie for consecutive dm ops in same VG to reduce udev waits. +- Do not scan devices in dev_reset_error_count() when forking. +- Skip unnecessary LOCK_NULL unlock call during volume deactivation. +- Skip fs_unlock when calling exec_cmd within activation code (for modprobe). +- Replace fs_unlock by sync_local_dev_names to notify local clvmd. (2.02.80) +- Fix wrongly paired unlocking of VG_GLOBAL in pvchange. (2.02.66) +- Return 0 from cmirrord initscript 'start' if daemon is already running. +- Add DM_COOKIE_AUTO_CREATE to libdevmapper.h. +- Improve general lvconvert man page description. +- Detect NULL handle in get_property(). +- Fix memory leak in persistent filter creation error path. +- Check for errors setting up dm_task struct in _setup_task(). +- Fail polldaemon creation when lvmcache_init() fails. +- Return PERCENT_INVALID for errors in _copy_percent() and _snap_percent(). +- Detect errors from dm_task_set calls in _get_device_info (dmeventd). +- Fix memory leak in debug mode of restart_clvmd() error path. +- Log error message for pthread_join() failure in clvmd. +- Use tmpfiles.d/lvm2.conf to create /var/lock/lvm and /var/run/lvm at boot. +- Require initscripts for tmpfiles.d/lvm2.conf. + +* Tue Dec 21 2010 Alasdair Kergon - 2.02.79-1 +- Create /var/run/lvm directory during clvmd initialisation if missing. +- Avoid revalidating the label cache immediately after scanning. +- Support scanning for a single VG in independent mdas. +- Don't skip full scan when independent mdas are present even if memlock is set. +- Add copy_percent and snap_percent to liblvm. +- Add new dm_prepare_selinux_context fn to libdevmapper and use it throughout. +- Enhance vg_validate to ensure integrity of LV and PV structs referenced. +- Enhance vg_validate to check composition of pvmove LVs. +- Avoid writing to freed memory in vg_release. (2.02.78) +- Add missing test for reallocation error in _find_parallel_space(). +- Add checks for allocation errors in config node cloning. +- Fix error path if regex engine cannot be created in _build_matcher(). +- Check read() and close() results in _get_cmdline(). +- Fix NULL pointer check in error path in clvmd do_command(). (2.02.78) +- Check for unlink failure in remove_lockfile() in dmeventd. +- Use dm_free for dm_malloc-ed areas in _clog_ctr/_clog_dtr in cmirrord. +- Change dm_regex_create() API to accept const char * const *patterns. + +* Mon Dec 6 2010 Alasdair Kergon - 2.02.78-1 +- Miscellaneous error path corrections and minor leaks fixed. +- Avoid misleading PV missing warnings in vgextend --restoremissing. +- Ignore unrecognised allocation policy found in metadata instead of aborting. +- Disallow lvconvert ops that both allocate & free supplied PEs in a single cmd. +- Fix liblvm seg_size to give bytes not sectors. +- Add functions to look up LV/PV by name/uuid to liblvm. +- Suppress 'No PV label' message when removing several PVs without mdas. +- Fix default /etc/lvm permissions to be 0755. (2.02.66) + +* Mon Nov 22 2010 Alasdair Kergon - 2.02.77-1 +- Add PV and LV segment types and functions to liblvm. +- Add set_property functions to liblvm. +- Remove tag length restriction and allow / = ! : # & characters. +- Support repetition of --addtag and --deltag arguments. +- Add infrastructure for specific cmdline arguments to be repeated in groups. +- Fix fsadm no longer to require '-f' to resize an unmounted filesystem. +- Fix fsadm to detect mounted filesystems on older systems. (2.0.75) +- Extend cling allocation policy to recognise PV tags (cling_by_tags). +- Add allocation/cling_tag_list to lvm.conf. + +* Tue Nov 9 2010 Alasdair Kergon - 2.02.76-1 +- Clarify error messages when activation fails due to activation filter use. +- Fix handling of online filesystem resize (using new fsadm return code). +- Modify fsadm to return different status code for check of mounted filesystem. +- Add DIAGNOSTICS section to fsadm man page. +- Update VG metadata only once in vgchange when making multiple changes. +- Allow independent vgchange arguments to be used together. +- Fix vgchange to process -a, --refresh, --monitor and --poll like lvchange. +- Add dmeventd -R to restart dmeventd without losing monitoring state. (1.02.56) +- Automatically unmount invalidated snapshots in dmeventd. +- Add lvm2app functions to query any pv, vg, or lv property / report field. +- Fix a deadlock caused by double close in clvmd. +- Fix NULL pointer dereference on too-large MDA error path in _vg_read_raw_area. +- Fix regex optimiser not to ignore RHS of OR nodes in _find_leftmost_common. +- Fix memory leak of field_id in _output_field function. +- Allocate buffer for reporting functions dynamically to support long outputs. + +* Mon Oct 25 2010 Alasdair Kergon - 2.02.75-1 +- Fix pthread mutex usage deadlock in clvmd. +- Avoid segfault by limiting partial mode for lvm1 metadata. (2.02.74) +- Skip dm devices in scan if they contain only error targets or are empty. +- Don't take write lock in vgchange --refresh, --poll or --monitor. +- Fix hang when repairing a mirrored-log that had both devs fail. +- Speed up unquoting of quoted double quotes and backslashes. +- Speed up CRC32 calculations by using a larger lookup table. +- Implement dmeventd -R to restart without state loss. +- Add --setuuid to dmsetup rename. +- Add global/metadata_read_only to use unrepaired metadata in read-only cmds. +- Automatically extend snapshots with dmeventd according to policy in lvm.conf. +- Add activation/snapshot_autoextend_threshold/percent to lvm.conf. +- Add devices/disable_after_error_count config to limit access to failing devs. +- Implement vgextend --restoremissing to reinstate missing devs that return. +- Read whole /proc/self/maps file before working with maps entries. +- Convey need for snapshot-merge target in lvconvert error message and man page. +- Give correct error message when creating a too-small snapshot. +- Make lvconvert respect --yes and --force when converting an inactive log. +- Better support of noninteractive shell execution of fsadm. +- Fix usage of --yes flag for ReiserFS resize in fsadm. +- Fix detection of mounted filesystems for fsadm when udev is used. +- Fix assignment of default value to LVM variable in fsadm. +- Fix support for --yes flag for fsadm. +- Do not execute lvresize from fsadm --dry-run. +- Fix fsadm return error code from user's break action. +- Return const pointer from dm_basename() in libdevmapper. +- Add dm_zalloc and use it and dm_pool_zalloc throughout. +- Add dm_task_set_newuuid to set uuid of mapped device post-creation. +- Fix missing variable initialization in cluster_send() function from cmirrord. +- Fix pointer for VG name in _pv_resize_single error code path. +- Fix vg_read memory leak with directory-based metadata. +- Fix memory leak of config_tree in reinitialization code path. +- Fix pool destruction order in dmeventd_lvm2_exit() to avoid leak debug mesg. +- Remove dependency on libm by replacing floor() by an integer-based algorithm. +- Refactor and add 'get' functions for pv, vg and lv properties/fields. +- Add pv_get_property and create generic internal _get_property function. +- Make generic GET_*_PROPERTY_FN macros with secondary macro for vg, pv & lv. + +* Fri Oct 15 2010 Alasdair Kergon - 2.02.73-3 +- Add --setuuid to dmsetup rename. +- Add dm_task_set_newuuid to set uuid of mapped device post-creation. + +* Wed Sep 29 2010 jkeating - 2.02.74-2 +- Rebuilt for gcc bug 634757 + +* Fri Sep 24 2010 Alasdair Kergon - 2.02.74-1 +- Fix the way regions are marked complete to avoid slow --nosync cmirror I/O. +- Add DM_REPORT_FIELD_TYPE_ID_LEN to libdevmapper.h. +- Allow : and @ to be escaped with \ in device names of PVs. +- Avoid stack corruption when reading in large metadata. +- Fix partial mode operations for lvm1 metadata format. +- Track recursive filter iteration to avoid refreshing while in use. (2.02.56) +- Allocate buffer for metadata tags dynamically to remove 4k limit. +- Add random suffix to archive file names to prevent races when being created. +- Reinitialize archive and backup handling on toolcontext refresh. +- Make poll_mirror_progress report PROGRESS_CHECK_FAILED if LV is not a mirror. +- Like mirrors, don't scan origins if ignore_suspended_devices() is set. +- Automatically generate tailored LSB Requires-Start for clvmd init script. +- Fix return code of pvmove --abort PV. +- Fix pvmove --abort to remove even for empty pvmove LV. +- Add implementation for simple numeric 'get' property functions. +- Simplify MD/swap signature detection in pvcreate and allow aborting. +- Allow --yes to be used without --force mode. +- Fix file descriptor leak in swap signature detection error path. +- Detect and allow abort in pvcreate if LUKS signature is detected. + +* Wed Aug 25 2010 Peter Rajnoha - 2.02.73-2 +- Add configure --with-default-data-alignment. +- Update heuristic used for default and detected data alignment. +- Add "devices/default_data_alignment" to lvm.conf. + +* Wed Aug 18 2010 Alasdair Kergon - 2.02.73-1 +- Change default alignment of data extents to 1MB. +- Add --norestorefile option to pvcreate. +- Require --restorefile when using pvcreate --uuid. +- Fix potential for corruption during cluster mirror device failure. +- Ignore snapshots when performing mirror recovery beneath an origin. +- Monitor origin -real device below snapshot instead of overlay device. +- Don't really change monitoring status when in test mode. +- Fix some exit statuses when starting/stopping monitoring fails. +- Enable snapshot monitoring by default when dmeventd is enabled. +- Fix 'lvconvert --splitmirrors' in cluster operation. +- Fix clvmd init script exit code to return 4 when executed as non-root user. +- Recognise and give preference to md device partitions (blkext major). +- Never scan internal LVM devices. +- Don't ignore user-specified PVs in split-mirror operations. (2.02.71) +- Fix data corruption bug in cluster mirrors. +- Require logical volume(s) to be explicitly named for lvconvert --merge. +- Avoid changing aligned pe_start as a side-effect of a log message. +- Use built-in rule for device aliases: block/ < dm- < disk/ < mapper/ < other. +- Handle failure of all mirrored log devices and all but one mirror leg. +- Disallow 'mirrored' log type for cluster mirrors. +- Fix configure to supply DEFAULT_RUN_DIR to Makefiles. +- Fix allocation of wrong number of mirror logs with 'remove' fault policy. +- Add dmeventd/executable to lvm.conf to test alternative dmeventd. +- Fix udev rules to support udev database content generated by older rules. +- Reinstate detection of inappropriate uevent with DISK_RO set and suppress it. +- Fix regex ttree off-by-one error. +- Fix segfault in regex matcher with characters of ordinal value > 127. +- Wait for node creation before displaying debug info in dmsetup. +- Fix return status 0 for "dmsetup info -c -o help". + +* Mon Aug 2 2010 Alasdair Kergon - 2.02.72-5 +- Make udev configurable and merge with f12. + +* Mon Aug 2 2010 Alasdair Kergon - 2.02.72-4 +- Merge f13, f14 and rawhide spec files. + +* Sat Jul 31 2010 Alasdair Kergon - 2.02.72-3 +- Address lvm2-cluster security flaw CVE-2010-2526. + https://bugzilla.redhat.com/CVE-2010-2526 +- Change clvmd to communicate with lvm2 via a socket in /var/run/lvm. +- Return controlled error if clvmd is run by non-root user. +- Never use clvmd singlenode unless explicitly requested with -Isinglenode. +- Fix exported_symbols generation to use standard compiler arguments. +- Use #include <> not "" in lvm2app.h which gets installed on the system. +- Make liblvm.device-mapper wait for include file generation. +- Fix configure to supply DEFAULT_RUN_DIR to Makefiles. +- Fix wrong number of mirror log at allocate policy + +* Wed Jul 28 2010 Alasdair Kergon - 2.02.71-1 +- Make vgck warn about missing PVs. +- Revert failed table load preparation after "create, load and resume". +- Check if cluster log daemon is running before allowing cmirror create. +- Add dm_create_lockfile to libdm and use for pidfiles for all daemons. +- Correct LV list order used by lvconvert when splitting a mirror. +- Check if LV with specified name already exists when splitting a mirror. +- Fix suspend/resume logic for LVs resulting from splitting a mirror. +- Fix possible hang when all mirror images of a mirrored log fail. +- Adjust auto-metadata repair and caching logic to try to cope with empty mdas. +- Update pvcreate, {pv|vg}change, and lvm.conf man pages about metadataignore. +- Prompt if metadataignore with vgextend or pvchange would adjust vg_mda_copies. +- Adjust vg_mda_copies if metadataignore given with vgextend or pvchange. +- Speed up the regex matcher. +- Use "nowatch" udev rule for inappropriate devices. +- Document LVM fault handling in lvm_fault_handling.txt. +- Clarify help text for vg_mda_count. +- Add more verbose messages while checking volume_list and hosttags settings. +- Add log_error when strdup fails in {vg|lv}_change_tag(). +- Do not log backtrace in valid _lv_resume() code path. + +* Wed Jul 7 2010 Alasdair Kergon - 2.02.70-1 +- Remove log directly if all mirror images of a mirrored log fail. +- Randomly select which mdas to use or ignore. +- Add printf format attributes to yes_no_prompt and fix a caller. +- Always pass unsuspended dm devices through persistent filter to other filters. +- Move test for suspended dm devices ahead of other filters. +- Fix another segfault in clvmd -R if no response from daemon received. (2.02.68) +- Remove superfluous suspended device counter from clvmd. +- Fix lvm shell crash when input is entirely whitespace. +- Update partial mode warning message. +- Preserve memlock balance in clvmd when activation triggers a resume. +- Restore the removemissing behaviour of lvconvert --repair --use-policies. + +* Wed Jun 30 2010 Alasdair Kergon - 2.02.69-1 +- Fix vgremove to allow removal of VG with missing PVs. (2.02.52) +- Add metadata/vgmetadatacopies to lvm.conf. +- Add --metadataignore to pvcreate and vgextend. +- Add vg_mda_copies, pv_mda_used_count and vg_mda_used_count to reports. +- Describe --vgmetadatacopies in lvm.conf and other man pages. +- Add --[vg]metadatacopies to select number of mdas to use in a VG. +- Make the metadata ignore bit control read/write metadata areas in a PV. +- Add pvchange --metadataignore to set or clear a metadata ignore bit. +- Refactor metadata code to prepare for --metadataignore / --vgmetadatacopies. +- Ensure region_size of mirrored log does not exceed its full size. +- Preload libc locale messages to prevent reading it in memory locked state. +- Fix handling of simultaneous mirror image and mirrored log image failure. + +* Thu Jun 24 2010 Peter Rajnoha - 2.02.68-2 +- Fix udev rules to handle spurious events properly. +- Add Requires: udev >= 158-1 (needed for the change in udev rules). + +* Wed Jun 23 2010 Alasdair Kergon - 2.02.68-1 +- Have device-mapper-libs require device-mapper (circular) for udev rules. +- Clear exec_prefix. +- Use early udev synchronisation and update of dev nodes for clustered mirrors. +- Add lv_path to reports to offer full /dev pathname. +- Avoid abort when generating cmirror status. +- Fix clvmd initscript status to print only active clustered LVs. +- Fix segfault in clvmd -R if no response from daemon received. +- Honour log argument when down-converting stacked mirror. +- Sleep to workaround clvmd -S race: socket closed early and server drops cmd. +- Exit successfully when using -o help (but not -o +help) with LVM reports. +- Add man pages for lvmconf, dmeventd and non-existent lvmsadc and lvmsar tools. +- Add --force, --nofsck and --resizefs to lvresize/extend/reduce man pages. +- Fix lvm2cmd example in documentation. +- Fix typo in warning message about missing device with allocated data areas. +- Add device name and offset to raw_read_mda_header error messages. +- Allow use of lvm2app and lvm2cmd headers in C++ code. + +* Fri Jun 4 2010 Alasdair Kergon - 2.02.67-1 +- Require partial option in lvchange --refresh for partial LVs. +- Don't merge unchanged persistent cache file before dumping if tool scanned. +- Avoid selecting names under /dev/block if there is an alternative. +- Fix semctl parameter (union) to avoid misaligned parameter on some arches. +- Fix clvmd initscript restart command to start clvmd if not yet running. +- Handle failed restart of clvmd using -S switch properly. +- Use built-in absolute paths in clvmd (clvmd restart and PV and LV queries). +- Consistently return ECMD_FAILED if interrupted processing multiple LVs. +- Add --type parameter description to the lvcreate man page. +- Document 'clear' in dmsetup man page. +- Replace strncmp kernel version number checks with proper ones. +- Update clustered log kernel module name to log-userspace for 2.6.31 onwards. +- Support autoloading of dm-mod module for kernels from 2.6.35. +- Add dm_tree_node_set_presuspend_node() to presuspend child when deactivating. +- Do not fail lvm_init() if init_logging() or _init_rand() generates an errno. +- Fix incorrect memory pool deallocation while using vg_read for files. + +* Thu May 20 2010 Alasdair Kergon - 2.02.66-2 +- Simplify and fix Requires package headers. +- If unable to obtain snapshot percentage leave value blank on reports. +- Use new install_system_dirs and install_initscripts makefile targets. +- Add lvm2app functions to lookup a vgname from a pvid and pvname. +- Change internal processing of PVs in pvchange. +- Validate internal lock ordering of orphan and VG_GLOBAL locks. + +* Mon May 17 2010 Alasdair Kergon - 2.02.65-1 +- Disallow vgchange --clustered if there are active mirrors or snapshots. +- Fix truncated total size displayed by pvscan. +- Skip internal lvm devices in scan if ignore_suspended_devices is set. +- Do not merge old device cache after we run full scan. (2.02.56) +- Add new --sysinit compound option to vgchange and lvchange. +- Fix clvmd init script never to deactivate non-clustered volume groups. +- Drop duplicate errors for read failures and missing devices to verbose level. +- Do not print encryption key in message debug output (cryptsetup luksResume). +- Use -d to control level of messages sent to syslog by dmeventd. +- Change -d to -f to run dmeventd in foreground. +- Fix udev flags on remove in create_and_load error path. +- Add dm_list_splice() function to join two lists together. +- Use /bin/bash for scripts with bashisms. +- Switch Libs.private to Requires.private in devmapper.pc and lvm2app.pc. +- Use pkgconfig Requires.private for devmapper-event.pc. + +* Fri Apr 30 2010 Alasdair Kergon - 2.02.64-1 +- Avoid pointless initialisation when the 'version' command is run directly. +- Fix memory leak for invalid regex pattern input. +- Display invalid regex pattern for filter configuration in case of error. +- Fix -M and --type to use strings, not pointers that change on config refresh. +- Fix lvconvert error message when existing mirrored LV is not found. +- Set appropriate udev flags for reserved LVs. +- Disallow the direct removal of a merging snapshot. +- Don't preload the origin when removing a snapshot whose merge is pending. +- Disallow the addition of mirror images while a conversion is happening. +- Disallow primary mirror image removal when mirror is not in-sync. +- Remove obsolete --name parameter from vgcfgrestore. +- Add -S command to clvmd to restart the daemon preserving exclusive locks. +- Increment lvm2app version from 1 to 2 (memory allocation changes). +- Change lvm2app memory alloc/free for pv/vg/lv properties. +- Change daemon lock filename from lvm2_monitor to lvm2-monitor for consistency. +- Add support for new IMPORT{db} udev rule. +- Add DM_UDEV_PRIMARY_SOURCE_FLAG udev flag to recognize proper DM events. +- Also include udev libs in libdevmapper.pc. +- Cache bitset locations to speed up _calc_states. +- Add a regex optimisation pass for shared prefixes and suffixes. +- Add dm_bit_and and dm_bitset_equal to libdevmapper. +- Speed up dm_bit_get_next with ffs(). + +* Thu Apr 15 2010 Alasdair Kergon - 2.02.63-2 +- Remove 'lvmconf --lockinglibdir' from cluster post: locking is now built-in. +- Move libdevmapper-event-lvm2.so to devel package. +- Explicitly specify libdevmapper-event.so* attributes. +- Drop support for upgrades from very old versions that used lvm not lvm2. +- Move libdevmapper-event plug-in libraries into new device-mapper subdirectory. +- Don't verify lvm.conf contents when using rpm --verify. + +* Wed Apr 14 2010 Alasdair Kergon - 2.02.63-1 +- Move development links to shared objects to /usr (hard-coded temporarily). +- Change libdevmapper deactivation to fail if device is open. +- Wipe memory buffers for libdevmapper dm-ioctl parameters before releasing. +- Strictly require libudev if udev_sync is used. +- Add support for ioctl's DM_UEVENT_GENERATED_FLAG. +- Allow incomplete mirror restore in lvconvert --repair upon insufficient space. +- Do not reset position in metadata ring buffer on vgrename and vgcfgrestore. +- Allow VGs with active LVs to be renamed. +- Only pass visible LVs to tools in cmdline VG name/tag expansions without -a. +- Use C locale and mlockall in clvmd and dmeventd. +- Mask LCK_HOLD in cluster VG locks for upgrade compatibility with older clvmd. +- Add activation/polling_interval to lvm.conf as --interval default. +- Don't ignore error if resuming any LV fails when resuming groups of LVs. +- Skip closing persistent filter cache file if open failed. +- Permit mimage LVs to be striped in lvcreate, lvresize and lvconvert. +- Fix pvmove allocation to take existing parallel stripes into account. +- Fix incorrect removal of symlinks after LV deactivation fails. +- Fix is_partitioned_dev not to attempt to reopen device. +- Fix another thread race in clvmd. +- Improve vg_validate to detect some loops in lists. +- Change most remaining log_error WARNING messages to log_warn. +- Always use blocking lock for VGs and orphan locks. +- Allocate all memory for segments from private VG mempool. +- Optimise searching PV segments for seeking the most recently-added. +- Remove duplicated vg_validate checks when parsing cached metadata. +- Use hash table of LVs to speed up parsing of text metadata with many LVs. +- Fix two vg_validate messages, adding whitespace and parentheses. +- When dmeventd is not forking because of -d flag, don't kill parent process. +- Fix dso resource leak in error path of dmeventd. +- Fix --alloc contiguous policy only to allocate one set of parallel areas. +- Do not allow {vg|lv}change --ignoremonitoring if on clustered VG. +- Add ability to create mirrored logs for mirror LVs. +- Fix clvmd cluster propagation of dmeventd monitoring mode. +- Allow ALLOC_ANYWHERE to split contiguous areas. +- Add some assertions to allocation code. +- Introduce pv_area_used into allocation algorithm and add debug messages. +- Add activation/monitoring to lvm.conf. +- Add --monitor and --ignoremonitoring to lvcreate. +- Don't allow resizing of internal logical volumes. +- Fix libdevmapper-event pkgconfig version string to match libdevmapper. +- Avoid scanning all pvs in the system if operating on a device with mdas. +- Disable long living process flag in lvm2app library. +- Fix pvcreate device md filter check. +- Suppress repeated errors about the same missing PV uuids. +- Bypass full device scans when using internally-cached VG metadata. +- Only do one full device scan during each read of text format metadata. +- Look up missing PVs by uuid not dev_name in pvs to avoid invalid stat. + +* Tue Mar 09 2010 Alasdair Kergon - 2.02.62-1 +- Rewrite clvmd init script. +- Add default alternative to mlockall using mlock to reduce pinned memory size. +- Add use_mlockall and mlock_filter to activation section of lvm.conf. +- Handle misaligned devices that report alignment_offset of -1. +- Extend core allocation code in preparation for mirrored log areas. +- No longer fall back to looking up active devices by name if uuid not found. +- Don't touch /dev in vgmknodes if activation is disabled. +- Add --showkeys parameter description to dmsetup man page. +- Add --help option as synonym for help command. +- Add lvm2app functions lvm_{vg|lv}_{get|add|remove}_tag() functions. +- Refactor snapshot-merge deptree and device removal to support info-by-uuid. + +* Fri Mar 05 2010 Peter Rajnoha - 2.02.61-2 +- Change spec file to support excluding cluster components from the build. + +* Tue Feb 16 2010 Alasdair Kergon - 2.02.61-1 +- Add %%ORIGIN support to lv{create,extend,reduce,resize} --extents. +- Accept a list of LVs with 'lvconvert --merge @tag' using process_each_lv. +- Remove false "failed to find tree node" error when activating merging origin. +- Exit with success when lvconvert --repair --use-policies performs no action. +- Avoid unnecessary second resync when adding mimage to core-logged mirror. +- Make clvmd -V return status zero. +- Fix cmirrord segfault in clog_cpg list processing when converting mirror log. +- Deactivate temporary pvmove mirror cluster-wide when activating it fails. +- Add missing metadata vg_reverts in pvmove error paths. +- Unlock shared lock in clvmd if activation calls fail. +- Add lvm_pv_get_size, lvm_pv_get_free and lvm_pv_get_dev_size to lvm2app. +- Change lvm2app to return all sizes in bytes as documented (not sectors). +- Exclude internal VG names and uuids from lists returned through lvm2app. +- Add LVM_SUPPRESS_LOCKING_FAILURE_MESSAGES environment variable. +- Add DM_UDEV_DISABLE_LIBRARY_FALLBACK udev flag to rely on udev only. +- Remove hard-coding that skipped _mimage devices from 11-dm-lvm.rules. +- Export dm_udev_create_cookie function to create new cookies on demand. +- Add --udevcookie, udevcreatecookie and udevreleasecookie to dmsetup. +- Set udev state automatically instead of using DM_UDEV_DISABLE_CHECKING. +- Set udev state automatically instead of using LVM_UDEV_DISABLE_CHECKING. +- Remove pointless versioned symlinks to dmeventd plugin libraries. + +* Fri Jan 29 2010 Alasdair Kergon - 2.02.60-5 +- Replace spaces with tabs in a couple of places in spec file. + +* Sat Jan 23 2010 Alasdair Kergon - 2.02.60-4 +- Extend cmirrord man page. +- Sleep before first progress check iff pvmove/lvconvert interval has prefix '+'. +- Fix cmirror initscript syntax problems. +- Fix first syslog message prefix for dmeventd plugins. +- Make failed locking initialisation messages more descriptive. + +* Fri Jan 22 2010 Alasdair Kergon - 2.02.59-3 +- Fix dmeventd lvm2 wrapper (plug-ins unusable in last build). +- Make failed locking initialisation messages more descriptive. + +* Fri Jan 22 2010 Fabio M. Di Nitto - 2.02.59-2 +- Drop duplicated BuildRequires on openaislib-devel. +- Drop Requires on clusterlib for cmirror subpackage. +- clvmd subpackage should Requires cman (#506592). + +* Fri Jan 22 2010 Alasdair Kergon - 2.02.59-1 +- Add cmirror subpackage for clustered mirrors. +- Set 'preferred_names' in default lvm.conf. +- Add libdevmapper-event-lvm2.so to serialise dmeventd plugin liblvm2cmd use. +- Stop dmeventd trying to access already-removed snapshots. +- Fix clvmd to never scan suspended devices. +- Fix detection of completed snapshot merge. +- Improve snapshot merge metadata import validation. + +* Thu Jan 14 2010 Alasdair Kergon - 2.02.58-1 +- Fix clvmd automatic target module loading crash. +- Fix allocation code not to stop at the first area of a PV that fits. +- Add support for the "snapshot-merge" kernel target (2.6.33-rc1). +- Add --merge to lvconvert to merge a snapshot into its origin. + +* Tue Jan 12 2010 Alasdair Kergon - 2.02.57-1 +- Add --splitmirrors to lvconvert to split off part of a mirror. +- Allow vgremove to remove a VG with PVs missing after a prompt. +- Add activation/udev_rules config option in lvm.conf. +- Add --poll flag to vgchange and lvchange to control background daemon launch. +- Impose limit of 8 mirror images to match the in-kernel kcopyd restriction. +- Log failure type and recognise type 'F' (flush) in dmeventd mirror plugin. +- Add --noudevrules option for dmsetup to disable /dev node management by udev. +- Fix 'dmsetup info -c -o all' to show all fields. +- Fix coredump and memory leak for 'dmsetup help -c'. +- Rename mirror_device_fault_policy to mirror_image_fault policy. +- Use extended status of new kernel snapshot target 1.8.0 to detect when empty. +- Allow use of precommitted metadata when a PV is missing. +- Add global/abort_on_internal_errors to lvm.conf to assist testing. +- If aborting due to internal error, always send that message to stderr. +- Keep log type consistent when changing mirror image count. +- Exit with success in lvconvert --repair --use-policies on failed allocation. +- Ensure any background daemon exits without duplicating parent's functionality. +- Change background daemon process names to "(lvm2)". +- Fix internal lock state after forking. +- Remove empty PV devices if lvconvert --repair is using defined policies. +- Use fixed buffer to prevent stack overflow in persistent filter dump. +- Propagate metadata commit and revert notifications to other cluster nodes. +- Fix metadata caching and lock state propagation to remote nodes in clvmd. +- Properly decode all flags in clvmd messages including VG locks. +- Drop cached metadata after device was auto-repaired and removed from VG. +- Clear MISSING_PV flag if PV reappeared and is empty. +- Fix removal of multiple devices from a mirror. +- Also clean up PVs flagged as missing in vgreduce --removemissing --force. +- Fix some pvresize and toollib error paths with missing VG releases/unlocks. +- Explicitly call suspend for temporary mirror layer. +- Add memlock information to do_lock_lv debug output. +- Always bypass calls to remote cluster nodes for non-clustered VGs. +- Permit implicit cluster lock conversion in pre/post callbacks on local node. +- Permit implicit cluster lock conversion to the lock mode already held. +- Fix lock flag masking in clvmd so intended code paths get invoked. +- Remove newly-created mirror log from metadata if initial deactivation fails. +- Improve pvmove error message when all source LVs are skipped. +- Fix memlock imbalance in lv_suspend if already suspended. +- Fix pvmove test mode not to poll (and fail). +- Fix vgcreate error message if VG already exists. +- Fix tools to use log_error when aborted due to user response to prompt. +- Fix ignored readahead setting in lvcreate --readahead. +- Fix clvmd memory leak in lv_info_by_lvid by calling release_vg. +- If LVM_UDEV_DISABLE_CHECKING is set in environment, disable udev warnings. +- If DM_UDEV_DISABLE_CHECKING is set in environment, disable udev warnings. +- Always set environment variables for an LVM2 device in 11-dm-lvm.rules. +- Disable udev rules for change events with DISK_RO set. +- Add dm_tree_add_dev_with_udev_flags to provide wider support for udev flags. +- Correct activated or deactivated text in vgchange summary message. +- Fix fsadm man page typo (fsdam). + +* Tue Nov 24 2009 Alasdair Kergon - 2.02.56-2 +- Revert vg_read_internal change as clvmd was not ready for vg_read. (2.02.55) +- Fix unbalanced memory locking when deactivating LVs. +- Add missing vg_release to pvs and pvdisplay to fix memory leak. +- Do not try to unlock VG which is not locked when processing a VG. +- Update .cache file after every full device rescan in clvmd. +- Refresh all device filters (including sysfs) before each full device rescan. +- Return error status if vgchange fails to activate any volume. + +* Thu Nov 19 2009 Alasdair Kergon - 2.02.55-1 +- Fix deadlock when changing mirrors due to unpaired memlock refcount changes. +- Fix pvmove region_size overflow for very large PVs. +- Fix lvcreate and lvresize %%PVS argument always to use sensible total size. +- Directly restrict vgchange to activating visible LVs. +- Fix hash lookup segfault when keys compared are different lengths. +- Flush stdout after yes/no prompt. +- Recognise DRBD devices and handle them like md devices. +- Add dmsetup --inactive support (requires kernel support targetted for 2.6.33). + +* Fri Nov 13 2009 Peter Rajnoha - 2.02.54-3 +- Support udev flags even when udev_sync is disabled. +- Remove last_rule from udev_rules. +- Udev rules cleanup. + +* Tue Nov 3 2009 Peter Rajnoha - 2.02.54-2 +- Enable udev synchronisation code. +- Install default udev rules for device-mapper and LVM2. +- Add BuildRequires: libudev-devel. +- Add Requires: libudev (to check udev is running). +- Add Requires: util-linux-ng (blkid used in udev rules). +- Add Conflicts: dracut < 002-18 (for dracut to install required udev rules) + +* Tue Oct 27 2009 Alasdair Kergon - 2.02.54-1 +- Add implict pvcreate support to vgcreate and vgextend. +- Add --pvmetadatacopies for pvcreate, vgcreate, vgextend, vgconvert. +- Distinguish between powers of 1000 and powers of 1024 in unit suffixes. +- Restart lvconverts in vgchange. +- Don't attempt to deactivate an LV if any of its snapshots are in use. +- Return error if lv_deactivate fails to remove device from kernel. +- Treat input units of both 's' and 'S' as 512-byte sectors. (2.02.49) +- Use standard output units for 'PE Size' and 'Stripe size' in pv/lvdisplay. +- Add global/si_unit_consistency to enable cleaned-up use of units in output. +- Only do lock conversions in clvmd if we are explicitly asked for one. +- Fix clvmd segfault when refresh_toolcontext fails. +- Cleanup mimagetmp LV if allocation fails for new lvconvert mimage. +- Handle metadata with unknown segment types more gracefully. +- Make clvmd return 0 on success rather than 1. +- Correct example.conf to indicate that lvm2 not lvm1 is the default format. +- Delay announcing mirror monitoring to syslog until initialisation succeeded. +- Update lvcreate/lvconvert man pages to explain PhysicalVolume parameter. +- Document --all option in man pages and cleanup {pv|vg|lv}{s|display} pages. + +* Mon Oct 19 2009 Fabio M. Di Nitto - 2.02.53-3 +- Enable openais support in clvmd. + +* Fri Sep 25 2009 Alasdair Kergon - 2.02.53-2 +- Reissued tarball to fix compilation warning from lvm2_log_fn prototype. + +* Fri Sep 25 2009 Alasdair Kergon - 2.02.53-1 +- Create any directories in /dev with umask 022. (#507397) +- Handle paths supplied to dm_task_set_name by getting name from /dev/mapper. +- Add splitname and --yes to dmsetup man page. + +* Thu Sep 24 2009 Peter Rajnoha - 2.02.52-4 +- Disable udev synchronisation code (revert previous build). + +* Mon Sep 21 2009 Peter Rajnoha - 2.02.52-3 +- Enable udev synchronisation code. +- Install default udev rules for device-mapper and LVM2. +- Add BuildRequires: libudev-devel. +- Add Requires: libudev (to check udev is running). +- Add Requires: util-linux-ng (blkid used in udev rules). + +* Wed Sep 16 2009 Alasdair Kergon - 2.02.52-2 +- Build dmeventd and place into a separate set of subpackages. +- Remove no-longer-needed BuildRoot tag and buildroot emptying at install. + +* Tue Sep 15 2009 Alasdair Kergon - 2.02.52-1 +- Prioritise write locks over read locks by default for file locking. +- Add local lock files with suffix ':aux' to serialise locking requests. +- Fix readonly locking to permit writeable global locks (for vgscan). (2.02.49) +- Make readonly locking available as locking type 4. +- Fix global locking in PV reporting commands (2.02.49). +- Make lvchange --refresh only take a read lock on volume group. +- Fix race where non-blocking file locks could be granted in error. +- Fix pvcreate string termination in duplicate uuid warning message. +- Don't loop reading sysfs with pvcreate on a non-blkext partition (2.02.51). +- Fix vgcfgrestore error paths when locking fails (2.02.49). +- Make clvmd check corosync to see what cluster interface it should use. +- Fix vgextend error path - if ORPHAN lock fails, unlock / release vg (2.02.49). +- Clarify use of PE ranges in lv{convert|create|extend|resize} man pages. +- Restore umask when device node creation fails. +- Check kernel vsn to use 'block_on_error' or 'handle_errors' in mirror table. + +* Mon Aug 24 2009 Milan Broz - 2.02.51-3 +- Fix global locking in PV reporting commands (2.02.49). +- Fix pvcreate on a partition (2.02.51). +- Build clvmd with both cman and corosync support. + +* Thu Aug 6 2009 Alasdair Kergon - 2.02.51-2 +- Fix clvmd locking broken in 2.02.50-1. +- Only change LV /dev symlinks on ACTIVATE not PRELOAD (so not done twice). +- Make lvconvert honour log mirror options combined with downconversion. +- Add devices/data_alignment_detection to lvm.conf. +- Add devices/data_alignment_offset_detection to lvm.conf. +- Add --dataalignmentoffset to pvcreate to shift start of aligned data area. +- Update synopsis in lvconvert manpage to mention --repair. +- Document -I option of clvmd in the man page. + +* Thu Jul 30 2009 Alasdair Kergon - 2.02.50-2 +- lvm2-devel requires device-mapper-devel. +- Fix lvm2app.pc filename. + +* Tue Jul 28 2009 Alasdair Kergon - 2.02.50-1 +- Add libs and devel subpackages to include shared libraries for applications. + N.B. The liblvm2app API is not frozen yet and may still be changed + Send any feedback to the mailing list lvm-devel@redhat.com. +- Remove obsolete --with-dmdir from configure. +- Add global/wait_for_locks to lvm.conf so blocking for locks can be disabled. +- Fix race condition with vgcreate and vgextend on same device since 2.02.49. +- Add an API version number, LVM_LIBAPI, to the VERSION string. +- Return EINVALID_CMD_LINE not success when invalid VG name format is used. +- Remove unnecessary messages after vgcreate/vgsplit code change in 2.02.49. +- Store any errno and error messages issued while processing each command. + +* Sat Jul 25 2009 Fedora Release Engineering - 2.02.49-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Wed Jul 15 2009 Alasdair Kergon - 2.02.49-1 +- Exclude VG_GLOBAL from vg_write_lock_held so scans open devs read-only again. +- Fix dev name mismatch in vgcreate man page example. +- Check md devices for a partition table during device scan. +- Add extended device (blkext) and md partition (mdp) types to filters. +- Make text metadata read errors for segment areas more precise. +- Fix text segment metadata read errors to mention correct segment name. +- Include segment and LV names in text segment import error messages. +- Fix memory leak in vgsplit when re-reading the vg. +- Permit several segment types to be registered by a single shared object. +- Update the man pages to document size units uniformly. +- Allow commandline sizes to be specified in terms of bytes and sectors. +- Update 'md_chunk_alignment' to use stripe-width to align PV data area. +- Fix segfault in vg_release when vg->cmd is NULL. +- Add dm_log_with_errno and dm_log_with_errno_init, deprecating the old fns. +- Fix whitespace in linear target line to fix identical table line detection. +- Add device number to more log messages during activation. + +* Fri Jul 10 2009 Fabio M. Di Nitto 2.02.48-2 +- BuildRequires and Requires on stable versions of both corosync-lib (1.0.0-1) + and cluster-lib (3.0.0-20). + +* Tue Jun 30 2009 Alasdair Kergon - 2.02.48-1 +- Abort if automatic metadata correction fails when reading VG to update it. +- Don't fallback to default major number in libdm: use dm_task_set_major_minor. +- Explicitly request fallback to default major number in device mapper. +- Ignore suspended devices during repair. +- Suggest using lvchange --resync when adding leg to not-yet-synced mirror. +- Destroy toolcontext on clvmd exit to avoid memory pool leaks. +- Fix lvconvert not to poll mirror if no conversion in progress. +- Fix memory leaks in toolcontext error path. +- Reinstate partial activation support in clustered mode. +- Allow metadata correction even when PVs are missing. +- Use 'lvm lvresize' instead of 'lvresize' in fsadm. +- Do not use '-n' realine option in fsadm for rescue disk compatiblity. +- Round up requested readahead to at least one page and print warning. +- Try to repair vg before actual vgremove when force flag provided. +- Unify error messages when processing inconsistent volume group. +- Introduce lvconvert --use_policies (repair policy according to lvm.conf). +- Fix rename of active snapshot with virtual origin. +- Fix convert polling to ignore LV with different UUID. +- Cache underlying device readahead only before activation calls. +- Fix segfault when calculating readahead on missing device in vgreduce. +- Remove verbose 'visited' messages. +- Handle multi-extent mirror log allocation when smallest PV has only 1 extent. +- Add LSB standard headers and functions (incl. reload) to clvmd initscript. +- When creating new LV, double-check that name is not already in use. +- Remove /dev/vgname/lvname symlink automatically if LV is no longer visible. +- Rename internal vorigin LV to match visible LV. +- Suppress 'removed' messages displayed when internal LVs are removed. +- Fix lvchange -a and -p for sparse LVs. +- Fix lvcreate --virtualsize to activate the new device immediately. +- Make --snapshot optional with lvcreate --virtualsize. +- Generalise --virtualoriginsize to --virtualsize. +- Skip virtual origins in process_each_lv_in_vg() without --all. +- Fix counting of virtual origin LVs in vg_validate. +- Attempt to load dm-zero module if zero target needed but not present. +- Add crypt target handling to libdevmapper tree nodes. +- Add splitname command to dmsetup. +- Add subsystem, vg_name, lv_name, lv_layer fields to dmsetup reports. +- Make mempool optional in dm_split_lvm_name() in libdevmapper. + +* Wed Jun 10 2009 Fabio M. Di Nitto - 2.02.47-2 +- BuildRequire newer version of corosynclib (0.97-1) to link against + latest libraries version (soname 4.0.0). +- Add lvm2-2_02_48-cluster-cpg-new-api.patch to port clvmd-corosync + to new corosync cpg API. + +* Fri May 22 2009 Alasdair Kergon - 2.02.47-1 +- Inherit readahead setting from underlying devices during activation. +- Detect LVs active on remote nodes by querying locks if supported. +- Enable online resizing of mirrors. +- Use suspend with flush when device size was changed during table preload. +- Implement query_resource_fn for cluster_locking. +- Support query_resource_fn in locking modules. +- Fix pvmove to revert operation if temporary mirror creation fails. +- Fix metadata export for VG with missing PVs. +- Add vgimportclone and install it and the man page by default. +- Force max_lv restriction only for newly created LV. +- Do not query nonexistent devices for readahead. +- Reject missing PVs from allocation in toollib. +- Fix PV datalignment for values starting prior to MDA area. (2.02.45) +- Add sparse devices: lvcreate -s --virtualoriginsize (hidden zero origin). +- Fix minimum width of devices column in reports. +- Add lvs origin_size field. +- Implement lvconvert --repair for repairing partially-failed mirrors. +- Fix vgreduce --removemissing failure exit code. +- Fix remote metadata backup for clvmd. +- Fix metadata backup to run after vg_commit always. +- Fix pvs report for orphan PVs when segment attributes are requested. +- Fix pvs -a output to not read volume groups from non-PV devices. +- Introduce memory pools per volume group (to reduce memory for large VGs). +- Always return exit error status when locking of volume group fails. +- Fix mirror log convert validation question. +- Enable use of cached metadata for pvs and pvdisplay commands. +- Fix memory leak in mirror allocation code. +- Save and restore the previous logging level when log level is changed. +- Fix error message when archive initialization fails. +- Make sure clvmd-corosync releases the lockspace when it exits. +- Fix segfault for vgcfgrestore on VG with missing PVs. +- Block SIGTERM & SIGINT in clvmd subthreads. +- Detect and conditionally wipe swapspace signatures in pvcreate. +- Fix maximal volume count check for snapshots if max_lv set for volume group. +- Fix lvcreate to remove unused cow volume if the snapshot creation fails. +- Fix error messages when PV uuid or pe_start reading fails. +- Flush memory pool and fix locking in clvmd refresh and backup command. +- Fix unlocks in clvmd-corosync. (2.02.45) +- Fix error message when adding metadata directory to internal list fails. +- Fix size and error message of memory allocation at backup initialization. +- Remove old metadata backup file after renaming VG. +- Restore log_suppress state when metadata backup file is up-to-date. +- Export dm_tree_node_size_changed() from libdevmapper. +- Fix segfault when getopt processes dmsetup -U, -G and -M options. +- Add _smp_mflags to compilation and remove DESTDIR. + +* Fri Apr 17 2009 Milan Broz - 2.02.45-4 +- Add MMC (mmcblk) device type to filters. (483686) + +* Mon Mar 30 2009 Jussi Lehtola 2.02.45-3 +- Add FTP server location to Source0. + +* Mon Mar 30 2009 Fabio M. Di Nitto - 2.02.45-2 +- BuildRequires a newer version of corosync (0.95-2) to fix linking. + +* Tue Mar 3 2009 Alasdair Kergon - 2.02.45-1 +- Update clusterlib and corosync dependencies. +- Attempt proper clean up in child before executing fsadm or modprobe. +- Do not scan devices if reporting only attributes from PV label. +- Use pkgconfig to obtain corosync library details during configuration. +- Fix error returns in clvmd-corosync interface to DLM. +- Add --refresh to vgchange and vgmknodes man pages. +- Pass --test from lvresize to fsadm as --dry-run. +- Prevent fsadm from checking mounted filesystems. +- No longer treats any other key as 'no' when prompting in fsadm. +- Add --dataalignment to pvcreate to specify alignment of data area. +- Fix unblocking of interrupts after several commands. +- Provide da and mda locations in debug message when writing text format label. +- Mention the restriction on file descriptors at invocation on the lvm man page. +- Index cached vgmetadata by vgid not vgname to cope with duplicate vgnames. +- No longer require kernel and metadata major numbers to match. +- If kernel supports only one dm major number, use in place of any supplied. +- Add option to /etc/sysconfig/cluster to select cluster type for clvmd. +- Allow clvmd to start up if its lockspace already exists. +- Separate PV label attributes which do not need parse metadata when reporting. +- Remove external dependency on the 'cut' command from fsadm. +- Fix pvs segfault when pv mda attributes requested for unavailable PV. +- Add fsadm support for reszing ext4 filesysystems. +- Change lvm2-cluster to corosync instead of cman. +- Fix some old changelog typos in email addresses. + +* Wed Feb 25 2009 Fedora Release Engineering - 2.02.44-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Tue Jan 27 2009 Alasdair Kergon - 2.02.44-1 +- Add --nameprefixes, --unquoted, --rows to pvs, vgs, lvs man pages. +- Fix lvresize size conversion for fsadm when block size is not 1K. +- Fix pvs segfault when run with orphan PV and some VG fields. +- Display a 'dev_size' of zero for missing devices in reports. +- Add pv_mda_size to pvs and vg_mda_size to vgs. +- Fix lvmdump /sys listing to include virtual devices directory. +- Add "--refresh" functionality to vgchange and vgmknodes. +- Avoid exceeding LV size when wiping device. +- Calculate mirror log size instead of using 1 extent. +- Ensure requested device number is available before activating with it. +- Fix incorrect exit status from 'help '. +- Fix vgrename using UUID if there are VGs with identical names. +- Fix segfault when invalid field given in reporting commands. +- Use better random seed value in temp file creation. +- Add read_urandom to read /dev/urandom. Use in uuid calculation. +- Fix race in vgcreate that would result in second caller overwriting first. +- Fix uninitialised lv_count in vgdisplay -c. +- Don't skip updating pvid hash when lvmcache_info struct got swapped. +- Fix startup race in clvmd. +- Cope with snapshot dependencies when removing a whole VG with lvremove. +- Make man pages and tool help text consistent using | for alternative options. +- Add "all" field to reports expanding to all fields of report type. +- Enforce device name length and character limitations in libdm. + +* Mon Nov 10 2008 Alasdair Kergon - 2.02.43-1 +- Upstream merge of device-mapper and lvm2 source. +- Correct prototype for --permission on lvchange and lvcreate man pages. +- Exit with non-zero status from vgdisplay if couldn't show any requested VG. +- libdevmapper.pc: Use simplified x.y.z version number. +- Accept locking fallback_to_* options in the global section as documented. +- Several fixes to lvconvert involving mirrors. +- Avoid overwriting in-use on-disk text metadata when metadataarea fills up. +- Generate man pages from templates and include version. +- Fix misleading error message when there are no allocatable extents in VG. +- Fix handling of PVs which reappeared with old metadata version. +- Fix validation of --minor and --major in lvcreate to require -My always. +- Allow lvremove to remove LVs from VGs with missing PVs. +- In VG with PVs missing, by default allow activation of LVs that are complete. +- 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. +- Add devices/md_chunk_alignment to lvm.conf. +- Pass struct physical_volume to pe_align and adjust for md chunk size. +- Avoid shuffling remaining mirror images when removing one, retaining primary. +- 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. +- vgremove tries to remove lv snapshot first. +- Improve file descriptor leak detection to display likely culprit and filename. +- 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. +- 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. +- libdevmapper: Only resume devices in dm_tree_preload_children if size changes. +- libdevmapper: Extend deptree buffers so the largest possible device numbers fit. +- libdevmapper: Underline longer report help text headings. + +* Tue Oct 7 2008 Alasdair Kergon - 2.02.39-6 +- Only set exec_prefix once and configure explicit directories to work with + new version of rpm. + +* Fri Sep 26 2008 Fabio M. Di Nitto - 2.02.39-5 +- Add BuildRequires on cmanlib-devel. This is required after libcman split + from cman and cman-devel into cmanlib and cmanlib-devel. +- Make versioned BuildRequires on cman-devel and cmanlib-devel more strict + to guarantee to get the right version. + +* Thu Sep 25 2008 Fabio M. Di Nitto - 2.02.39-5 +- Add versioned BuildRequires on new cman-devel. + +* Sun Sep 21 2008 Ville Skyttä - 2.02.39-5 +- Change %%patch to %%patch0 to match Patch0 as required by RPM package update. + +* Thu Aug 7 2008 Tom "spot" Callaway - 2.02.39-4 +- Fix license tag. + +* Fri Jun 27 2008 Alasdair Kergon - 2.02.39-3 +- 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. +- Avoid undefined status code after _memlock commands in lvm shell. +- Fix and improve readahead 'auto' calculation for stripe_size. +- Fix lvchange output for -r auto setting if auto is already set. +- Fix add_mirror_images not to dereference uninitialized log_lv upon failure. +- Add --force to lvextend and lvresize. +- Fix vgchange to not activate component mirror volumes directly. + +* Wed Jun 25 2008 Alasdair Kergon - 2.02.38-2 +- dmsetup: Add --unquoted and --rows to 'info -c' command. +- libdevmapper: Fix inverted no_flush debug message. + +* Fri Jun 13 2008 Alasdair Kergon - 2.02.38-1 +- libdevmapper: Make dm_hash_iter safe against deletion. +- libdevmapper: Accept a NULL pointer to dm_free silently. +- libdevmapper: Calculate string size within dm_pool_grow_object. +- libdevmapper: Send reporting field help text to stderr not stdout. + +- dmsetup: Add tables_loaded, readonly and suspended columns to reports. +- dmsetup: Add --nameprefixes for new report output format FIELD=VALUE. + +- Add --nameprefixes to reporting tools for field name prefix output format. +- 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. +- In script-processing mode, stop if any command fails. +- Warn if command exits with non-zero status code without a prior log_error. +- Correct config file line numbers in messages when parsing comments. +- Add missing deactivation after activation failure in lvcreate -Zy. +- When removing LV symlinks, skip any where the VG name is not determined. +- Fix vgsplit internal counting of snapshot LVs. +- Update vgsplit to only restrict split with active LVs involved in split. +- Fix vgsplit to only move hidden 'snapshotN' LVs when necessary. +- Update vgsplit man page to reflect lvnames on the cmdline. +- Update vgsplit to take "-n LogicalVolumeName" on the cmdline. +- Fix vgsplit error paths to release vg_to lock. +- 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. +- Add assertions to trap deprecated P_ and V_ lock usage. +- Avoid using DLM locks with LCK_CACHE type P_ lock requests. +- Don't touch /dev in vgrename if activation is disabled. +- Exclude VG_GLOBAL from internal concurrent VG lock counter. +- Fix vgmerge snapshot_count when source VG contains snapshots. +- Fix internal LV counter when a snapshot is removed. +- Fix metadata corruption writing lvm1-formatted metadata with snapshots. +- Fix lvconvert -m0 allocatable space check. +- Don't attempt remote metadata backups of non-clustered VGs. +- Improve preferred_names lvm.conf example. +- Fix vgdisplay 'Cur LV' field to match lvdisplay output. +- Fix lv_count report field to exclude hidden LVs. +- Fix some pvmove error status codes. +- Indicate whether or not VG is clustered in vgcreate log message. +- Mention default --clustered setting in vgcreate man page. +- Fix vgreduce to use vg_split_mdas to check sufficient mdas remain. +- Update lvmcache VG lock state for all locking types now. +- Fix output if overriding command_names on cmdline. +- Add check to vg_commit() ensuring VG lock held before writing new VG metadata. +- Add validation of LV name to pvmove -n. +- Add some basic internal VG lock validation. +- Fix vgsplit internal counting of snapshot LVs. +- Update vgsplit to only restrict split with active LVs involved in split. +- Fix vgsplit to only move hidden 'snapshotN' LVs when necessary. +- Update vgsplit man page to reflect lvnames on the cmdline. +- Update vgsplit to take "-n LogicalVolumeName" on the cmdline. +- Fix vgsplit error paths to release vg_to lock. +- Fix vgsplit locking of new VG. +- Avoid erroneous vgsplit error message for new VG. +- 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. +- Make clvmd-cman use a hash rather than an array for node updown info. +- Decode numbers in clvmd debugging output. +- Fix uninitialised mutex in clvmd if all daemons are not running at startup. +- Add config file overrides to clvmd when it reads the active LVs list. +- Make clvmd refresh the context correctly when lvm.conf is updated. +- Fix another allocation bug with clvmd and large node IDs. +- Fix uninitialised variable in clvmd that could cause odd hangs. +- Correct command name in lvmdiskscan man page. +- clvmd no longer crashes if it sees nodeids over 50. +- Fix potential deadlock in clvmd thread handling. +- Update usage message for clvmd. +- Fix clvmd man page not to print
and clarified debug options. +- Escape double quotes and backslashes in external metadata and config data. +- Correct a function name typo in _line_append error message. +- Fix resetting of MIRROR_IMAGE and VISIBLE_LV after removal of LV. +- Fix remove_layer_from_lv to empty the LV before removing it. +- Add missing no-longer-used segs_using_this_lv test to check_lv_segments. +- Fix lvconvert detection of mirror conversion in progress. +- Avoid automatic lvconvert polldaemon invocation when -R specified. +- Fix 'pvs -a' to detect VGs of PVs without metadata areas. +- Divide up internal orphan volume group by format type. +- Fix lvresize to support /dev/mapper prefix in the LV name. +- Fix lvresize to pass new size to fsadm when extending device. +- 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. + +* Wed Apr 2 2008 Jeremy Katz - 2.02.33-11 +- Adjust for new name for vio disks (from danpb) +- And fix the build (also from danpb) + +* Wed Mar 5 2008 Jeremy Katz - 2.02.33-10 +- recognize vio disks + +* Thu Jan 31 2008 Alasdair Kergon - 2.02.33-9 +- Improve internal label caching performance while locks are held. +- Fix mirror log name construction during lvconvert. + +* Tue Jan 29 2008 Alasdair Kergon - 2.02.32-8 +- Fix pvs, vgs, lvs error exit status on some error paths. +- Fix new parameter validation in vgsplit and test mode. +- Fix internal metadata corruption in lvchange --resync. + +* Sat Jan 19 2008 Alasdair Kergon - 2.02.31-7 +- Avoid readahead error message when using default setting of lvcreate -M1. +- Fix lvcreate --nosync not to wait for non-happening sync. +- Add very_verbose lvconvert messages. + +* Thu Jan 17 2008 Alasdair Kergon - 2.02.30-6 +- Remove static libraries and binaries and move most binaries out of /usr. +- Fix a segfault if using pvs with --all argument. +- Fix vgreduce PV list processing not to process every PV in the VG. +- Reinstate VG extent size and stripe size defaults (halved). +- Set default readahead to twice maximium stripe size. +- Detect non-orphans without MDAs correctly. +- Prevent pvcreate from overwriting MDA-less PVs belonging to active VGs. +- Don't use block_on_error with mirror targets version 1.12 and above. +- Change vgsplit -l (for unimplemented --list) into --maxlogicalvolumes. +- Update vgsplit to accept vgcreate options when new VG is destination. +- Update vgsplit to accept existing VG as destination. +- Major restructuring of pvmove and lvconvert code, adding stacking support. +- Add new convert_lv field to lvs output. +- Permit LV segment fields with PV segment reports. +- Extend lvconvert to use polldaemon and wait for completion of initial sync. +- Add seg_start_pe and seg_pe_ranges to reports. +- Add fsadm interface to filesystem resizing tools. +- Update --uuid argument description in man pages. +- Print warning when lvm tools are running as non-root. + +* Thu Dec 20 2007 Alasdair Kergon - 2.02.29-5 +- Fix libdevmapper readahead processing with snapshots (for example). + +* Thu Dec 13 2007 Alasdair Kergon - 2.02.29-4 +- Add missing lvm2 build & runtime dependencies on module-init-tools (modprobe). + +* Thu Dec 6 2007 Jeremy Katz - 2.02.29-3 +- fix requirements + +* Thu Dec 06 2007 Alasdair Kergon - 2.02.29-2 +- Fold device-mapper build into this lvm2 spec file. + +* Wed Dec 05 2007 Alasdair Kergon - 2.02.29-1 +- Make clvmd backup vg metadata on remote nodes. +- 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. +- Avoid nested vg_reads when processing PVs in VGs and fix associated locking. +- Attempt to remove incomplete LVs with lvcreate zeroing/activation problems. +- Add full read_ahead support. +- 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. +- Detect md superblocks version 1.0, 1.1 and 1.2. +- Add some pv-related error paths. +- Handle future sysfs subsystem/block/devices directory structure. +- Fix a bug in lvm_dump.sh checks for lvm/dmsetup binaries. +- Fix underquotations in lvm_dump.sh. +- 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. +- 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. +- 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. + +* Fri Aug 24 2007 Alasdair Kergon - 2.02.28-1 +- vgscan and pvscan now trigger clvmd -R, which should now work. +- Fix clvmd logging so you can get lvm-level debugging out of it. +- Allow clvmd debug to be turned on in a running daemon using clvmd -d [-C]. +- Add more cluster info to lvmdump. +- Fix lvdisplay man page to say LV size is reported in sectors, not KB. +- Fix loading of persistent cache if cache_dir is used. +- Only permit --force, --verbose and --debug arguments to be repeated. +- Add support for renaming mirrored LVs. +- Add --mirrorlog argument to specify log type for mirrors. +- Don't leak a file descriptor if flock or fcntl fails. +- Detect stream write failure reliably. +- Reduce severity of lstat error messages to very_verbose. +- Update to use autoconf 2.61, while still supporting 2.57. + +* Thu Aug 09 2007 Alasdair Kergon - 2.02.27-3 +- Clarify GPL licence as being version 2. + +* Wed Aug 01 2007 Milan Broz - 2.02.27-2 +- Add SUN's LDOM virtual block device (vdisk) and ps3disk to filters. + +* Wed Jul 18 2007 Alasdair Kergon - 2.02.27-1 +- Add -f to vgcfgrestore to list metadata backup files. +- Add pvdisplay --maps implementation. +- Add devices/preferred_names config regex list for displayed device names. +- Add vg_mda_count and pv_mda_count columns to reports. +- Change cling alloc policy attribute character from 'C' to l'. +- Print warnings to stderr instead of stdout. +- Fix snapshot cow area deactivation if origin is not active. +- Reinitialise internal lvmdiskscan variables when called repeatedly. +- Allow keyboard interrupt during user prompts when appropriate. +- Fix deactivation code to follow dependencies and remove symlinks. +- Fix a segfault in device_is_usable() if a device has no table. +- Fix creation and conversion of mirrors with tags. +- Add command stub for pvck. +- Handle vgsplit of an entire VG as a vgrename. +- Fix vgsplit for lvm1 format (set and validate VG name in PVs metadata). +- Split metadata areas in vgsplit properly. +- Fix and clarify vgsplit error messages. +- Update lists of attribute characters in man pages. +- 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 some more debug messages to clvmd startup. +- Fix thread race in clvmd. +- Make clvmd cope with quorum devices. +- Add extra internal error checking to clvmd. +- Fix missing lvm_shell symbol in lvm2cmd library. +- Move regex functions into libdevmapper. +- Add kernel and device-mapper targets versions to lvmdump. +- Add /sys/block listings to lvmdump. +- Make lvmdump list /dev recursively. +- Mark /etc/lvm subdirectories as directories in spec file. + +* Mon Mar 19 2007 Alasdair Kergon - 2.02.24-1 +- Add BuildRequires readline-static until makefiles get fixed. +- 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. +- Add a few missing pieces of vgname command line validation. +- Support the /dev/mapper prefix on most command lines. + +* Thu Mar 08 2007 Alasdair Kergon - 2.02.23-1 +- Fix vgrename active LV check to ignore differing vgids. +- Fix two more segfaults if an empty config file section encountered. +- Fix a leak in a reporting error path. +- Add devices/cache_dir & devices/cache_file_prefix, deprecating devices/cache. + +* Tue Feb 27 2007 Alasdair Kergon - 2.02.22-3 +- Move .cache file to /etc/lvm/cache. + +* Wed Feb 14 2007 Alasdair Kergon - 2.02.22-2 +- Rebuild after device-mapper package split. + +* Wed Feb 14 2007 Alasdair Kergon - 2.02.22-1 +- Add ncurses-static BuildRequires after package split. +- 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. +- Trivial man page corrections (-b and -P). +- Add global/units to example.conf. +- Remove readline support from lvm.static. + +* Mon Feb 05 2007 Alasdair Kergon - 2.02.21-4 +- Remove file wildcards and unintentional lvmconf installation. + +* Mon Feb 05 2007 Alasdair Kergon - 2.02.21-3 +- Add build dependency on new device-mapper-devel package. + +* Wed Jan 31 2007 Alasdair Kergon - 2.02.21-2 +- Remove superfluous execute perm from .cache data file. + +* Tue Jan 30 2007 Alasdair Kergon - 2.02.21-1 +- 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. + +* Fri Jan 26 2007 Alasdair Kergon - 2.02.20-1 +- Fix exit statuses of reporting tools. +- Add some missing close() and fclose() return code checks. +- Add devices/ignore_suspended_devices to ignore suspended dm devices. +- Fix refresh_toolcontext() always to wipe persistent device filter cache. +- Long-lived processes write out persistent dev cache in refresh_toolcontext(). +- Streamline dm_report_field_* interface. +- Update reporting man pages. +- Add --clustered to man pages. +- Add field definitions to report help text. + +* Mon Jan 22 2007 Milan Broz - 2.02.19-2 +- Remove BuildRequires libtermcap-devel + Resolves: #223766 + +* Wed Jan 17 2007 Alasdair Kergon - 2.02.19-1 +- Fix a segfault if an empty config file section encountered. +- Fix partition table processing after sparc changes. +- Fix cmdline PE range processing segfault. +- Move basic reporting functions into libdevmapper. + +* Fri Jan 12 2007 Alasdair Kergon - 2.02.18-2 +- Rebuild. + +* Thu Jan 11 2007 Alasdair Kergon - 2.02.18-1 +- 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. +- Fix ambiguous vgsplit error message for split LV. +- Fix lvextend man page typo. +- Use no flush suspending for mirrors. +- Fix create mirror with name longer than 22 chars. + +* Thu Dec 14 2006 Alasdair Kergon - 2.02.17-1 +- Add missing pvremove error message when device doesn't exist. +- When lvconvert allocates a mirror log, respect parallel area constraints. +- Check for failure to allocate just the mirror log. +- 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 hang in clvmd if a pre-command failed. + +* Fri Dec 01 2006 Alasdair Kergon - 2.02.16-1 +- 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 clvmd startup script. +- Add -T (startup timeout) switch to clvmd. +- Improve lvm_dump.sh robustness. + +* Tue Nov 21 2006 Alasdair Kergon - 2.02.15-3 +- Fix clvmd init script line truncation. + +* Tue Nov 21 2006 Alasdair Kergon - 2.02.15-2 +- Fix lvm.conf segfault. + +* Mon Nov 20 2006 Alasdair Kergon - 2.02.15-1 +- New upstream - see WHATS_NEW. + +* Sat Nov 11 2006 Alasdair Kergon - 2.02.14-1 +- New upstream - see WHATS_NEW. + +* Mon Oct 30 2006 Alasdair Kergon - 2.02.13-2 +- Fix high-level free-space check on partial allocation. + Resolves: #212774 + +* Fri Oct 27 2006 Alasdair Kergon - 2.02.13-1 +- New upstream - see WHATS_NEW. + Resolves: #205818 + +* Fri Oct 20 2006 Alasdair Kergon - 2.02.12-2 +- Remove no-longer-used ldconfig from lvm2-cluster and fix lvmconf + to cope without the shared library. + +* Mon Oct 16 2006 Alasdair Kergon - 2.02.12-1 +- New upstream. + +* Sat Oct 14 2006 Alasdair Kergon - 2.02.11-6 +- Incorporate lvm2-cluster as a subpackage. + +* Sat Oct 14 2006 Alasdair Kergon - 2.02.11-5 +- Install lvmdump script. + +* Sat Oct 14 2006 Alasdair Kergon - 2.02.11-4 +- Build in cluster locking with fallback if external locking fails to load. + +* Sat Oct 14 2006 Alasdair Kergon - 2.02.11-3 +- Drop .0 suffix from release. + +* Sat Oct 14 2006 Alasdair Kergon - 2.02.11-2.0 +- Append distribution to release. + +* Fri Oct 13 2006 Alasdair Kergon - 2.02.11-1.0 +- New upstream with numerous fixes and small enhancements. + (See the WHATS_NEW documentation file for complete upstream changelog.) + +* Thu Sep 28 2006 Peter Jones - 2.02.06-4 +- Fix metadata and map alignment problems on ppc64 (#206202) + +* Tue Aug 1 2006 Jeremy Katz - 2.02.06-3 +- require new libselinux to avoid segfaults on xen (#200783) + +* Thu Jul 27 2006 Jeremy Katz - 2.02.06-2 +- free trip through the buildsystem + +* Wed Jul 12 2006 Jesse Keating - 2.02.06-1.2.1 +- rebuild + +* Tue Jun 6 2006 Stephen C. Tweedie - 2.02.06-1.2 +- Rebuild to pick up new nosegneg libc.a for lvm.static + +* Mon May 22 2006 Alasdair Kergon - 2.02.06-1.1 +- Reinstate archs now build system is back. +- BuildRequires libsepol-devel. + +* Fri May 12 2006 Alasdair Kergon - 2.02.06-1.0 +- New upstream release. + +* Sat Apr 22 2006 Alasdair Kergon - 2.02.05-1.1 +- Exclude archs that aren't building. + +* Fri Apr 21 2006 Alasdair Kergon - 2.02.05-1.0 +- Fix VG uuid comparisons. + +* Wed Apr 19 2006 Alasdair Kergon - 2.02.04-1.0 +- New release upstream, including better handling of duplicated VG names. + +* Fri Feb 10 2006 Jesse Keating - 2.02.01-1.2.1 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 2.02.01-1.2 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Fri Dec 2 2005 Peter Jones - 2.02.01-1 +- update to 2.02.01 + +* Tue Nov 8 2005 Jeremy Katz - 2.01.14-4 +- add patch for xen block devices + +* Sat Oct 15 2005 Florian La Roche +- add -lselinux -lsepol to the static linking -ldevice-mapper requires it + +* Wed Sep 14 2005 Jeremy Katz - 2.01.14-2 +- the distro doesn't really work without a 2.6 kernel, so no need to require it + +* Thu Aug 4 2005 Alasdair Kergon - 2.01.14-1.0 +- And a few more bugs fixes. + +* Wed Jul 13 2005 Alasdair Kergon - 2.01.13-1.0 +- Fix several bugs discovered in the last release. + +* Tue Jun 14 2005 Alasdair Kergon - 2.01.12-1.0 +- New version upstream with a lot of fixes and enhancements. + +* Wed Apr 27 2005 Alasdair Kergon - 2.01.08-2.1 +- Add /etc/lvm + +* Wed Apr 27 2005 Alasdair Kergon - 2.01.08-2.0 +- No longer abort read operations if archive/backup directories aren't there. +- Add runtime directories and file to the package. + +* Tue Mar 22 2005 Alasdair Kergon - 2.01.08-1.0 +- Improve detection of external changes affecting internal cache. +- Add clustered VG attribute. +- Suppress rmdir opendir error message. + +* Tue Mar 08 2005 Alasdair Kergon - 2.01.07-1.3 +* Tue Mar 08 2005 Alasdair Kergon - 2.01.07-1.2 +* Tue Mar 08 2005 Alasdair Kergon - 2.01.07-1.1 +- Suppress some new compiler messages. + +* Tue Mar 08 2005 Alasdair Kergon - 2.01.07-1.0 +- Remove build directory from built-in path. +- Extra /dev scanning required for clustered operation. + +* Thu Mar 03 2005 Alasdair Kergon - 2.01.06-1.0 +- Allow anaconda to suppress warning messages. + +* Fri Feb 18 2005 Alasdair Kergon - 2.01.05-1.0 +- Upstream changes not affecting Fedora. + +* Wed Feb 09 2005 Alasdair Kergon - 2.01.04-1.0 +- Offset pool minors; lvm2cmd.so skips open fd check; pvmove -f gone. + +* Tue Feb 01 2005 Alasdair Kergon - 2.01.03-1.0 +- Fix snapshot device size & 64-bit display output. + +* Fri Jan 21 2005 Alasdair Kergon - 2.01.02-1.0 +- Minor fixes. + +* Mon Jan 17 2005 Alasdair Kergon - 2.01.01-1.0 +- Update vgcreate man page. Preparation for snapshot origin extension fix. + +* Mon Jan 17 2005 Alasdair Kergon - 2.01.00-1.0 +- Fix metadata auto-correction. Only request open_count when needed. + +* Wed Jan 12 2005 Tim Waugh - 2.00.33-2.0 +- Rebuilt for new readline. + +* Fri Jan 7 2005 Alasdair Kergon - 2.00.33-1.0 +- pvcreate wipes ext label +- several clvm fixes + +* Thu Jan 6 2005 Alasdair Kergon - 2.00.32-2.0 +- Remove temporary /sbin symlinks no longer needed. +- Include read-only pool support in the build. + +* Wed Dec 22 2004 Alasdair Kergon - 2.00.32-1.0 +- More fixes (143501). + +* Sun Dec 12 2004 Alasdair Kergon - 2.00.31-1.0 +- Fix pvcreate install issues. + +* Fri Dec 10 2004 Alasdair Kergon - 2.00.30-1.0 +- Additional debugging code. +- Some trivial man page corrections. + +* Tue Nov 30 2004 Alasdair Kergon - 2.00.29-1.3 +- Reinstate all archs. + +* Sun Nov 28 2004 Alasdair Kergon - 2.00.29-1.2 +- Try excluding more archs. + +* Sat Nov 27 2004 Alasdair Kergon - 2.00.29-1.1 +- Exclude s390x which fails. + +* Sat Nov 27 2004 Alasdair Kergon - 2.00.29-1 +- Fix last fix. + +* Sat Nov 27 2004 Alasdair Kergon - 2.00.28-1 +- Endian fix to partition/md signature detection. + +* Wed Nov 24 2004 Alasdair Kergon - 2.00.27-1 +- Fix partition table detection & an out of memory segfault. + +* Tue Nov 23 2004 Alasdair Kergon - 2.00.26-1 +- Several installation-related fixes & man page updates. + +* Mon Oct 25 2004 Elliot Lee - 2.00.25-1.01 +- Fix 2.6 kernel requirement + +* Wed Sep 29 2004 Alasdair Kergon - 2.00.25-1 +- Fix vgmknodes return code & vgremove locking. + +* Fri Sep 17 2004 Alasdair Kergon - 2.00.24-2 +- Obsolete old lvm1 packages; refuse install if running kernel 2.4. [bz 128185] + +* Thu Sep 16 2004 Alasdair Kergon - 2.00.24-1 +- More upstream fixes. (Always check WHATS_NEW file for details.) +- Add requested BuildRequires. [bz 124916, 132408] + +* Wed Sep 15 2004 Alasdair Kergon - 2.00.23-1 +- Various minor upstream fixes. + +* Fri Sep 3 2004 Alasdair Kergon - 2.00.22-1 +- Permission fix included upstream; use different endian conversion macros. + +* Thu Sep 2 2004 Jeremy Katz - 2.00.21-2 +- fix permissions on vg dirs + +* Thu Aug 19 2004 Alasdair Kergon - 2.00.21-1 +- New upstream release incorporating fixes plus minor enhancements. + +* Tue Aug 17 2004 Jeremy Katz - 2.00.20-2 +- add patch for iSeries viodasd support +- add patch to check file type using stat(2) if d_type == DT_UNKNOWN (#129674) + +* Sat Jul 3 2004 Alasdair Kergon - 2.00.20-1 +- New upstream release fixes 2.6 kernel device numbers. + +* Tue Jun 29 2004 Alasdair Kergon - 2.00.19-1 +- Latest upstream release. Lots of changes (see WHATS_NEW). + +* Tue Jun 15 2004 Elliot Lee - 2.00.15-5 +- rebuilt + +* Wed May 26 2004 Alasdair Kergon - 2.00.15-4 +- clone %%description from LVM rpm + +* Wed May 26 2004 Alasdair Kergon - 2.00.15-3 +- vgscan shouldn't return error status when no VGs present + +* Thu May 06 2004 Warren Togami - 2.00.15-2 +- i2o patch from Markus Lidel + +* Tue Apr 20 2004 Bill Nottingham - 2.00.15-1.1 +- handle disabled SELinux correctly, so that LVMs can be detected in a + non-SELinux context + +* Mon Apr 19 2004 Alasdair Kergon - 2.00.15-1 +- Fix non-root build with current version of 'install'. + +* Fri Apr 16 2004 Alasdair Kergon - 2.00.14-1 +- Use 64-bit file offsets. + +* Fri Apr 16 2004 Alasdair Kergon - 2.00.13-1 +- Avoid scanning devices containing md superblocks. +- Integrate ENOTSUP patch. + +* Thu Apr 15 2004 Jeremy Katz - 2.00.12-4 +- don't die if we get ENOTSUP setting selinux contexts + +* Thu Apr 15 2004 Alasdair Kergon 2.00.12-3 +- Add temporary pvscan symlink for LVM1 until mkinitrd gets updated. + +* Wed Apr 14 2004 Alasdair Kergon 2.00.12-2 +- Mark config file noreplace. + +* Wed Apr 14 2004 Alasdair Kergon 2.00.12-1 +- Install default /etc/lvm/lvm.conf. +- Move non-static binaries to /usr/sbin. +- Add temporary links in /sbin to lvm.static until rc.sysinit gets updated. + +* Thu Apr 08 2004 Alasdair Kergon 2.00.11-1 +- Fallback to using LVM1 tools when using a 2.4 kernel without device-mapper. + +* Wed Apr 07 2004 Alasdair Kergon 2.00.10-2 +- Install the full toolset, not just 'lvm'. + +* Wed Apr 07 2004 Alasdair Kergon 2.00.10-1 +- Update to version 2.00.10, which incorporates the RH-specific patches + and includes various fixes and enhancements detailed in WHATS_NEW. + +* Wed Mar 17 2004 Jeremy Katz 2.00.08-5 +- Fix sysfs patch to find sysfs +- Take patch from dwalsh and tweak a little for setting SELinux contexts on + device node creation and also do it on the symlink creation. + Part of this should probably be pushed down to device-mapper instead + +* Thu Feb 19 2004 Stephen C. Tweedie 2.00.08-4 +- Add sysfs filter patch +- Allow non-root users to build RPM + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Fri Dec 5 2003 Jeremy Katz 2.00.08-2 +- add static lvm binary + +* Tue Dec 2 2003 Jeremy Katz +- Initial build. + + +