diff --git a/0118-man-Fix-typo.patch b/0118-man-Fix-typo.patch new file mode 100644 index 0000000..d95f82c --- /dev/null +++ b/0118-man-Fix-typo.patch @@ -0,0 +1,25 @@ +From cf7e7e0041b1f92ad3e9e8f1d7fb24c4ba5949e9 Mon Sep 17 00:00:00 2001 +From: Marian Csontos +Date: Wed, 31 Jan 2024 18:48:24 +0100 +Subject: [PATCH 01/12] man: Fix typo + +--- + man/lvmcache.7_main | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/lvmcache.7_main b/man/lvmcache.7_main +index 519e352cb..824f24e91 100644 +--- a/man/lvmcache.7_main ++++ b/man/lvmcache.7_main +@@ -252,7 +252,7 @@ when selecting the writecache cachevol size and the writecache block size. + .P + .IP \[bu] 2 + writecache block size 4096: each 100 GiB of writecache cachevol uses +-slighly over 2 GiB of system memory. ++slightly over 2 GiB of system memory. + .IP \[bu] 2 + writecache block size 512: each 100 GiB of writecache cachevol uses + a little over 16 GiB of system memory. +-- +2.43.0 + diff --git a/0119-doc-fix-typos-in-documentation.patch b/0119-doc-fix-typos-in-documentation.patch new file mode 100644 index 0000000..3bfe9a8 --- /dev/null +++ b/0119-doc-fix-typos-in-documentation.patch @@ -0,0 +1,649 @@ +From 3d6f6b58f6426dfcbfa59de90b47f0bbd46759e7 Mon Sep 17 00:00:00 2001 +From: Samanta Navarro +Date: Fri, 30 Dec 2022 11:52:49 +0000 +Subject: [PATCH 02/12] doc: fix typos in documentation + +Typos found with codespell. + +(cherry picked from commit aec5e573afe610070eb2c6bed675d2a7c0efc7e8) +--- + TESTING | 2 +- + conf/example.conf.in | 12 ++++++------ + doc/kernel/cache-policies.txt | 2 +- + doc/kernel/crypt.txt | 4 ++-- + doc/kernel/integrity.txt | 2 +- + doc/kernel/verity.txt | 2 +- + doc/lvm2-raid.txt | 10 +++++----- + doc/lvm_fault_handling.txt | 10 +++++----- + doc/lvmpolld_overview.txt | 2 +- + doc/tagging.txt | 2 +- + doc/udev_assembly.txt | 2 +- + libdm/make.tmpl.in | 2 +- + make.tmpl.in | 2 +- + man/dmeventd.8_main | 6 +++--- + man/dmsetup.8_main | 2 +- + man/dmstats.8_main | 24 ++++++++++++------------ + man/lvchange.8_pregen | 2 +- + man/lvconvert.8_des | 2 +- + man/lvconvert.8_pregen | 2 +- + man/lvcreate.8_pregen | 2 +- + man/lvmcache.7_main | 8 ++++---- + man/lvmdevices.8_des | 2 +- + man/lvmdevices.8_pregen | 2 +- + man/lvmreport.7_main | 6 +++--- + man/vgcfgrestore.8_des | 2 +- + man/vgcfgrestore.8_pregen | 2 +- + man/vgchange.8_pregen | 2 +- + udev/69-dm-lvm-metad.rules.in | 2 +- + 28 files changed, 60 insertions(+), 60 deletions(-) + +diff --git a/TESTING b/TESTING +index 57932f56a..3c1e3afc6 100644 +--- a/TESTING ++++ b/TESTING +@@ -24,7 +24,7 @@ You MUST disable (or mask) any LVM daemons: + For running cluster tests, we are using singlenode locking. Pass + `--with-clvmd=singlenode` to configure. + +-NOTE: This is useful only for testing, and should not be used in produciton ++NOTE: This is useful only for testing, and should not be used in production + code. + + To run D-Bus daemon tests, existing D-Bus session is required. +diff --git a/conf/example.conf.in b/conf/example.conf.in +index d5af25061..bb2e60ace 100644 +--- a/conf/example.conf.in ++++ b/conf/example.conf.in +@@ -752,7 +752,7 @@ allocation { + # vdo_max_discard = 1 + + # Configuration option allocation/vdo_pool_header_size. +- # Specified the emptry header size in KiB at the front and end of vdo pool device. ++ # Specified the empty header size in KiB at the front and end of vdo pool device. + # This configuration option has an automatic default value. + # vdo_pool_header_size = 512 + } +@@ -931,7 +931,7 @@ backup { + # archive = 1 + + # Configuration option backup/archive_dir. +- # Location of the metdata archive files. ++ # Location of the metadata archive files. + # Remember to back up this directory regularly! + # This configuration option has an automatic default value. + # archive_dir = "@DEFAULT_SYS_DIR@/@DEFAULT_ARCHIVE_SUBDIR@" +@@ -1463,13 +1463,13 @@ activation { + + # Configuration option activation/reserved_stack. + # Stack size in KiB to reserve for use while devices are suspended. +- # Insufficent reserve risks I/O deadlock during device suspension. ++ # Insufficient reserve risks I/O deadlock during device suspension. + # This configuration option has an automatic default value. + # reserved_stack = 64 + + # Configuration option activation/reserved_memory. + # Memory size in KiB to reserve for use while devices are suspended. +- # Insufficent reserve risks I/O deadlock during device suspension. ++ # Insufficient reserve risks I/O deadlock during device suspension. + # This configuration option has an automatic default value. + # reserved_memory = 8192 + +@@ -1604,7 +1604,7 @@ activation { + # This includes LVs that have the following segment types: + # raid1, raid4, raid5*, and raid6*. + # If a device in the LV fails, the policy determines the steps +- # performed by dmeventd automatically, and the steps perfomed by the ++ # performed by dmeventd automatically, and the steps performed by the + # manual command lvconvert --repair --use-policies. + # Automatic handling requires dmeventd to be monitoring the LV. + # +@@ -1628,7 +1628,7 @@ activation { + # (copies) and a mirror log. A disk log ensures that a mirror LV does + # not need to be re-synced (all copies made the same) every time a + # machine reboots or crashes. If a device in the LV fails, this policy +- # determines the steps perfomed by dmeventd automatically, and the steps ++ # determines the steps performed by dmeventd automatically, and the steps + # performed by the manual command lvconvert --repair --use-policies. + # Automatic handling requires dmeventd to be monitoring the LV. + # +diff --git a/doc/kernel/cache-policies.txt b/doc/kernel/cache-policies.txt +index d3ca8af21..1436dbc6e 100644 +--- a/doc/kernel/cache-policies.txt ++++ b/doc/kernel/cache-policies.txt +@@ -67,7 +67,7 @@ the entries (each hotspot block covers a larger area than a single + cache block). + + All this means smq uses ~25bytes per cache block. Still a lot of +-memory, but a substantial improvement nontheless. ++memory, but a substantial improvement nonetheless. + + Level balancing: + mq placed entries in different levels of the multiqueue structures +diff --git a/doc/kernel/crypt.txt b/doc/kernel/crypt.txt +index 3b3e1de21..df18572f9 100644 +--- a/doc/kernel/crypt.txt ++++ b/doc/kernel/crypt.txt +@@ -35,7 +35,7 @@ Parameters: \ + capi:authenc(hmac(sha256),xts(aes))-random + capi:rfc7539(chacha20,poly1305)-random + +- The /proc/crypto contains a list of curently loaded crypto modes. ++ The /proc/crypto contains a list of currently loaded crypto modes. + + + Key used for encryption. It is encoded either as a hexadecimal number +@@ -81,7 +81,7 @@ Parameters: \ + + <#opt_params> + Number of optional parameters. If there are no optional parameters, +- the optional paramaters section can be skipped or #opt_params can be zero. ++ the optional parameters section can be skipped or #opt_params can be zero. + Otherwise #opt_params is the number of following arguments. + + Example of optional parameters section: +diff --git a/doc/kernel/integrity.txt b/doc/kernel/integrity.txt +index 03a3b956a..0822de802 100644 +--- a/doc/kernel/integrity.txt ++++ b/doc/kernel/integrity.txt +@@ -120,7 +120,7 @@ journal_crypt:algorithm(:key) (the key is optional) + "salsa20", "ctr(aes)" or "ecb(arc4)"). + + The journal contains history of last writes to the block device, +- an attacker reading the journal could see the last sector nubmers ++ an attacker reading the journal could see the last sector numbers + that were written. From the sector numbers, the attacker can infer + the size of files that were written. To protect against this + situation, you can encrypt the journal. +diff --git a/doc/kernel/verity.txt b/doc/kernel/verity.txt +index 89fd8f9a2..9822f1d61 100644 +--- a/doc/kernel/verity.txt ++++ b/doc/kernel/verity.txt +@@ -65,7 +65,7 @@ Construction Parameters + + <#opt_params> + Number of optional parameters. If there are no optional parameters, +- the optional paramaters section can be skipped or #opt_params can be zero. ++ the optional parameters section can be skipped or #opt_params can be zero. + Otherwise #opt_params is the number of following arguments. + + Example of optional parameters section: +diff --git a/doc/lvm2-raid.txt b/doc/lvm2-raid.txt +index a6f091543..a3226f230 100644 +--- a/doc/lvm2-raid.txt ++++ b/doc/lvm2-raid.txt +@@ -37,7 +37,7 @@ segment type. The available RAID types are: + "raid6_nr" - RAID6 Rotating parity N with data restart + "raid6_nc" - RAID6 Rotating parity N with data continuation + The exception to 'no shorthand options' will be where the RAID implementations +-can displace traditional tagets. This is the case with 'mirror' and 'raid1'. ++can displace traditional targets. This is the case with 'mirror' and 'raid1'. + In this case, "mirror_segtype_default" - found under the "global" section in + lvm.conf - can be set to "mirror" or "raid1". The segment type inferred when + the '-m' option is used will be taken from this setting. The default segment +@@ -104,7 +104,7 @@ and 4 devices for RAID 6/10. + + lvconvert should work exactly as it does now when dealing with mirrors - + even if(when) we switch to MD RAID1. Of course, there are no plans to +-allow the presense of the metadata area to be configurable (e.g. --corelog). ++allow the presence of the metadata area to be configurable (e.g. --corelog). + It will be simple enough to detect if the LV being up/down-converted is + new or old-style mirroring. + +@@ -120,7 +120,7 @@ RAID4 to RAID5 or RAID5 to RAID6. + Line 02/03/04: + These are familiar options - all of which would now be available as options + for change. (However, it'd be nice if we didn't have regionsize in there. +-It's simple on the kernel side, but is just an extra - often unecessary - ++It's simple on the kernel side, but is just an extra - often unnecessary - + parameter to many functions in the LVM codebase.) + + Line 05: +@@ -375,8 +375,8 @@ the slot. Even the names of the images will be renamed to properly reflect + their index in the array. Unlike the "mirror" segment type, you will never have + an image named "*_rimage_1" occupying the index position 0. + +-As with adding images, removing images holds off on commiting LVM metadata +-until all possible changes have been made. This reduces the likelyhood of bad ++As with adding images, removing images holds off on committing LVM metadata ++until all possible changes have been made. This reduces the likelihood of bad + intermediate stages being left due to a failure of operation or machine crash. + + RAID1 '--splitmirrors', '--trackchanges', and '--merge' operations +diff --git a/doc/lvm_fault_handling.txt b/doc/lvm_fault_handling.txt +index 53b447eac..196b782db 100644 +--- a/doc/lvm_fault_handling.txt ++++ b/doc/lvm_fault_handling.txt +@@ -87,7 +87,7 @@ are as follows: + /etc/lvm/lvm.conf. Once this operation is complete, the logical volumes + will be consistent. However, the volume group will still be inconsistent - + due to the refernced-but-missing device/PV - and operations will still be +- restricted to the aformentioned actions until either the device is ++ restricted to the aforementioned actions until either the device is + restored or 'vgreduce --removemissing' is run. + + Device Revival (transient failures): +@@ -135,9 +135,9 @@ If a mirror is not 'in-sync', a read failure will produce an I/O error. + This error will propagate all the way up to the applications above the + logical volume (e.g. the file system). No automatic intervention will + take place in this case either. It is up to the user to decide what +-can be done/salvaged in this senario. If the user is confident that the ++can be done/salvaged in this scenario. If the user is confident that the + images of the mirror are the same (or they are willing to simply attempt +-to retreive whatever data they can), 'lvconvert' can be used to eliminate ++to retrieve whatever data they can), 'lvconvert' can be used to eliminate + the failed image and proceed. + + Mirror resynchronization errors: +@@ -191,11 +191,11 @@ command are set in the LVM configuration file. They are: + 3-way mirror fails, the mirror will be converted to a 2-way mirror. + The "allocate" policy takes the further action of trying to replace + the failed image using space that is available in the volume group. +- Replacing a failed mirror image will incure the cost of ++ Replacing a failed mirror image will incur the cost of + resynchronizing - degrading the performance of the mirror. The + default policy for handling an image failure is "remove". This + allows the mirror to still function, but gives the administrator the +- choice of when to incure the extra performance costs of replacing ++ choice of when to incur the extra performance costs of replacing + the failed image. + + RAID logical volume device failures are handled differently from the "mirror" +diff --git a/doc/lvmpolld_overview.txt b/doc/lvmpolld_overview.txt +index 8c66e5e1a..ecff2eb81 100644 +--- a/doc/lvmpolld_overview.txt ++++ b/doc/lvmpolld_overview.txt +@@ -63,7 +63,7 @@ classical snapshot merge, thin snapshot merge. + + The second store is suited only for pvmove --abort operations in-progress. Both + stores are independent and identical LVs (pvmove /dev/sda3 and pvmove --abort /dev/sda3) +-can be run concurently from lvmpolld point of view (on lvm2 side the consistency is ++can be run concurrently from lvmpolld point of view (on lvm2 side the consistency is + guaranteed by lvm2 locking mechanism). + + Locking order +diff --git a/doc/tagging.txt b/doc/tagging.txt +index b66e0ecd3..95ee02d83 100644 +--- a/doc/tagging.txt ++++ b/doc/tagging.txt +@@ -126,7 +126,7 @@ Usage Examples + followed by 'vgchange -ay vg2' + + +- Option (ii) - localised admin & configuation ++ Option (ii) - localised admin & configuration + (i.e. each host holds *locally* which classes of volumes to activate) + # Add @database tag to vg1's metadata + vgchange --addtag @database vg1 +diff --git a/doc/udev_assembly.txt b/doc/udev_assembly.txt +index 618640273..45af41209 100644 +--- a/doc/udev_assembly.txt ++++ b/doc/udev_assembly.txt +@@ -35,7 +35,7 @@ VGs from PVs as they appear, and at the same time collect information on what is + already available. A command, pvscan --cache is expected to be used to + implement udev rules. It is relatively easy to make this command print out a + list of VGs (and possibly LVs) that have been made available by adding any +-particular device to the set of visible devices. In othe words, udev says "hey, ++particular device to the set of visible devices. In other words, udev says "hey, + /dev/sdb just appeared", calls pvscan --cache, which talks to lvmetad, which + says "cool, that makes vg0 complete". Pvscan takes this info and prints it out, + and the udev rule can then somehow decide whether anything needs to be done +diff --git a/libdm/make.tmpl.in b/libdm/make.tmpl.in +index a306101d5..1816bff55 100644 +--- a/libdm/make.tmpl.in ++++ b/libdm/make.tmpl.in +@@ -248,7 +248,7 @@ endif + # end of fPIC protection + endif + +-# Combination of DEBUG_POOL and DEBUG_ENFORCE_POOL_LOCKING is not suppored. ++# Combination of DEBUG_POOL and DEBUG_ENFORCE_POOL_LOCKING is not supported. + #DEFS += -DDEBUG_POOL + # Default pool locking is using the crc checksum. With mprotect memory + # enforcing compilation faulty memory write could be easily found. +diff --git a/make.tmpl.in b/make.tmpl.in +index cccda10d6..7799a8adb 100644 +--- a/make.tmpl.in ++++ b/make.tmpl.in +@@ -281,7 +281,7 @@ ifeq ("@BUILD_DMEVENTD@", "yes") + CLDFLAGS += -L$(top_builddir)/daemons/dmeventd + endif + +-# Combination of DEBUG_POOL and DEBUG_ENFORCE_POOL_LOCKING is not suppored. ++# Combination of DEBUG_POOL and DEBUG_ENFORCE_POOL_LOCKING is not supported. + #DEFS += -DDEBUG_POOL + # Default pool locking is using the crc checksum. With mprotect memory + # enforcing compilation faulty memory write could be easily found. +diff --git a/man/dmeventd.8_main b/man/dmeventd.8_main +index c03605d9c..77b07e4d8 100644 +--- a/man/dmeventd.8_main ++++ b/man/dmeventd.8_main +@@ -103,7 +103,7 @@ when it's been filled above configured threshold + \fBactivation/thin_pool_autoextend_threshold\fP. + If the command fails, dmeventd thin plugin will keep + retrying execution with increasing time delay between +-retries upto 42 minutes. ++retries up to 42 minutes. + User may also configure external command to support more advanced + maintenance operations of a thin pool. + Such external command can e.g. remove some unneeded snapshots, +@@ -133,7 +133,7 @@ when it's been filled above the configured threshold + \fBactivation/vdo_pool_autoextend_threshold\fP. + If the command fails, dmeventd vdo plugin will keep + retrying execution with increasing time delay between +-retries upto 42 minutes. ++retries up to 42 minutes. + User may also configure external command to support more advanced + maintenance operations of a VDO pool. + Such external command can e.g. remove some unneeded space +@@ -166,7 +166,7 @@ actual usage of VDO pool data volume. Variable is not set when error event + is processed. + .TP + .B LVM_RUN_BY_DMEVENTD +-Variable is set by thin and vdo plugin to prohibit recursive interation ++Variable is set by thin and vdo plugin to prohibit recursive interaction + with dmeventd by any executed lvm2 command from + a thin_command, vdo_command environment. + . +diff --git a/man/dmsetup.8_main b/man/dmsetup.8_main +index 7576b54bc..1cafae017 100644 +--- a/man/dmsetup.8_main ++++ b/man/dmsetup.8_main +@@ -572,7 +572,7 @@ See below for more information on the table format. + .B --udevcookie \fIcookie + Use cookie for udev synchronisation. + Note: Same cookie should be used for same type of operations i.e. creation of +-multiple different devices. It's not adviced to combine different ++multiple different devices. It's not advised to combine different + operations on the single device. + . + .TP +diff --git a/man/dmstats.8_main b/man/dmstats.8_main +index bf492c554..6991071bb 100644 +--- a/man/dmstats.8_main ++++ b/man/dmstats.8_main +@@ -292,7 +292,7 @@ region identifier. + . + .TP + .B --area +-When peforming a list or report, include objects of type area in the ++When performing a list or report, include objects of type area in the + results. + . + .TP +@@ -317,7 +317,7 @@ argument is zero reports will continue to repeat until interrupted. + . + .TP + .B --group +-When peforming a list or report, include objects of type group in the ++When performing a list or report, include objects of type group in the + results. + . + .TP +@@ -389,7 +389,7 @@ region as a comma separated list of latency values. Latency values are + given in nanoseconds. An optional unit suffix of + .BR ns , us , ms , + or \fBs\fP may be given after each value to specify units of +-nanoseconds, microseconds, miliseconds or seconds respectively. ++nanoseconds, microseconds, milliseconds or seconds respectively. + . + .TP + .B --histogram +@@ -456,7 +456,7 @@ default program ID for dmstats-managed regions is "dmstats". + . + .TP + .B --region +-When peforming a list or report, include objects of type region in the ++When performing a list or report, include objects of type region in the + results. + . + .TP +@@ -530,7 +530,7 @@ Produce additional output. + .HP + .CMD_CLEAR + .br +-Instructs the kernel to clear statistics counters for the speficied ++Instructs the kernel to clear statistics counters for the specified + regions (with the exception of in-flight IO counters). + . + .HP +@@ -556,10 +556,10 @@ configured interval duration) on the final bin. + .sp + Latencies are given in nanoseconds. An optional unit suffix of ns, us, + ms, or s may be given after each value to specify units of nanoseconds, +-microseconds, miliseconds or seconds respectively, so for example, 10ms ++microseconds, milliseconds or seconds respectively, so for example, 10ms + is equivalent to 10000000. Latency values with a precision of less than +-one milisecond can only be used when precise timestamps are enabled: if +-\fB--precise\fP is not given and values less than one milisecond are ++one millisecond can only be used when precise timestamps are enabled: if ++\fB--precise\fP is not given and values less than one millisecond are + used it will be enabled automatically. + .sp + An optional \fBprogram_id\fP or \fBuser_data\fP string may be associated +@@ -627,7 +627,7 @@ group. + The list of regions to be grouped is specified with \fB--regions\fP + and an optional alias may be assigned with \fB--alias\fP. The set of + regions is given as a comma-separated list of region identifiers. A +-continuous range of identifers spanning from \fBR1\fP to \fBR2\fP may ++continuous range of identifiers spanning from \fBR1\fP to \fBR2\fP may + be expressed as '\fBR1\fP-\fBR2\fP'. + .sp + Regions that have a histogram configured can be grouped: in this case +@@ -711,7 +711,7 @@ that were previously created with \fB--filemap\fP, either directly, + or by starting the monitoring daemon, \fBdmfilemapd\fP. + .sp + This will add and remove regions to reflect changes in the allocated +-extents of the file on-disk, since the time that it was crated or last ++extents of the file on-disk, since the time that it was created or last + updated. + .sp + Use of this command is not normally needed since the \fBdmfilemapd\fP +@@ -1090,13 +1090,13 @@ bounds. + .B hist_bounds + A list of the histogram boundary values for the current statistics area + in order of ascending latency value. The values are expressed in whole +-units of seconds, miliseconds, microseconds or nanoseconds with a suffix ++units of seconds, milliseconds, microseconds or nanoseconds with a suffix + indicating the unit. + .TP + .B hist_ranges + A list of the histogram bin ranges for the current statistics area in + order of ascending latency value. The values are expressed as +-"LOWER-UPPER" in whole units of seconds, miliseconds, microseconds or ++"LOWER-UPPER" in whole units of seconds, milliseconds, microseconds or + nanoseconds with a suffix indicating the unit. + .TP + .B hist_bins +diff --git a/man/lvchange.8_pregen b/man/lvchange.8_pregen +index 27bee0f14..4e0a8bf70 100644 +--- a/man/lvchange.8_pregen ++++ b/man/lvchange.8_pregen +@@ -744,7 +744,7 @@ See \fBlvmraid\fP(7) for more information. + .br + Start (yes) or stop (no) monitoring an LV with dmeventd. + dmeventd monitors kernel events for an LV, and performs +-automated maintenance for the LV in reponse to specific events. ++automated maintenance for the LV in response to specific events. + See \fBdmeventd\fP(8) for more information. + . + .HP +diff --git a/man/lvconvert.8_des b/man/lvconvert.8_des +index f36135f21..1bc3dfa11 100644 +--- a/man/lvconvert.8_des ++++ b/man/lvconvert.8_des +@@ -23,7 +23,7 @@ The + type is equivalent to the + .B striped + type when one stripe exists. +-In that case, the types can sometimes be used interchangably. ++In that case, the types can sometimes be used interchangeably. + .P + In most cases, the + .B mirror +diff --git a/man/lvconvert.8_pregen b/man/lvconvert.8_pregen +index fa52da55c..f1d0d0256 100644 +--- a/man/lvconvert.8_pregen ++++ b/man/lvconvert.8_pregen +@@ -196,7 +196,7 @@ The + type is equivalent to the + .B striped + type when one stripe exists. +-In that case, the types can sometimes be used interchangably. ++In that case, the types can sometimes be used interchangeably. + .P + In most cases, the + .B mirror +diff --git a/man/lvcreate.8_pregen b/man/lvcreate.8_pregen +index 0ffe92a94..5416b9c2f 100644 +--- a/man/lvcreate.8_pregen ++++ b/man/lvcreate.8_pregen +@@ -1175,7 +1175,7 @@ See \fBlvmraid\fP(7) for more information. + .br + Start (yes) or stop (no) monitoring an LV with dmeventd. + dmeventd monitors kernel events for an LV, and performs +-automated maintenance for the LV in reponse to specific events. ++automated maintenance for the LV in response to specific events. + See \fBdmeventd\fP(8) for more information. + . + .HP +diff --git a/man/lvmcache.7_main b/man/lvmcache.7_main +index 824f24e91..a139062d1 100644 +--- a/man/lvmcache.7_main ++++ b/man/lvmcache.7_main +@@ -73,7 +73,7 @@ using dm-writecache (with cachevol): + .P + # lvconvert --type writecache --cachevol fast vg/main + .P +-For more alteratives see: ++For more alternatives see: + .br + dm-cache command shortcut + .br +@@ -286,11 +286,11 @@ read requests. + .TP + autocommit_blocks = + When the application writes this amount of blocks without issuing the +-FLUSH request, the blocks are automatically commited. ++FLUSH request, the blocks are automatically committed. + . + .TP + autocommit_time = +-The data is automatically commited if this time passes and no FLUSH ++The data is automatically committed if this time passes and no FLUSH + request is received. + . + .TP +@@ -403,7 +403,7 @@ cache, in which small reads and writes cause large sections of an LV to be + stored in the cache. It can also require increasing migration threshold + which defaults to 2048 sectors (1 MiB). Lvm2 ensures migration threshold is + at least 8 chunks in size. This may in some cases result in very +-high bandwidth load of transfering data between the cache LV and its ++high bandwidth load of transferring data between the cache LV and its + cache origin LV. However, choosing a chunk size that is too small + can result in more overhead trying to manage the numerous chunks that + become mapped into the cache. Overhead can include both excessive CPU +diff --git a/man/lvmdevices.8_des b/man/lvmdevices.8_des +index 2335456ad..ed24d4cd4 100644 +--- a/man/lvmdevices.8_des ++++ b/man/lvmdevices.8_des +@@ -95,7 +95,7 @@ is used for loop devices, the backing file name repored by sysfs. + the device name is used if no other type applies. + .P + +-The default choice for device ID type can be overriden using lvmdevices ++The default choice for device ID type can be overridden using lvmdevices + --addev --deviceidtype . If the specified type is available for the + device it will be used, otherwise the device will be added using the type + that would otherwise be chosen. +diff --git a/man/lvmdevices.8_pregen b/man/lvmdevices.8_pregen +index a2397e50f..e782596d0 100644 +--- a/man/lvmdevices.8_pregen ++++ b/man/lvmdevices.8_pregen +@@ -162,7 +162,7 @@ is used for loop devices, the backing file name repored by sysfs. + the device name is used if no other type applies. + .P + +-The default choice for device ID type can be overriden using lvmdevices ++The default choice for device ID type can be overridden using lvmdevices + --addev --deviceidtype . If the specified type is available for the + device it will be used, otherwise the device will be added using the type + that would otherwise be chosen. +diff --git a/man/lvmreport.7_main b/man/lvmreport.7_main +index f0f04ad1c..021089951 100644 +--- a/man/lvmreport.7_main ++++ b/man/lvmreport.7_main +@@ -1197,7 +1197,7 @@ But let's still use the original "," character for list_item_separator + for subsequent examples. + .P + Format for any of time values displayed in reports can be configured with +-\fBreport/time_format\fP configuretion setting. By default complete date ++\fBreport/time_format\fP configuration setting. By default complete date + and time is displayed, including timezone. + .P + .nf +@@ -1302,9 +1302,9 @@ binary_values_as_numeric=1 + .SS Changing output format + . + LVM can output reports in different formats - use \fBreport/output_format\fP +-configuration setting (or \fB--reportformat\fP command line option) to swith ++configuration setting (or \fB--reportformat\fP command line option) to switch + the report output format. Currently, LVM supports \fB"basic"\fP (all the examples +-we used above used this format) and \fB"JSON"\fP output format. ++we used above used this format) and \fB"json"\fP output format. + .P + .nf + # lvs -o lv_name,lv_size --reportformat json +diff --git a/man/vgcfgrestore.8_des b/man/vgcfgrestore.8_des +index dbc9aee16..10aa460c6 100644 +--- a/man/vgcfgrestore.8_des ++++ b/man/vgcfgrestore.8_des +@@ -1,6 +1,6 @@ + vgcfgrestore restores the metadata of a VG from a text back up file + produced by \fBvgcfgbackup\fP. This writes VG metadata onto the devices +-specifed in back up file. ++specified in back up file. + .P + A back up file can be specified with \fB--file\fP. If no backup file is + specified, the most recent one is used. Use \fB--list\fP for a list of +diff --git a/man/vgcfgrestore.8_pregen b/man/vgcfgrestore.8_pregen +index 6165cd36e..86e62c870 100644 +--- a/man/vgcfgrestore.8_pregen ++++ b/man/vgcfgrestore.8_pregen +@@ -63,7 +63,7 @@ vgcfgrestore \(em Restore volume group configuration + . + vgcfgrestore restores the metadata of a VG from a text back up file + produced by \fBvgcfgbackup\fP. This writes VG metadata onto the devices +-specifed in back up file. ++specified in back up file. + .P + A back up file can be specified with \fB--file\fP. If no backup file is + specified, the most recent one is used. Use \fB--list\fP for a list of +diff --git a/man/vgchange.8_pregen b/man/vgchange.8_pregen +index 7c7030c0d..0e6bd7b24 100644 +--- a/man/vgchange.8_pregen ++++ b/man/vgchange.8_pregen +@@ -670,7 +670,7 @@ See \fBlvm.conf\fP(5) for more information about profiles. + .br + Start (yes) or stop (no) monitoring an LV with dmeventd. + dmeventd monitors kernel events for an LV, and performs +-automated maintenance for the LV in reponse to specific events. ++automated maintenance for the LV in response to specific events. + See \fBdmeventd\fP(8) for more information. + . + .HP +diff --git a/udev/69-dm-lvm-metad.rules.in b/udev/69-dm-lvm-metad.rules.in +index 78f506520..7e2af981f 100644 +--- a/udev/69-dm-lvm-metad.rules.in ++++ b/udev/69-dm-lvm-metad.rules.in +@@ -87,7 +87,7 @@ LABEL="systemd_background" + # + # In this case, we simply set up the dependency between the device and the pvscan + # job using SYSTEMD_ALIAS (which sets up a simplified device identifier that +-# allows using "BindsTo" in the sytemd unit file) and SYSTEMD_WANTS (which tells ++# allows using "BindsTo" in the systemd unit file) and SYSTEMD_WANTS (which tells + # systemd to start the pvscan job once the device is ready). + # We need to set these variables for both "add" and "change" events, otherwise + # systemd may loose information about the device/unit dependencies. +-- +2.43.0 + diff --git a/0120-archiving-Fix-doubled-filename-in-vgcfgrestore.patch b/0120-archiving-Fix-doubled-filename-in-vgcfgrestore.patch new file mode 100644 index 0000000..53003ff --- /dev/null +++ b/0120-archiving-Fix-doubled-filename-in-vgcfgrestore.patch @@ -0,0 +1,26 @@ +From 4d602fc32a2c7f7575dae4b37f6a0b12f4c09cb4 Mon Sep 17 00:00:00 2001 +From: Ranjith ML +Date: Wed, 24 Jan 2024 14:05:24 +0100 +Subject: [PATCH 03/12] archiving: Fix doubled filename in vgcfgrestore + +(cherry picked from commit 1c3ae2b678ddae0c1916caca4dbe65049dcea3d7) +--- + lib/format_text/archive.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/format_text/archive.c b/lib/format_text/archive.c +index 2e8792a93..388789c0d 100644 +--- a/lib/format_text/archive.c ++++ b/lib/format_text/archive.c +@@ -313,7 +313,7 @@ static void _display_archive(struct cmd_context *cmd, const char *dir, struct ar + } + + log_print(" "); +- log_print("File:\t\t%s/%s", path, af->name); ++ log_print("File:\t\t%s", path); + tc.path_live = path; + + fic.type = FMT_INSTANCE_PRIVATE_MDAS; +-- +2.43.0 + diff --git a/0121-man-add-inte-g-rity-to-man-lvs.patch b/0121-man-add-inte-g-rity-to-man-lvs.patch new file mode 100644 index 0000000..b6322b7 --- /dev/null +++ b/0121-man-add-inte-g-rity-to-man-lvs.patch @@ -0,0 +1,26 @@ +From 4db199be5c7ac6da9741e188f7ad1a076659b8c0 Mon Sep 17 00:00:00 2001 +From: Lukas Herbolt +Date: Tue, 5 Dec 2023 09:08:24 -0600 +Subject: [PATCH 04/12] man: add inte(g)rity to man lvs + +(cherry picked from commit 7b64d9946d6a3be84338ad976383b6ab53e97484) +--- + man/lvs.8_end | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/lvs.8_end b/man/lvs.8_end +index dc3a27446..e9897b4fc 100644 +--- a/man/lvs.8_end ++++ b/man/lvs.8_end +@@ -4,7 +4,7 @@ + The lv_attr bits are: + .IP 1 3 + Volume type: (\fBC\fP)ache, (\fBm\fP)irrored, (\fBM\fP)irrored without initial sync, (\fBo\fP)rigin, +-(\fBO\fP)rigin with merging snapshot, (\fBr\fP)aid, (\fBR\fP)aid without initial sync, ++(\fBO\fP)rigin with merging snapshot, inte(\fBg\fP)rity, (\fBr\fP)aid, (\fBR\fP)aid without initial sync, + (\fBs\fP)napshot, merging (\fBS\fP)napshot, (\fBp\fP)vmove, (\fBv\fP)irtual, + mirror or raid (\fBi\fP)mage, mirror or raid (\fBI\fP)mage out-of-sync, mirror (\fBl\fP)og device, + under (\fBc\fP)onversion, thin (\fBV\fP)olume, (\fBt\fP)hin pool, (\fBT\fP)hin pool data, +-- +2.43.0 + diff --git a/0122-Fix-lvconvert-m-0-will-always-take-rimage_0-even-if-.patch b/0122-Fix-lvconvert-m-0-will-always-take-rimage_0-even-if-.patch new file mode 100644 index 0000000..d68766d --- /dev/null +++ b/0122-Fix-lvconvert-m-0-will-always-take-rimage_0-even-if-.patch @@ -0,0 +1,48 @@ +From 3b5e2537ae1ce6ee633b92f8df30602b9167044e Mon Sep 17 00:00:00 2001 +From: heinzm +Date: Fri, 5 May 2023 15:00:49 +0200 +Subject: [PATCH 05/12] Fix "lvconvert -m 0 will always take rimage_0 even if + it is out-of-sync" + +Bail out in case first rimage is out-of-sync. +Refresh first, i.e. "lvchange --resync $RaidLV", +then retry downgrade to linear after resynchronization. + +(cherry picked from commit d7e922480e04ecfb7c4d8b2d42533699ddef5c34) +--- + lib/metadata/raid_manip.c | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c +index 0e6a77bac..5112989ab 100644 +--- a/lib/metadata/raid_manip.c ++++ b/lib/metadata/raid_manip.c +@@ -3112,14 +3112,23 @@ static int _raid_remove_images(struct logical_volume *lv, int yes, + { + struct dm_list removed_lvs; + +- if (!archive(lv->vg)) +- return_0; ++ if (new_count == 1) { ++ struct lv_segment *seg = first_seg(lv); ++ ++ if (seg_is_raid1(seg) && !lv_raid_image_in_sync(seg_lv(seg, 0))) { ++ log_error("%s is out-of-sync! Please try refreshing first.", display_lvname(lv)); ++ return 0; ++ } ++ } + + if (!removal_lvs) { + dm_list_init(&removed_lvs); + removal_lvs = &removed_lvs; + } + ++ if (!archive(lv->vg)) ++ return_0; ++ + if (!_raid_extract_images(lv, 0, new_count, allocate_pvs, 1, + removal_lvs, removal_lvs)) { + log_error("Failed to extract images from %s.", +-- +2.43.0 + diff --git a/0123-lvconvert-fix-lvconvert-m-0-for-in-sync-legs.patch b/0123-lvconvert-fix-lvconvert-m-0-for-in-sync-legs.patch new file mode 100644 index 0000000..3158636 --- /dev/null +++ b/0123-lvconvert-fix-lvconvert-m-0-for-in-sync-legs.patch @@ -0,0 +1,52 @@ +From 54576eb1e4217353072933d5c2b3274c08c67e82 Mon Sep 17 00:00:00 2001 +From: Heinz Mauelshagen +Date: Thu, 19 Oct 2023 16:50:01 +0200 +Subject: [PATCH 06/12] lvconvert: fix "lvconvert -m 0" for in-sync legs + +With commit d7e922480e04ecfb7c4d8b2d42533699ddef5c34 +lvconvert -m may fail if we try to remove 1st. leg that +is out-of-sync while other leg is in-sync. + +Hot fix allows to proceed with such down conversion. + +Signed-off-by: Heinz Mauelshagen +(cherry picked from commit e41da923a3bec2df603b54f0f466e9574b6544db) +--- + lib/metadata/raid_manip.c | 19 ++++++++++++++++++- + 1 file changed, 18 insertions(+), 1 deletion(-) + +diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c +index 5112989ab..7ce2c177d 100644 +--- a/lib/metadata/raid_manip.c ++++ b/lib/metadata/raid_manip.c +@@ -3113,9 +3113,26 @@ static int _raid_remove_images(struct logical_volume *lv, int yes, + struct dm_list removed_lvs; + + if (new_count == 1) { ++ uint32_t s; + struct lv_segment *seg = first_seg(lv); + +- if (seg_is_raid1(seg) && !lv_raid_image_in_sync(seg_lv(seg, 0))) { ++ if (!seg_is_raid1(seg)) { ++ log_error("%s called on non-raid1 LV.", display_lvname(lv)); ++ return 0; ++ } ++ ++ for (s = 0; s < seg->area_count; s++) { ++ if (seg_type(seg, s) == AREA_UNASSIGNED) ++ continue; ++ ++ if (lv_raid_image_in_sync(seg_lv(seg, s))) { ++ _swap_areas(seg->areas + 0, seg->areas + s); ++ break; ++ } ++ ++ } ++ ++ if (s >= seg->area_count) { + log_error("%s is out-of-sync! Please try refreshing first.", display_lvname(lv)); + return 0; + } +-- +2.43.0 + diff --git a/0124-Fix-multisegment-RAID1-allocator-uses-one-disk-for-b.patch b/0124-Fix-multisegment-RAID1-allocator-uses-one-disk-for-b.patch new file mode 100644 index 0000000..5da988b --- /dev/null +++ b/0124-Fix-multisegment-RAID1-allocator-uses-one-disk-for-b.patch @@ -0,0 +1,79 @@ +From b9b28ee11adc8aba0fe11dda56a88b3cfc8d6b41 Mon Sep 17 00:00:00 2001 +From: heinzm +Date: Wed, 10 May 2023 18:22:11 +0200 +Subject: [PATCH 07/12] Fix "multisegment RAID1, allocator uses one disk for + both legs" + +In case of e.g. 3 PVs, creating or extending a RaidLV causes SubLV +collocation thus putting segments of diffent rimage (and potentially +larger rmeta) SubLVs onto the same PV. For redundant RaidLVs this'll +compromise redundancy. Fix by detecting such bogus allocation on +lvcreate/lvextend and reject the request. + +(cherry picked from commit 05c2b10c5d0a99993430ffbcef684a099ba810ad) +--- + lib/metadata/lv_manip.c | 41 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 41 insertions(+) + +diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c +index 0a51e0315..24d8adc18 100644 +--- a/lib/metadata/lv_manip.c ++++ b/lib/metadata/lv_manip.c +@@ -4454,6 +4454,38 @@ static int _lv_extend_layered_lv(struct alloc_handle *ah, + return 1; + } + ++/* Check either RAID images and metas are being allocated redundantly. */ ++static int _lv_raid_redundant(struct logical_volume *lv, ++ struct dm_list *allocatable_pvs, int meta) ++{ ++ uint32_t nlvs, s; ++ struct lv_segment *seg = first_seg(lv); ++ struct pv_list *pvl; ++ ++ if (meta && !seg->meta_areas) ++ return 1; ++ ++ dm_list_iterate_items(pvl, allocatable_pvs) { ++ nlvs = 0; ++ ++ for (s = 0; s < seg->area_count; s++) { ++ struct logical_volume *slv = meta ? seg_metalv(seg, s) : seg_lv(seg, s); ++ ++ if (slv && lv_is_on_pv(slv, pvl->pv) && nlvs++) ++ return 0; ++ } ++ } ++ ++ return 1; ++} ++ ++/* Check both RAID images and metas are being allocated redundantly. */ ++static int _lv_raid_redundant_allocation(struct logical_volume *lv, struct dm_list *allocatable_pvs) ++{ ++ return _lv_raid_redundant(lv, allocatable_pvs, 0) && ++ _lv_raid_redundant(lv, allocatable_pvs, 1); ++} ++ + /* + * Entry point for single-step LV allocation + extension. + * Extents is the number of logical extents to append to the LV unless +@@ -4556,6 +4588,15 @@ int lv_extend(struct logical_volume *lv, + mirrors, stripes, stripe_size))) + goto_out; + ++ if (segtype_is_raid(segtype) && ++ alloc != ALLOC_ANYWHERE && ++ !(r = _lv_raid_redundant_allocation(lv, allocatable_pvs))) { ++ log_error("Insufficient suitable allocatable extents for logical volume %s", display_lvname(lv)); ++ if (!lv_remove(lv) || !vg_write(lv->vg) || !vg_commit(lv->vg)) ++ return_0; ++ goto out; ++ } ++ + if (lv_raid_has_integrity(lv)) { + if (!lv_extend_integrity_in_raid(lv, allocatable_pvs)) { + r = 0; +-- +2.43.0 + diff --git a/0125-raid-add-messages-to-lvs-command-output-in-case-Raid.patch b/0125-raid-add-messages-to-lvs-command-output-in-case-Raid.patch new file mode 100644 index 0000000..91dcdaa --- /dev/null +++ b/0125-raid-add-messages-to-lvs-command-output-in-case-Raid.patch @@ -0,0 +1,58 @@ +From 1c773b76965efe1fd7c4b3c8211296ede5b4c1e5 Mon Sep 17 00:00:00 2001 +From: Heinz Mauelshagen +Date: Wed, 6 Dec 2023 12:58:14 +0100 +Subject: [PATCH 08/12] raid: add messages to lvs command output in case + RaidLVs require a refresh + +If a RaidLV mapping is required to be refreshed as a result of temporarily failed +and recurred RAID leg device (pairs) caused by writes to the LV during failure, +the requirement is reported by volume health character r' in position 9 of the +LV's attribute field (see 'man lvs' about additional volume health characters). + +As this character can be overlooked, this patch adds messages to the top +of the lvs command output informing the user explicitely about the fact. + +(cherry picked from commit b69f73b13ee55ef3feb7427c6dc099dc3472d9fc) +--- + tools/reporter.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/tools/reporter.c b/tools/reporter.c +index eafba4fec..ff30a31a9 100644 +--- a/tools/reporter.c ++++ b/tools/reporter.c +@@ -150,6 +150,13 @@ static int _check_merging_origin(const struct logical_volume *lv, + return 1; + } + ++static void _cond_warn_raid_volume_health(struct cmd_context *cmd, const struct logical_volume *lv) ++{ ++ if (lv_is_raid(lv) && !lv_raid_healthy(lv) && !lv_is_partial(lv)) ++ log_warn("WARNING: RaidLV %s needs to be refreshed! See character 'r' at position 9 in the RaidLV's attributes%s.", display_lvname(lv), ++ arg_is_set(cmd, all_ARG) ? " and its SubLV(s)" : " and also its SubLV(s) with option '-a'"); ++} ++ + static int _do_lvs_with_info_and_status_single(struct cmd_context *cmd, + const struct logical_volume *lv, + int do_info, int do_status, +@@ -176,6 +183,8 @@ static int _do_lvs_with_info_and_status_single(struct cmd_context *cmd, + lv = lv->snapshot->lv; + } + ++ _cond_warn_raid_volume_health(cmd, lv); ++ + if (!report_object(sh ? : handle->custom_handle, sh != NULL, + lv->vg, lv, NULL, NULL, NULL, &status, NULL)) + goto out; +@@ -238,6 +247,8 @@ static int _do_segs_with_info_and_status_single(struct cmd_context *cmd, + seg = seg->lv->snapshot; + } + ++ _cond_warn_raid_volume_health(cmd, seg->lv); ++ + if (!report_object(sh ? : handle->custom_handle, sh != NULL, + seg->lv->vg, seg->lv, NULL, seg, NULL, &status, NULL)) + goto_out; +-- +2.43.0 + diff --git a/0126-vgsplit-don-t-reread-vg_to.patch b/0126-vgsplit-don-t-reread-vg_to.patch new file mode 100644 index 0000000..e219110 --- /dev/null +++ b/0126-vgsplit-don-t-reread-vg_to.patch @@ -0,0 +1,53 @@ +From b7334daa69e998b604f59697d7614c54d6373160 Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Wed, 12 Jan 2022 16:42:01 -0600 +Subject: [PATCH 09/12] vgsplit: don't reread vg_to + +The destination vg is first written with the EXPORTED flag, +then the source vg is written, then the destination vg is +written again without the EXPORTED flag. Remove an unnecessary +vg_read of the destination vg just before the second write. + +(cherry picked from commit 5e428d22d9647a294eba65852078947df5ade48f) +--- + tools/vgsplit.c | 24 ------------------------ + 1 file changed, 24 deletions(-) + +diff --git a/tools/vgsplit.c b/tools/vgsplit.c +index 9d6534e89..c7f4b8af4 100644 +--- a/tools/vgsplit.c ++++ b/tools/vgsplit.c +@@ -728,30 +728,6 @@ int vgsplit(struct cmd_context *cmd, int argc, char **argv) + backup(vg_from); + } + +- /* +- * Finally, remove the EXPORTED flag from the new VG and write it out. +- * We need to unlock vg_to because vg_read_for_update wants to lock it. +- */ +- if (!test_mode()) { +- unlock_vg(cmd, NULL, vg_name_to); +- release_vg(vg_to); +- +- /* +- * This command uses the exported vg flag internally, but +- * exported VGs are not allowed to be split from the command +- * level, so ALLOW_EXPORTED is not set in commands.h. +- */ +- cmd->include_exported_vgs = 1; +- +- vg_to = vg_read_for_update(cmd, vg_name_to, NULL, 0, 0); +- +- if (!vg_to) { +- log_error("Volume group \"%s\" became inconsistent: " +- "please fix manually", vg_name_to); +- goto bad; +- } +- } +- + vg_to->status &= ~EXPORTED_VG; + + if (!vg_write(vg_to) || !vg_commit(vg_to)) +-- +2.43.0 + diff --git a/0127-lvmcache-remove-lvmcache_update_vg_from_write.patch b/0127-lvmcache-remove-lvmcache_update_vg_from_write.patch new file mode 100644 index 0000000..e259567 --- /dev/null +++ b/0127-lvmcache-remove-lvmcache_update_vg_from_write.patch @@ -0,0 +1,113 @@ +From 2ae69ffd78d3dd65843c48e3369b75ae49787fd4 Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Wed, 12 Jan 2022 16:46:26 -0600 +Subject: [PATCH 10/12] lvmcache: remove lvmcache_update_vg_from_write + +After a vg_write, this function was used to attempt to +make lvmcache data match the new state written to disk. +It was not updated correctly in a many or most cases, +and the resulting lvmcache is not actually used after +vg_write, making the update unnecessary. + +(cherry picked from commit cb798ee1c102aadde93965a894c5aa59d4e76e4a) +--- + lib/cache/lvmcache.c | 44 ----------------------------------------- + lib/cache/lvmcache.h | 1 - + lib/metadata/metadata.c | 7 ------- + 3 files changed, 52 deletions(-) + +diff --git a/lib/cache/lvmcache.c b/lib/cache/lvmcache.c +index 04e9f0605..85a1d4806 100644 +--- a/lib/cache/lvmcache.c ++++ b/lib/cache/lvmcache.c +@@ -2233,50 +2233,6 @@ int lvmcache_update_vgname_and_id(struct cmd_context *cmd, struct lvmcache_info + return 1; + } + +-/* +- * FIXME: quit trying to mirror changes that a command is making into lvmcache. +- * +- * First, it's complicated and hard to ensure it's done correctly in every case +- * (it would be much easier and safer to just toss out what's in lvmcache and +- * reread the info to recreate it from scratch instead of trying to make sure +- * every possible discrete state change is correct.) +- * +- * Second, it's unnecessary if commands just use the vg they are modifying +- * rather than also trying to get info from lvmcache. The lvmcache state +- * should be populated by label_scan, used to perform vg_read's, and then +- * ignored (or dropped so it can't be used). +- * +- * lvmcache info is already used very little after a command begins its +- * operation. The code that's supposed to keep the lvmcache in sync with +- * changes being made to disk could be half wrong and we wouldn't know it. +- * That creates a landmine for someone who might try to use a bit of it that +- * isn't being updated correctly. +- */ +- +-int lvmcache_update_vg_from_write(struct volume_group *vg) +-{ +- char vgid[ID_LEN + 1] __attribute__((aligned(8))) = { 0 }; +- struct pv_list *pvl; +- struct lvmcache_info *info; +- struct lvmcache_vgsummary vgsummary = { +- .vgname = vg->name, +- .vgstatus = vg->status, +- .system_id = vg->system_id, +- .lock_type = vg->lock_type +- }; +- +- memcpy(vgid, &vg->id, ID_LEN); +- memcpy(vgsummary.vgid, vgid, ID_LEN); +- +- dm_list_iterate_items(pvl, &vg->pvs) { +- if ((info = lvmcache_info_from_pv_id(&pvl->pv->id, pvl->pv->dev, 0)) && +- !lvmcache_update_vgname_and_id(vg->cmd, info, &vgsummary)) +- return_0; +- } +- +- return 1; +-} +- + /* + * The lvmcache representation of a VG after label_scan can be incorrect + * because the label_scan does not use the full VG metadata to construct +diff --git a/lib/cache/lvmcache.h b/lib/cache/lvmcache.h +index 9511bb9e9..2a48786e1 100644 +--- a/lib/cache/lvmcache.h ++++ b/lib/cache/lvmcache.h +@@ -84,7 +84,6 @@ void lvmcache_del_dev(struct device *dev); + int lvmcache_update_vgname_and_id(struct cmd_context *cmd, struct lvmcache_info *info, + struct lvmcache_vgsummary *vgsummary); + int lvmcache_update_vg_from_read(struct volume_group *vg, unsigned precommitted); +-int lvmcache_update_vg_from_write(struct volume_group *vg); + + void lvmcache_lock_vgname(const char *vgname, int read_only); + void lvmcache_unlock_vgname(const char *vgname); +diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c +index c4f65366b..fabc6529a 100644 +--- a/lib/metadata/metadata.c ++++ b/lib/metadata/metadata.c +@@ -3102,7 +3102,6 @@ static int _vg_commit_mdas(struct volume_group *vg) + DM_LIST_INIT(ignored); + int failed = 0; + int good = 0; +- int cache_updated = 0; + + /* Rearrange the metadata_areas_in_use so ignored mdas come first. */ + dm_list_iterate_items_safe(mda, tmda, &vg->fid->metadata_areas_in_use) +@@ -3123,12 +3122,6 @@ static int _vg_commit_mdas(struct volume_group *vg) + failed = 1; + } else + good++; +- +- /* Update cache first time we succeed */ +- if (!failed && !cache_updated) { +- lvmcache_update_vg_from_write(vg); +- cache_updated = 1; +- } + } + if (good) + return 1; +-- +2.43.0 + diff --git a/0128-handle-duplicate-vgids.patch b/0128-handle-duplicate-vgids.patch new file mode 100644 index 0000000..cd317ce --- /dev/null +++ b/0128-handle-duplicate-vgids.patch @@ -0,0 +1,124 @@ +From 05bb44d8216fb258fa6d4d0c237ea5c00085dc9e Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Thu, 6 Jan 2022 10:15:16 -0600 +Subject: [PATCH 11/12] handle duplicate vgids + +The approach to duplicate VGIDs has been that it is not possible +or not allowed, so the behavior has been undefined. The actual +result was unpredictable and/or broken, and generally unhelpful. + +Improve this by recognizing the problem, displaying the VGs, +and printing a warning to fix the problem. Beyond this, +using VGs with duplicate VGIDs remains undefined, but should +work well enough to correct the problem with vgchange -u. + +It's possible to create this condition without too much difficulty +by cloning PVs, followed by an incomplete attempt at making the two +VGs unique (vgrename and pvchange -u, but missing vgchange -u.) + +(cherry picked from commit 18f451e09e943eb3d51f8394f6fe8967e1e9f565) +--- + lib/cache/lvmcache.c | 20 +++++++++++--- + test/shell/duplicate-vgid.sh | 52 ++++++++++++++++++++++++++++++++++++ + 2 files changed, 68 insertions(+), 4 deletions(-) + create mode 100644 test/shell/duplicate-vgid.sh + +diff --git a/lib/cache/lvmcache.c b/lib/cache/lvmcache.c +index 85a1d4806..9b3c83736 100644 +--- a/lib/cache/lvmcache.c ++++ b/lib/cache/lvmcache.c +@@ -354,9 +354,11 @@ static struct lvmcache_vginfo *_vginfo_lookup(const char *vgname, const char *vg + if (vgid_arg) { + if ((vginfo = dm_hash_lookup(_vgid_hash, vgid))) { + if (vgname && strcmp(vginfo->vgname, vgname)) { +- /* should never happen */ +- log_error(INTERNAL_ERROR "vginfo_lookup vgid %s has two names %s %s", +- vgid, vginfo->vgname, vgname); ++ log_warn("WARNING: lookup found duplicate VGID %s for VGs %s and %s.", vgid, vginfo->vgname, vgname); ++ if ((vginfo = dm_hash_lookup(_vgname_hash, vgname))) { ++ if (!memcmp(vginfo->vgid, vgid, ID_LEN)) ++ return vginfo; ++ } + return NULL; + } + return vginfo; +@@ -1878,7 +1880,17 @@ static int _lvmcache_update_vgname(struct cmd_context *cmd, + + _drop_vginfo(info, info->vginfo); + +- if (!(vginfo = lvmcache_vginfo_from_vgid(vgid))) { ++ vginfo = lvmcache_vginfo_from_vgid(vgid); ++ if (vginfo && strcmp(vginfo->vgname, vgname)) { ++ log_warn("WARNING: fix duplicate VGID %s for VGs %s and %s (see vgchange -u).", vgid_dashed, vgname, vginfo->vgname); ++ vginfo = lvmcache_vginfo_from_vgname(vgname, NULL); ++ if (vginfo && memcmp(vginfo->vgid, vgid, ID_LEN)) { ++ log_error("Ignoring %s with conflicting VG info %s %s.", dev_name(info->dev), vgid_dashed, vgname); ++ return_0; ++ } ++ } ++ ++ if (!vginfo) { + /* + * Create a vginfo struct for this VG and put the vginfo + * into the hash table. +diff --git a/test/shell/duplicate-vgid.sh b/test/shell/duplicate-vgid.sh +new file mode 100644 +index 000000000..12163c2f0 +--- /dev/null ++++ b/test/shell/duplicate-vgid.sh +@@ -0,0 +1,52 @@ ++#!/usr/bin/env bash ++ ++# Copyright (C) 2008-2013 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. ++ ++SKIP_WITH_LVMLOCKD=1 ++SKIP_WITH_LVMPOLLD=1 ++ ++. lib/inittest ++ ++aux prepare_devs 2 ++ ++vgcreate $vg1 "$dev1" ++vgchange --setautoactivation n $vg1 ++UUID1=$(vgs --noheading -o vg_uuid $vg1 | xargs) ++lvcreate -l1 -an -n $lv1 $vg1 ++dd if="$dev1" of="$dev2" bs=1M count=1 ++aux disable_dev "$dev1" ++vgrename $vg1 $vg2 ++pvchange -u "$dev2" ++aux enable_dev "$dev1" ++ ++vgs -o+uuid |tee out ++grep $vg1 out | tee out1 ++grep $UUID1 out1 ++grep $vg2 out | tee out2 ++grep $UUID1 out2 ++ ++vgs $vg1 ++vgs $vg2 ++lvs $vg1/$lv1 ++lvs $vg2/$lv1 ++ ++lvremove $vg1/$lv1 ++lvremove $vg2/$lv1 ++ ++lvcreate -l1 -an -n $lv2 $vg1 ++lvcreate -l1 -an -n $lv3 $vg2 ++ ++vgchange -u $vg2 ++ ++vgs -o uuid $vg1 |tee out ++grep $UUID1 out ++ ++vgs -o uuid $vg2 |tee out ++not grep $UUID1 out ++ ++vgremove -ff $vg1 ++vgremove -ff $vg2 +-- +2.43.0 + diff --git a/0129-remove-unused-variable.patch b/0129-remove-unused-variable.patch new file mode 100644 index 0000000..2b48c22 --- /dev/null +++ b/0129-remove-unused-variable.patch @@ -0,0 +1,40 @@ +From c78f2e6ee218d12fb71fc70cd66a21f4ea324a91 Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Thu, 13 Jan 2022 11:41:09 -0600 +Subject: [PATCH 12/12] remove unused variable + +resulting from commit cb798ee1c102aadde93965a894c5aa59d4e76e4a + "lvmcache: remove lvmcache_update_vg_from_write" + +(cherry picked from commit 0c80ea88477b3511562036748d3bf837bf7b3e8b) +--- + lib/metadata/metadata.c | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c +index fabc6529a..4f947401f 100644 +--- a/lib/metadata/metadata.c ++++ b/lib/metadata/metadata.c +@@ -3100,7 +3100,6 @@ static int _vg_commit_mdas(struct volume_group *vg) + { + struct metadata_area *mda, *tmda; + DM_LIST_INIT(ignored); +- int failed = 0; + int good = 0; + + /* Rearrange the metadata_areas_in_use so ignored mdas come first. */ +@@ -3115,11 +3114,9 @@ static int _vg_commit_mdas(struct volume_group *vg) + dm_list_iterate_items(mda, &vg->fid->metadata_areas_in_use) { + if (mda->status & MDA_FAILED) + continue; +- failed = 0; + if (mda->ops->vg_commit && + !mda->ops->vg_commit(vg->fid, vg, mda)) { + stack; +- failed = 1; + } else + good++; + } +-- +2.43.0 + diff --git a/0130-spec-Install-and-package-etc-lvm-devices.patch b/0130-spec-Install-and-package-etc-lvm-devices.patch new file mode 100644 index 0000000..41c9834 --- /dev/null +++ b/0130-spec-Install-and-package-etc-lvm-devices.patch @@ -0,0 +1,25 @@ +From e85d3a5487893cd2b8464d0b9a69f0050f686d7e Mon Sep 17 00:00:00 2001 +From: Marian Csontos +Date: Wed, 29 Nov 2023 15:09:36 +0100 +Subject: [PATCH] spec: Install and package /etc/lvm/devices + +(cherry picked from commit ee31ba5023e6e1430c0d808f54015ccd3eb3931a) +--- + Makefile.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Makefile.in b/Makefile.in +index f7a46269a..afbb0d1bd 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -127,6 +127,7 @@ all_man: + + install_system_dirs: + $(INSTALL_DIR) $(DESTDIR)$(DEFAULT_SYS_DIR) ++ $(INSTALL_ROOT_DIR) $(DESTDIR)$(DEFAULT_SYS_DIR)/devices + $(INSTALL_ROOT_DIR) $(DESTDIR)$(DEFAULT_ARCHIVE_DIR) + $(INSTALL_ROOT_DIR) $(DESTDIR)$(DEFAULT_BACKUP_DIR) + $(INSTALL_ROOT_DIR) $(DESTDIR)$(DEFAULT_CACHE_DIR) +-- +2.43.0 + diff --git a/lvm2.spec b/lvm2.spec index 4c3c9bd..429e073 100644 --- a/lvm2.spec +++ b/lvm2.spec @@ -68,7 +68,7 @@ Version: 2.03.14 %if 0%{?from_snapshot} Release: 0.1.20210426git%{shortcommit}%{?dist}%{?rel_suffix} %else -Release: 13%{?dist}%{?rel_suffix} +Release: 14%{?dist}%{?rel_suffix} %endif License: GPLv2 URL: http://sourceware.org/lvm2 @@ -206,6 +206,27 @@ Patch116: 0115-vdo-support-version-4.patch Patch117: 0116-vdo-use-long-verbose.patch # BZ 2233901: Patch118: 0117-vdo-Sync-lvm_import_vdo.sh-with-main-as-of-970e4d295.patch +# RHEL-8289: +Patch119: 0118-man-Fix-typo.patch +Patch120: 0119-doc-fix-typos-in-documentation.patch +# RHEL-20192: +Patch121: 0120-archiving-Fix-doubled-filename-in-vgcfgrestore.patch +# RHEL-14216: +Patch122: 0121-man-add-inte-g-rity-to-man-lvs.patch +# RHEL-8298: +Patch123: 0122-Fix-lvconvert-m-0-will-always-take-rimage_0-even-if-.patch +Patch124: 0123-lvconvert-fix-lvconvert-m-0-for-in-sync-legs.patch +# RHEL-8334: +Patch125: 0124-Fix-multisegment-RAID1-allocator-uses-one-disk-for-b.patch +# RHEL-8270: +Patch126: 0125-raid-add-messages-to-lvs-command-output-in-case-Raid.patch +## RHEL-8295: +#Patch127: 0126-vgsplit-don-t-reread-vg_to.patch +#Patch128: 0127-lvmcache-remove-lvmcache_update_vg_from_write.patch +#Patch129: 0128-handle-duplicate-vgids.patch +#Patch130: 0129-remove-unused-variable.patch +# +Patch131: 0130-spec-Install-and-package-etc-lvm-devices.patch BuildRequires: gcc %if %{enable_testsuite} @@ -522,6 +543,7 @@ systemctl start lvm2-lvmpolld.socket >/dev/null 2>&1 || : %dir %{_sysconfdir}/lvm/backup %dir %{_sysconfdir}/lvm/cache %dir %{_sysconfdir}/lvm/archive +%dir %{_sysconfdir}/lvm/devices %dir %{_default_locking_dir} %dir %{_default_run_dir} %{_tmpfilesdir}/%{name}.conf @@ -883,6 +905,12 @@ An extensive functional testsuite for LVM2. %endif %changelog +* Fri Feb 02 2024 Marian Csontos - 2.03.14-14 +- Fix multisegment RAID1 allocator using one disk for both legs. +- Fix lvconvert -m 0 taking rimage_0 even if it is out of sync. +- Add warning message when mirror images have (r)efresh bit set. +- Document lv_attr volume type bit (g) for raid+integrity in lvs(8). + * Mon Sep 18 2023 Marian Csontos - 2.03.14-13.el8_9 - Fix error paths in lvm_import_vdo.sh.