Auto sync2gitlab import of mdadm-4.2-6.el8.src.rpm
This commit is contained in:
parent
fbe4778694
commit
d64712486e
112
0053-super1-report-truncated-device.patch
Normal file
112
0053-super1-report-truncated-device.patch
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
From 171e9743881edf2dfb163ddff483566fbf913ccd Mon Sep 17 00:00:00 2001
|
||||||
|
From: NeilBrown <neilb@suse.de>
|
||||||
|
Date: Fri, 26 Aug 2022 08:55:56 +1000
|
||||||
|
Subject: [PATCH 53/63] super1: report truncated device
|
||||||
|
|
||||||
|
When the metadata is at the start of the device, it is possible that it
|
||||||
|
describes a device large than the one it is actually stored on. When
|
||||||
|
this happens, report it loudly in --examine.
|
||||||
|
|
||||||
|
....
|
||||||
|
Unused Space : before=1968 sectors, after=-2047 sectors DEVICE TOO SMALL
|
||||||
|
State : clean TRUNCATED DEVICE
|
||||||
|
....
|
||||||
|
|
||||||
|
Also report in --assemble so that the failure which the kernel will
|
||||||
|
report will be explained.
|
||||||
|
|
||||||
|
mdadm: Device /dev/sdb is not large enough for data described in superblock
|
||||||
|
mdadm: no RAID superblock on /dev/sdb
|
||||||
|
mdadm: /dev/sdb has no superblock - assembly aborted
|
||||||
|
|
||||||
|
Scenario can be demonstrated as follows:
|
||||||
|
|
||||||
|
mdadm: Note: this array has metadata at the start and
|
||||||
|
may not be suitable as a boot device. If you plan to
|
||||||
|
store '/boot' on this device please ensure that
|
||||||
|
your boot-loader understands md/v1.x metadata, or use
|
||||||
|
--metadata=0.90
|
||||||
|
mdadm: Defaulting to version 1.2 metadata
|
||||||
|
mdadm: array /dev/md/test started.
|
||||||
|
mdadm: stopped /dev/md/test
|
||||||
|
Unused Space : before=1968 sectors, after=-2047 sectors DEVICE TOO SMALL
|
||||||
|
State : clean TRUNCATED DEVICE
|
||||||
|
Unused Space : before=1968 sectors, after=-2047 sectors DEVICE TOO SMALL
|
||||||
|
State : clean TRUNCATED DEVICE
|
||||||
|
|
||||||
|
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||||
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||||
|
---
|
||||||
|
super1.c | 35 ++++++++++++++++++++++++++++-------
|
||||||
|
1 file changed, 28 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/super1.c b/super1.c
|
||||||
|
index 71af860c..58345e68 100644
|
||||||
|
--- a/super1.c
|
||||||
|
+++ b/super1.c
|
||||||
|
@@ -406,12 +406,18 @@ static void examine_super1(struct supertype *st, char *homehost)
|
||||||
|
|
||||||
|
st->ss->getinfo_super(st, &info, NULL);
|
||||||
|
if (info.space_after != 1 &&
|
||||||
|
- !(__le32_to_cpu(sb->feature_map) & MD_FEATURE_NEW_OFFSET))
|
||||||
|
- printf(" Unused Space : before=%llu sectors, after=%llu sectors\n",
|
||||||
|
- info.space_before, info.space_after);
|
||||||
|
-
|
||||||
|
- printf(" State : %s\n",
|
||||||
|
- (__le64_to_cpu(sb->resync_offset)+1)? "active":"clean");
|
||||||
|
+ !(__le32_to_cpu(sb->feature_map) & MD_FEATURE_NEW_OFFSET)) {
|
||||||
|
+ printf(" Unused Space : before=%llu sectors, ",
|
||||||
|
+ info.space_before);
|
||||||
|
+ if (info.space_after < INT64_MAX)
|
||||||
|
+ printf("after=%llu sectors\n", info.space_after);
|
||||||
|
+ else
|
||||||
|
+ printf("after=-%llu sectors DEVICE TOO SMALL\n",
|
||||||
|
+ UINT64_MAX - info.space_after);
|
||||||
|
+ }
|
||||||
|
+ printf(" State : %s%s\n",
|
||||||
|
+ (__le64_to_cpu(sb->resync_offset)+1) ? "active":"clean",
|
||||||
|
+ (info.space_after > INT64_MAX) ? " TRUNCATED DEVICE" : "");
|
||||||
|
printf(" Device UUID : ");
|
||||||
|
for (i=0; i<16; i++) {
|
||||||
|
if ((i&3)==0 && i != 0)
|
||||||
|
@@ -2206,6 +2212,7 @@ static int load_super1(struct supertype *st, int fd, char *devname)
|
||||||
|
tst.ss = &super1;
|
||||||
|
for (tst.minor_version = 0; tst.minor_version <= 2;
|
||||||
|
tst.minor_version++) {
|
||||||
|
+ tst.ignore_hw_compat = st->ignore_hw_compat;
|
||||||
|
switch(load_super1(&tst, fd, devname)) {
|
||||||
|
case 0: super = tst.sb;
|
||||||
|
if (bestvers == -1 ||
|
||||||
|
@@ -2312,7 +2319,6 @@ static int load_super1(struct supertype *st, int fd, char *devname)
|
||||||
|
free(super);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
- st->sb = super;
|
||||||
|
|
||||||
|
bsb = (struct bitmap_super_s *)(((char*)super)+MAX_SB_SIZE);
|
||||||
|
|
||||||
|
@@ -2322,6 +2328,21 @@ static int load_super1(struct supertype *st, int fd, char *devname)
|
||||||
|
if (st->data_offset == INVALID_SECTORS)
|
||||||
|
st->data_offset = __le64_to_cpu(super->data_offset);
|
||||||
|
|
||||||
|
+ if (st->minor_version >= 1 &&
|
||||||
|
+ st->ignore_hw_compat == 0 &&
|
||||||
|
+ (dsize < (__le64_to_cpu(super->data_offset) +
|
||||||
|
+ __le64_to_cpu(super->size))
|
||||||
|
+ ||
|
||||||
|
+ dsize < (__le64_to_cpu(super->data_offset) +
|
||||||
|
+ __le64_to_cpu(super->data_size)))) {
|
||||||
|
+ if (devname)
|
||||||
|
+ pr_err("Device %s is not large enough for data described in superblock\n",
|
||||||
|
+ devname);
|
||||||
|
+ free(super);
|
||||||
|
+ return 2;
|
||||||
|
+ }
|
||||||
|
+ st->sb = super;
|
||||||
|
+
|
||||||
|
/* Now check on the bitmap superblock */
|
||||||
|
if ((__le32_to_cpu(super->feature_map)&MD_FEATURE_BITMAP_OFFSET) == 0)
|
||||||
|
return 0;
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
616
0054-mdadm-Correct-typos-punctuation-and-grammar-in-man.patch
Normal file
616
0054-mdadm-Correct-typos-punctuation-and-grammar-in-man.patch
Normal file
@ -0,0 +1,616 @@
|
|||||||
|
From 1a386f804d8392b849b3362da6b0157b0db83091 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mateusz Grzonka <mateusz.grzonka@intel.com>
|
||||||
|
Date: Fri, 12 Aug 2022 16:52:12 +0200
|
||||||
|
Subject: [PATCH 54/63] mdadm: Correct typos, punctuation and grammar in man
|
||||||
|
|
||||||
|
Signed-off-by: Mateusz Grzonka <mateusz.grzonka@intel.com>
|
||||||
|
Reviewed-by: Wol <anthony@youngman.org.uk>
|
||||||
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||||
|
---
|
||||||
|
mdadm.8.in | 178 ++++++++++++++++++++++++++---------------------------
|
||||||
|
1 file changed, 88 insertions(+), 90 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/mdadm.8.in b/mdadm.8.in
|
||||||
|
index f2736226..70c79d1e 100644
|
||||||
|
--- a/mdadm.8.in
|
||||||
|
+++ b/mdadm.8.in
|
||||||
|
@@ -158,7 +158,7 @@ adding new spares and removing faulty devices.
|
||||||
|
.B Misc
|
||||||
|
This is an 'everything else' mode that supports operations on active
|
||||||
|
arrays, operations on component devices such as erasing old superblocks, and
|
||||||
|
-information gathering operations.
|
||||||
|
+information-gathering operations.
|
||||||
|
.\"This mode allows operations on independent devices such as examine MD
|
||||||
|
.\"superblocks, erasing old superblocks and stopping active arrays.
|
||||||
|
|
||||||
|
@@ -231,12 +231,12 @@ mode to be assumed.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.BR \-h ", " \-\-help
|
||||||
|
-Display general help message or, after one of the above options, a
|
||||||
|
+Display a general help message or, after one of the above options, a
|
||||||
|
mode-specific help message.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-\-help\-options
|
||||||
|
-Display more detailed help about command line parsing and some commonly
|
||||||
|
+Display more detailed help about command-line parsing and some commonly
|
||||||
|
used options.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
@@ -266,7 +266,7 @@ the exact meaning of this option in different contexts.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.BR \-c ", " \-\-config=
|
||||||
|
-Specify the config file or directory. If not specified, default config file
|
||||||
|
+Specify the config file or directory. If not specified, the default config file
|
||||||
|
and default conf.d directory will be used. See
|
||||||
|
.BR mdadm.conf (5)
|
||||||
|
for more details.
|
||||||
|
@@ -379,7 +379,7 @@ When creating an array, the
|
||||||
|
.B homehost
|
||||||
|
will be recorded in the metadata. For version-1 superblocks, it will
|
||||||
|
be prefixed to the array name. For version-0.90 superblocks, part of
|
||||||
|
-the SHA1 hash of the hostname will be stored in the later half of the
|
||||||
|
+the SHA1 hash of the hostname will be stored in the latter half of the
|
||||||
|
UUID.
|
||||||
|
|
||||||
|
When reporting information about an array, any array which is tagged
|
||||||
|
@@ -388,7 +388,7 @@ for the given homehost will be reported as such.
|
||||||
|
When using Auto-Assemble, only arrays tagged for the given homehost
|
||||||
|
will be allowed to use 'local' names (i.e. not ending in '_' followed
|
||||||
|
by a digit string). See below under
|
||||||
|
-.BR "Auto Assembly" .
|
||||||
|
+.BR "Auto-Assembly" .
|
||||||
|
|
||||||
|
The special name "\fBany\fP" can be used as a wild card. If an array
|
||||||
|
is created with
|
||||||
|
@@ -403,7 +403,7 @@ When
|
||||||
|
.I mdadm
|
||||||
|
needs to print the name for a device it normally finds the name in
|
||||||
|
.B /dev
|
||||||
|
-which refers to the device and is shortest. When a path component is
|
||||||
|
+which refers to the device and is the shortest. When a path component is
|
||||||
|
given with
|
||||||
|
.B \-\-prefer
|
||||||
|
.I mdadm
|
||||||
|
@@ -478,9 +478,9 @@ still be larger than any replacement.
|
||||||
|
|
||||||
|
This option can be used with
|
||||||
|
.B \-\-create
|
||||||
|
-for determining initial size of an array. For external metadata,
|
||||||
|
+for determining the initial size of an array. For external metadata,
|
||||||
|
it can be used on a volume, but not on a container itself.
|
||||||
|
-Setting initial size of
|
||||||
|
+Setting the initial size of
|
||||||
|
.B RAID 0
|
||||||
|
array is only valid for external metadata.
|
||||||
|
|
||||||
|
@@ -545,20 +545,20 @@ Clustered arrays do not support this parameter yet.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.BR \-c ", " \-\-chunk=
|
||||||
|
-Specify chunk size of kilobytes. The default when creating an
|
||||||
|
+Specify chunk size in kilobytes. The default when creating an
|
||||||
|
array is 512KB. To ensure compatibility with earlier versions, the
|
||||||
|
default when building an array with no persistent metadata is 64KB.
|
||||||
|
This is only meaningful for RAID0, RAID4, RAID5, RAID6, and RAID10.
|
||||||
|
|
||||||
|
RAID4, RAID5, RAID6, and RAID10 require the chunk size to be a power
|
||||||
|
-of 2. In any case it must be a multiple of 4KB.
|
||||||
|
+of 2, with minimal chunk size being 4KB.
|
||||||
|
|
||||||
|
A suffix of 'K', 'M', 'G' or 'T' can be given to indicate Kilobytes,
|
||||||
|
Megabytes, Gigabytes or Terabytes respectively.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.BR \-\-rounding=
|
||||||
|
-Specify rounding factor for a Linear array. The size of each
|
||||||
|
+Specify the rounding factor for a Linear array. The size of each
|
||||||
|
component will be rounded down to a multiple of this size.
|
||||||
|
This is a synonym for
|
||||||
|
.B \-\-chunk
|
||||||
|
@@ -655,7 +655,8 @@ option to set subsequent failure modes.
|
||||||
|
and "flush" will clear any persistent faults.
|
||||||
|
|
||||||
|
The layout options for RAID10 are one of 'n', 'o' or 'f' followed
|
||||||
|
-by a small number. The default is 'n2'. The supported options are:
|
||||||
|
+by a small number signifying the number of copies of each datablock.
|
||||||
|
+The default is 'n2'. The supported options are:
|
||||||
|
|
||||||
|
.I 'n'
|
||||||
|
signals 'near' copies. Multiple copies of one data block are at
|
||||||
|
@@ -673,7 +674,7 @@ signals 'far' copies
|
||||||
|
(multiple copies have very different offsets).
|
||||||
|
See md(4) for more detail about 'near', 'offset', and 'far'.
|
||||||
|
|
||||||
|
-The number is the number of copies of each datablock. 2 is normal, 3
|
||||||
|
+As for the number of copies of each data block, 2 is normal, 3
|
||||||
|
can be useful. This number can be at most equal to the number of
|
||||||
|
devices in the array. It does not need to divide evenly into that
|
||||||
|
number (e.g. it is perfectly legal to have an 'n2' layout for an array
|
||||||
|
@@ -684,7 +685,7 @@ A bug introduced in Linux 3.14 means that RAID0 arrays
|
||||||
|
started using a different layout. This could lead to
|
||||||
|
data corruption. Since Linux 5.4 (and various stable releases that received
|
||||||
|
backports), the kernel will not accept such an array unless
|
||||||
|
-a layout is explictly set. It can be set to
|
||||||
|
+a layout is explicitly set. It can be set to
|
||||||
|
.RB ' original '
|
||||||
|
or
|
||||||
|
.RB ' alternate '.
|
||||||
|
@@ -760,13 +761,13 @@ or by selecting a different consistency policy with
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.BR \-\-bitmap\-chunk=
|
||||||
|
-Set the chunksize of the bitmap. Each bit corresponds to that many
|
||||||
|
+Set the chunk size of the bitmap. Each bit corresponds to that many
|
||||||
|
Kilobytes of storage.
|
||||||
|
-When using a file based bitmap, the default is to use the smallest
|
||||||
|
-size that is at-least 4 and requires no more than 2^21 chunks.
|
||||||
|
+When using a file-based bitmap, the default is to use the smallest
|
||||||
|
+size that is at least 4 and requires no more than 2^21 chunks.
|
||||||
|
When using an
|
||||||
|
.B internal
|
||||||
|
-bitmap, the chunksize defaults to 64Meg, or larger if necessary to
|
||||||
|
+bitmap, the chunk size defaults to 64Meg, or larger if necessary to
|
||||||
|
fit the bitmap into the available space.
|
||||||
|
|
||||||
|
A suffix of 'K', 'M', 'G' or 'T' can be given to indicate Kilobytes,
|
||||||
|
@@ -840,7 +841,7 @@ can be used with that command to avoid the automatic resync.
|
||||||
|
.BR \-\-backup\-file=
|
||||||
|
This is needed when
|
||||||
|
.B \-\-grow
|
||||||
|
-is used to increase the number of raid-devices in a RAID5 or RAID6 if
|
||||||
|
+is used to increase the number of raid devices in a RAID5 or RAID6 if
|
||||||
|
there are no spare devices available, or to shrink, change RAID level
|
||||||
|
or layout. See the GROW MODE section below on RAID\-DEVICES CHANGES.
|
||||||
|
The file must be stored on a separate device, not on the RAID array
|
||||||
|
@@ -879,7 +880,7 @@ When creating an array,
|
||||||
|
.B \-\-data\-offset
|
||||||
|
can be specified as
|
||||||
|
.BR variable .
|
||||||
|
-In the case each member device is expected to have a offset appended
|
||||||
|
+In the case each member device is expected to have an offset appended
|
||||||
|
to the name, separated by a colon. This makes it possible to recreate
|
||||||
|
exactly an array which has varying data offsets (as can happen when
|
||||||
|
different versions of
|
||||||
|
@@ -943,7 +944,7 @@ Insist that
|
||||||
|
.I mdadm
|
||||||
|
accept the geometry and layout specified without question. Normally
|
||||||
|
.I mdadm
|
||||||
|
-will not allow creation of an array with only one device, and will try
|
||||||
|
+will not allow the creation of an array with only one device, and will try
|
||||||
|
to create a RAID5 array with one missing drive (as this makes the
|
||||||
|
initial resync work faster). With
|
||||||
|
.BR \-\-force ,
|
||||||
|
@@ -1004,7 +1005,7 @@ number added, e.g.
|
||||||
|
If the md device name is in a 'standard' format as described in DEVICE
|
||||||
|
NAMES, then it will be created, if necessary, with the appropriate
|
||||||
|
device number based on that name. If the device name is not in one of these
|
||||||
|
-formats, then a unused device number will be allocated. The device
|
||||||
|
+formats, then an unused device number will be allocated. The device
|
||||||
|
number will be considered unused if there is no active array for that
|
||||||
|
number, and there is no entry in /dev for that number and with a
|
||||||
|
non-standard name. Names that are not in 'standard' format are only
|
||||||
|
@@ -1032,25 +1033,25 @@ then
|
||||||
|
.B \-\-add
|
||||||
|
can be used to add some extra devices to be included in the array.
|
||||||
|
In most cases this is not needed as the extra devices can be added as
|
||||||
|
-spares first, and then the number of raid-disks can be changed.
|
||||||
|
-However for RAID0, it is not possible to add spares. So to increase
|
||||||
|
+spares first, and then the number of raid disks can be changed.
|
||||||
|
+However, for RAID0 it is not possible to add spares. So to increase
|
||||||
|
the number of devices in a RAID0, it is necessary to set the new
|
||||||
|
number of devices, and to add the new devices, in the same command.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.BR \-\-nodes
|
||||||
|
-Only works when the array is for clustered environment. It specifies
|
||||||
|
+Only works when the array is created for a clustered environment. It specifies
|
||||||
|
the maximum number of nodes in the cluster that will use this device
|
||||||
|
simultaneously. If not specified, this defaults to 4.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.BR \-\-write-journal
|
||||||
|
Specify journal device for the RAID-4/5/6 array. The journal device
|
||||||
|
-should be a SSD with reasonable lifetime.
|
||||||
|
+should be an SSD with a reasonable lifetime.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.BR \-k ", " \-\-consistency\-policy=
|
||||||
|
-Specify how the array maintains consistency in case of unexpected shutdown.
|
||||||
|
+Specify how the array maintains consistency in the case of an unexpected shutdown.
|
||||||
|
Only relevant for RAID levels with redundancy.
|
||||||
|
Currently supported options are:
|
||||||
|
.RS
|
||||||
|
@@ -1058,7 +1059,7 @@ Currently supported options are:
|
||||||
|
.TP
|
||||||
|
.B resync
|
||||||
|
Full resync is performed and all redundancy is regenerated when the array is
|
||||||
|
-started after unclean shutdown.
|
||||||
|
+started after an unclean shutdown.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B bitmap
|
||||||
|
@@ -1067,8 +1068,8 @@ Resync assisted by a write-intent bitmap. Implicitly selected when using
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B journal
|
||||||
|
-For RAID levels 4/5/6, journal device is used to log transactions and replay
|
||||||
|
-after unclean shutdown. Implicitly selected when using
|
||||||
|
+For RAID levels 4/5/6, the journal device is used to log transactions and replay
|
||||||
|
+after an unclean shutdown. Implicitly selected when using
|
||||||
|
.BR \-\-write\-journal .
|
||||||
|
|
||||||
|
.TP
|
||||||
|
@@ -1237,7 +1238,7 @@ This can be useful if
|
||||||
|
reports a different "Preferred Minor" to
|
||||||
|
.BR \-\-detail .
|
||||||
|
In some cases this update will be performed automatically
|
||||||
|
-by the kernel driver. In particular the update happens automatically
|
||||||
|
+by the kernel driver. In particular, the update happens automatically
|
||||||
|
at the first write to an array with redundancy (RAID level 1 or
|
||||||
|
greater) on a 2.6 (or later) kernel.
|
||||||
|
|
||||||
|
@@ -1277,7 +1278,7 @@ For version-1 superblocks, this involves updating the name.
|
||||||
|
The
|
||||||
|
.B home\-cluster
|
||||||
|
option will change the cluster name as recorded in the superblock and
|
||||||
|
-bitmap. This option only works for clustered environment.
|
||||||
|
+bitmap. This option only works for a clustered environment.
|
||||||
|
|
||||||
|
The
|
||||||
|
.B resync
|
||||||
|
@@ -1390,10 +1391,10 @@ This option should be used with great caution.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.BR \-\-freeze\-reshape
|
||||||
|
-Option is intended to be used in start-up scripts during initrd boot phase.
|
||||||
|
-When array under reshape is assembled during initrd phase, this option
|
||||||
|
-stops reshape after reshape critical section is being restored. This happens
|
||||||
|
-before file system pivot operation and avoids loss of file system context.
|
||||||
|
+This option is intended to be used in start-up scripts during the initrd boot phase.
|
||||||
|
+When the array under reshape is assembled during the initrd phase, this option
|
||||||
|
+stops the reshape after the reshape-critical section has been restored. This happens
|
||||||
|
+before the file system pivot operation and avoids loss of filesystem context.
|
||||||
|
Losing file system context would cause reshape to be broken.
|
||||||
|
|
||||||
|
Reshape can be continued later using the
|
||||||
|
@@ -1437,9 +1438,9 @@ re\-add a device that was previously removed from an array.
|
||||||
|
If the metadata on the device reports that it is a member of the
|
||||||
|
array, and the slot that it used is still vacant, then the device will
|
||||||
|
be added back to the array in the same position. This will normally
|
||||||
|
-cause the data for that device to be recovered. However based on the
|
||||||
|
+cause the data for that device to be recovered. However, based on the
|
||||||
|
event count on the device, the recovery may only require sections that
|
||||||
|
-are flagged a write-intent bitmap to be recovered or may not require
|
||||||
|
+are flagged by a write-intent bitmap to be recovered or may not require
|
||||||
|
any recovery at all.
|
||||||
|
|
||||||
|
When used on an array that has no metadata (i.e. it was built with
|
||||||
|
@@ -1447,13 +1448,12 @@ When used on an array that has no metadata (i.e. it was built with
|
||||||
|
it will be assumed that bitmap-based recovery is enough to make the
|
||||||
|
device fully consistent with the array.
|
||||||
|
|
||||||
|
-When used with v1.x metadata,
|
||||||
|
.B \-\-re\-add
|
||||||
|
-can be accompanied by
|
||||||
|
+can also be accompanied by
|
||||||
|
.BR \-\-update=devicesize ,
|
||||||
|
.BR \-\-update=bbl ", or"
|
||||||
|
.BR \-\-update=no\-bbl .
|
||||||
|
-See the description of these option when used in Assemble mode for an
|
||||||
|
+See descriptions of these options when used in Assemble mode for an
|
||||||
|
explanation of their use.
|
||||||
|
|
||||||
|
If the device name given is
|
||||||
|
@@ -1480,7 +1480,7 @@ Add a device as a spare. This is similar to
|
||||||
|
except that it does not attempt
|
||||||
|
.B \-\-re\-add
|
||||||
|
first. The device will be added as a spare even if it looks like it
|
||||||
|
-could be an recent member of the array.
|
||||||
|
+could be a recent member of the array.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.BR \-r ", " \-\-remove
|
||||||
|
@@ -1497,12 +1497,12 @@ and names like
|
||||||
|
.B set-A
|
||||||
|
can be given to
|
||||||
|
.BR \-\-remove .
|
||||||
|
-The first causes all failed device to be removed. The second causes
|
||||||
|
+The first causes all failed devices to be removed. The second causes
|
||||||
|
any device which is no longer connected to the system (i.e an 'open'
|
||||||
|
returns
|
||||||
|
.BR ENXIO )
|
||||||
|
to be removed.
|
||||||
|
-The third will remove a set as describe below under
|
||||||
|
+The third will remove a set as described below under
|
||||||
|
.BR \-\-fail .
|
||||||
|
|
||||||
|
.TP
|
||||||
|
@@ -1519,7 +1519,7 @@ For RAID10 arrays where the number of copies evenly divides the number
|
||||||
|
of devices, the devices can be conceptually divided into sets where
|
||||||
|
each set contains a single complete copy of the data on the array.
|
||||||
|
Sometimes a RAID10 array will be configured so that these sets are on
|
||||||
|
-separate controllers. In this case all the devices in one set can be
|
||||||
|
+separate controllers. In this case, all the devices in one set can be
|
||||||
|
failed by giving a name like
|
||||||
|
.B set\-A
|
||||||
|
or
|
||||||
|
@@ -1549,9 +1549,9 @@ This can follow a list of
|
||||||
|
.B \-\-replace
|
||||||
|
devices. The devices listed after
|
||||||
|
.B \-\-with
|
||||||
|
-will be preferentially used to replace the devices listed after
|
||||||
|
+will preferentially be used to replace the devices listed after
|
||||||
|
.BR \-\-replace .
|
||||||
|
-These device must already be spare devices in the array.
|
||||||
|
+These devices must already be spare devices in the array.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.BR \-\-write\-mostly
|
||||||
|
@@ -1574,8 +1574,8 @@ the device is found or <slot>:missing in case the device is not found.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.BR \-\-add-journal
|
||||||
|
-Add journal to an existing array, or recreate journal for RAID-4/5/6 array
|
||||||
|
-that lost a journal device. To avoid interrupting on-going write opertions,
|
||||||
|
+Add a journal to an existing array, or recreate journal for a RAID-4/5/6 array
|
||||||
|
+that lost a journal device. To avoid interrupting ongoing write operations,
|
||||||
|
.B \-\-add-journal
|
||||||
|
only works for array in Read-Only state.
|
||||||
|
|
||||||
|
@@ -1631,9 +1631,9 @@ Print details of one or more md devices.
|
||||||
|
.TP
|
||||||
|
.BR \-\-detail\-platform
|
||||||
|
Print details of the platform's RAID capabilities (firmware / hardware
|
||||||
|
-topology) for a given metadata format. If used without argument, mdadm
|
||||||
|
+topology) for a given metadata format. If used without an argument, mdadm
|
||||||
|
will scan all controllers looking for their capabilities. Otherwise, mdadm
|
||||||
|
-will only look at the controller specified by the argument in form of an
|
||||||
|
+will only look at the controller specified by the argument in the form of an
|
||||||
|
absolute filepath or a link, e.g.
|
||||||
|
.IR /sys/devices/pci0000:00/0000:00:1f.2 .
|
||||||
|
|
||||||
|
@@ -1742,8 +1742,8 @@ the block where the superblock would be is overwritten even if it
|
||||||
|
doesn't appear to be valid.
|
||||||
|
|
||||||
|
.B Note:
|
||||||
|
-Be careful to call \-\-zero\-superblock with clustered raid, make sure
|
||||||
|
-array isn't used or assembled in other cluster node before execute it.
|
||||||
|
+Be careful when calling \-\-zero\-superblock with clustered raid. Make sure
|
||||||
|
+the array isn't used or assembled in another cluster node before executing it.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-\-kill\-subarray=
|
||||||
|
@@ -1790,7 +1790,7 @@ For each md device given, or each device in /proc/mdstat if
|
||||||
|
is given, arrange for the array to be marked clean as soon as possible.
|
||||||
|
.I mdadm
|
||||||
|
will return with success if the array uses external metadata and we
|
||||||
|
-successfully waited. For native arrays this returns immediately as the
|
||||||
|
+successfully waited. For native arrays, this returns immediately as the
|
||||||
|
kernel handles dirty-clean transitions at shutdown. No action is taken
|
||||||
|
if safe-mode handling is disabled.
|
||||||
|
|
||||||
|
@@ -1830,7 +1830,7 @@ uses to help track which arrays are currently being assembled.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.BR \-\-run ", " \-R
|
||||||
|
-Run any array assembled as soon as a minimal number of devices are
|
||||||
|
+Run any array assembled as soon as a minimal number of devices is
|
||||||
|
available, rather than waiting until all expected devices are present.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
@@ -1860,7 +1860,7 @@ Only used with \-\-fail. The 'path' given will be recorded so that if
|
||||||
|
a new device appears at the same location it can be automatically
|
||||||
|
added to the same array. This allows the failed device to be
|
||||||
|
automatically replaced by a new device without metadata if it appears
|
||||||
|
-at specified path. This option is normally only set by a
|
||||||
|
+at specified path. This option is normally only set by an
|
||||||
|
.I udev
|
||||||
|
script.
|
||||||
|
|
||||||
|
@@ -1961,7 +1961,7 @@ Usage:
|
||||||
|
.PP
|
||||||
|
This usage assembles one or more RAID arrays from pre-existing components.
|
||||||
|
For each array, mdadm needs to know the md device, the identity of the
|
||||||
|
-array, and a number of component-devices. These can be found in a number of ways.
|
||||||
|
+array, and the number of component devices. These can be found in a number of ways.
|
||||||
|
|
||||||
|
In the first usage example (without the
|
||||||
|
.BR \-\-scan )
|
||||||
|
@@ -2001,7 +2001,7 @@ The config file is only used if explicitly named with
|
||||||
|
.B \-\-config
|
||||||
|
or requested with (a possibly implicit)
|
||||||
|
.BR \-\-scan .
|
||||||
|
-In the later case, default config file is used. See
|
||||||
|
+In the latter case, the default config file is used. See
|
||||||
|
.BR mdadm.conf (5)
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
@@ -2039,14 +2039,14 @@ detects that udev is not configured, it will create the devices in
|
||||||
|
.B /dev
|
||||||
|
itself.
|
||||||
|
|
||||||
|
-In Linux kernels prior to version 2.6.28 there were two distinctly
|
||||||
|
-different types of md devices that could be created: one that could be
|
||||||
|
+In Linux kernels prior to version 2.6.28 there were two distinct
|
||||||
|
+types of md devices that could be created: one that could be
|
||||||
|
partitioned using standard partitioning tools and one that could not.
|
||||||
|
-Since 2.6.28 that distinction is no longer relevant as both type of
|
||||||
|
+Since 2.6.28 that distinction is no longer relevant as both types of
|
||||||
|
devices can be partitioned.
|
||||||
|
.I mdadm
|
||||||
|
will normally create the type that originally could not be partitioned
|
||||||
|
-as it has a well defined major number (9).
|
||||||
|
+as it has a well-defined major number (9).
|
||||||
|
|
||||||
|
Prior to 2.6.28, it is important that mdadm chooses the correct type
|
||||||
|
of array device to use. This can be controlled with the
|
||||||
|
@@ -2066,7 +2066,7 @@ can also be given in the configuration file as a word starting
|
||||||
|
.B auto=
|
||||||
|
on the ARRAY line for the relevant array.
|
||||||
|
|
||||||
|
-.SS Auto Assembly
|
||||||
|
+.SS Auto-Assembly
|
||||||
|
When
|
||||||
|
.B \-\-assemble
|
||||||
|
is used with
|
||||||
|
@@ -2122,11 +2122,11 @@ See
|
||||||
|
.IR mdadm.conf (5)
|
||||||
|
for further details.
|
||||||
|
|
||||||
|
-Note: Auto assembly cannot be used for assembling and activating some
|
||||||
|
+Note: Auto-assembly cannot be used for assembling and activating some
|
||||||
|
arrays which are undergoing reshape. In particular as the
|
||||||
|
.B backup\-file
|
||||||
|
-cannot be given, any reshape which requires a backup-file to continue
|
||||||
|
-cannot be started by auto assembly. An array which is growing to more
|
||||||
|
+cannot be given, any reshape which requires a backup file to continue
|
||||||
|
+cannot be started by auto-assembly. An array which is growing to more
|
||||||
|
devices and has passed the critical section can be assembled using
|
||||||
|
auto-assembly.
|
||||||
|
|
||||||
|
@@ -2233,7 +2233,7 @@ When creating a partition based array, using
|
||||||
|
.I mdadm
|
||||||
|
with version-1.x metadata, the partition type should be set to
|
||||||
|
.B 0xDA
|
||||||
|
-(non fs-data). This type selection allows for greater precision since
|
||||||
|
+(non fs-data). This type of selection allows for greater precision since
|
||||||
|
using any other [RAID auto-detect (0xFD) or a GNU/Linux partition (0x83)],
|
||||||
|
might create problems in the event of array recovery through a live cdrom.
|
||||||
|
|
||||||
|
@@ -2249,7 +2249,7 @@ when creating a v0.90 array will silently override any
|
||||||
|
setting.
|
||||||
|
.\"If the
|
||||||
|
.\".B \-\-size
|
||||||
|
-.\"option is given, it is not necessary to list any component-devices in this command.
|
||||||
|
+.\"option is given, it is not necessary to list any component devices in this command.
|
||||||
|
.\"They can be added later, before a
|
||||||
|
.\".B \-\-run.
|
||||||
|
.\"If no
|
||||||
|
@@ -2263,7 +2263,7 @@ requested with the
|
||||||
|
.B \-\-bitmap
|
||||||
|
option or a different consistency policy is selected with the
|
||||||
|
.B \-\-consistency\-policy
|
||||||
|
-option. In any case space for a bitmap will be reserved so that one
|
||||||
|
+option. In any case, space for a bitmap will be reserved so that one
|
||||||
|
can be added later with
|
||||||
|
.BR "\-\-grow \-\-bitmap=internal" .
|
||||||
|
|
||||||
|
@@ -2313,7 +2313,7 @@ will firstly mark
|
||||||
|
as faulty in
|
||||||
|
.B /dev/md0
|
||||||
|
and will then remove it from the array and finally add it back
|
||||||
|
-in as a spare. However only one md array can be affected by a single
|
||||||
|
+in as a spare. However, only one md array can be affected by a single
|
||||||
|
command.
|
||||||
|
|
||||||
|
When a device is added to an active array, mdadm checks to see if it
|
||||||
|
@@ -2458,14 +2458,14 @@ config file to be examined.
|
||||||
|
If the device contains RAID metadata, a file will be created in the
|
||||||
|
.I directory
|
||||||
|
and the metadata will be written to it. The file will be the same
|
||||||
|
-size as the device and have the metadata written in the file at the
|
||||||
|
-same locate that it exists in the device. However the file will be "sparse" so
|
||||||
|
+size as the device and will have the metadata written at the
|
||||||
|
+same location as it exists in the device. However, the file will be "sparse" so
|
||||||
|
that only those blocks containing metadata will be allocated. The
|
||||||
|
total space used will be small.
|
||||||
|
|
||||||
|
-The file name used in the
|
||||||
|
+The filename used in the
|
||||||
|
.I directory
|
||||||
|
-will be the base name of the device. Further if any links appear in
|
||||||
|
+will be the base name of the device. Further, if any links appear in
|
||||||
|
.I /dev/disk/by-id
|
||||||
|
which point to the device, then hard links to the file will be created
|
||||||
|
in
|
||||||
|
@@ -2567,7 +2567,7 @@ and if the destination array has a failed drive but no spares.
|
||||||
|
|
||||||
|
If any devices are listed on the command line,
|
||||||
|
.I mdadm
|
||||||
|
-will only monitor those devices. Otherwise all arrays listed in the
|
||||||
|
+will only monitor those devices, otherwise, all arrays listed in the
|
||||||
|
configuration file will be monitored. Further, if
|
||||||
|
.B \-\-scan
|
||||||
|
is given, then any other md devices that appear in
|
||||||
|
@@ -2624,10 +2624,10 @@ check, repair). (syslog priority: Warning)
|
||||||
|
.BI Rebuild NN
|
||||||
|
Where
|
||||||
|
.I NN
|
||||||
|
-is a two-digit number (ie. 05, 48). This indicates that rebuild
|
||||||
|
-has passed that many percent of the total. The events are generated
|
||||||
|
-with fixed increment since 0. Increment size may be specified with
|
||||||
|
-a commandline option (default is 20). (syslog priority: Warning)
|
||||||
|
+is a two-digit number (eg. 05, 48). This indicates that the rebuild
|
||||||
|
+has reached that percentage of the total. The events are generated
|
||||||
|
+at a fixed increment from 0. The increment size may be specified with
|
||||||
|
+a command-line option (the default is 20). (syslog priority: Warning)
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B RebuildFinished
|
||||||
|
@@ -2735,8 +2735,8 @@ When
|
||||||
|
detects that an array in a spare group has fewer active
|
||||||
|
devices than necessary for the complete array, and has no spare
|
||||||
|
devices, it will look for another array in the same spare group that
|
||||||
|
-has a full complement of working drive and a spare. It will then
|
||||||
|
-attempt to remove the spare from the second drive and add it to the
|
||||||
|
+has a full complement of working drives and a spare. It will then
|
||||||
|
+attempt to remove the spare from the second array and add it to the
|
||||||
|
first.
|
||||||
|
If the removal succeeds but the adding fails, then it is added back to
|
||||||
|
the original array.
|
||||||
|
@@ -2750,10 +2750,8 @@ and then follow similar steps as above if a matching spare is found.
|
||||||
|
.SH GROW MODE
|
||||||
|
The GROW mode is used for changing the size or shape of an active
|
||||||
|
array.
|
||||||
|
-For this to work, the kernel must support the necessary change.
|
||||||
|
-Various types of growth are being added during 2.6 development.
|
||||||
|
|
||||||
|
-Currently the supported changes include
|
||||||
|
+During the kernel 2.6 era the following changes were added:
|
||||||
|
.IP \(bu 4
|
||||||
|
change the "size" attribute for RAID1, RAID4, RAID5 and RAID6.
|
||||||
|
.IP \(bu 4
|
||||||
|
@@ -2796,8 +2794,8 @@ use more than half of a spare device for backup space.
|
||||||
|
|
||||||
|
.SS SIZE CHANGES
|
||||||
|
Normally when an array is built the "size" is taken from the smallest
|
||||||
|
-of the drives. If all the small drives in an arrays are, one at a
|
||||||
|
-time, removed and replaced with larger drives, then you could have an
|
||||||
|
+of the drives. If all the small drives in an arrays are, over time,
|
||||||
|
+removed and replaced with larger drives, then you could have an
|
||||||
|
array of large drives with only a small amount used. In this
|
||||||
|
situation, changing the "size" with "GROW" mode will allow the extra
|
||||||
|
space to start being used. If the size is increased in this way, a
|
||||||
|
@@ -2812,7 +2810,7 @@ after growing, or to reduce its size
|
||||||
|
.B prior
|
||||||
|
to shrinking the array.
|
||||||
|
|
||||||
|
-Also the size of an array cannot be changed while it has an active
|
||||||
|
+Also, the size of an array cannot be changed while it has an active
|
||||||
|
bitmap. If an array has a bitmap, it must be removed before the size
|
||||||
|
can be changed. Once the change is complete a new bitmap can be created.
|
||||||
|
|
||||||
|
@@ -2892,7 +2890,7 @@ long time. A
|
||||||
|
is required. If the array is not simultaneously being grown or
|
||||||
|
shrunk, so that the array size will remain the same - for example,
|
||||||
|
reshaping a 3-drive RAID5 into a 4-drive RAID6 - the backup file will
|
||||||
|
-be used not just for a "cricital section" but throughout the reshape
|
||||||
|
+be used not just for a "critical section" but throughout the reshape
|
||||||
|
operation, as described below under LAYOUT CHANGES.
|
||||||
|
|
||||||
|
.SS CHUNK-SIZE AND LAYOUT CHANGES
|
||||||
|
@@ -2910,7 +2908,7 @@ slowly.
|
||||||
|
If the reshape is interrupted for any reason, this backup file must be
|
||||||
|
made available to
|
||||||
|
.B "mdadm --assemble"
|
||||||
|
-so the array can be reassembled. Consequently the file cannot be
|
||||||
|
+so the array can be reassembled. Consequently, the file cannot be
|
||||||
|
stored on the device being reshaped.
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
91
0055-Manage-Block-unsafe-member-failing.patch
Normal file
91
0055-Manage-Block-unsafe-member-failing.patch
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
From fc6fd4063769f4194c3fb8f77b32b2819e140fb9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mateusz Kusiak <mateusz.kusiak@intel.com>
|
||||||
|
Date: Thu, 18 Aug 2022 11:47:21 +0200
|
||||||
|
Subject: [PATCH 55/63] Manage: Block unsafe member failing
|
||||||
|
|
||||||
|
Kernel may or may not block mdadm from removing member device if it
|
||||||
|
will cause arrays failed state. It depends on raid personality
|
||||||
|
implementation in kernel.
|
||||||
|
Add verification on requested removal path (#mdadm --set-faulty
|
||||||
|
command).
|
||||||
|
|
||||||
|
Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com>
|
||||||
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||||
|
---
|
||||||
|
Manage.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
|
||||||
|
1 file changed, 52 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/Manage.c b/Manage.c
|
||||||
|
index a142f8bd..b1d0e630 100644
|
||||||
|
--- a/Manage.c
|
||||||
|
+++ b/Manage.c
|
||||||
|
@@ -1285,6 +1285,50 @@ int Manage_with(struct supertype *tst, int fd, struct mddev_dev *dv,
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * is_remove_safe() - Check if remove is safe.
|
||||||
|
+ * @array: Array info.
|
||||||
|
+ * @fd: Array file descriptor.
|
||||||
|
+ * @devname: Name of device to remove.
|
||||||
|
+ * @verbose: Verbose.
|
||||||
|
+ *
|
||||||
|
+ * The function determines if array will be operational
|
||||||
|
+ * after removing &devname.
|
||||||
|
+ *
|
||||||
|
+ * Return: True if array will be operational, false otherwise.
|
||||||
|
+ */
|
||||||
|
+bool is_remove_safe(mdu_array_info_t *array, const int fd, char *devname, const int verbose)
|
||||||
|
+{
|
||||||
|
+ dev_t devid = devnm2devid(devname + 5);
|
||||||
|
+ struct mdinfo *mdi = sysfs_read(fd, NULL, GET_DEVS | GET_DISKS | GET_STATE);
|
||||||
|
+
|
||||||
|
+ if (!mdi) {
|
||||||
|
+ if (verbose)
|
||||||
|
+ pr_err("Failed to read sysfs attributes for %s\n", devname);
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ char *avail = xcalloc(array->raid_disks, sizeof(char));
|
||||||
|
+
|
||||||
|
+ for (mdi = mdi->devs; mdi; mdi = mdi->next) {
|
||||||
|
+ if (mdi->disk.raid_disk < 0)
|
||||||
|
+ continue;
|
||||||
|
+ if (!(mdi->disk.state & (1 << MD_DISK_SYNC)))
|
||||||
|
+ continue;
|
||||||
|
+ if (makedev(mdi->disk.major, mdi->disk.minor) == devid)
|
||||||
|
+ continue;
|
||||||
|
+ avail[mdi->disk.raid_disk] = 1;
|
||||||
|
+ }
|
||||||
|
+ sysfs_free(mdi);
|
||||||
|
+
|
||||||
|
+ bool is_enough = enough(array->level, array->raid_disks,
|
||||||
|
+ array->layout, (array->state & 1),
|
||||||
|
+ avail);
|
||||||
|
+
|
||||||
|
+ free(avail);
|
||||||
|
+ return is_enough;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int Manage_subdevs(char *devname, int fd,
|
||||||
|
struct mddev_dev *devlist, int verbose, int test,
|
||||||
|
char *update, int force)
|
||||||
|
@@ -1598,7 +1642,14 @@ int Manage_subdevs(char *devname, int fd,
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'f': /* set faulty */
|
||||||
|
- /* FIXME check current member */
|
||||||
|
+ if (!is_remove_safe(&array, fd, dv->devname, verbose)) {
|
||||||
|
+ pr_err("Cannot remove %s from %s, array will be failed.\n",
|
||||||
|
+ dv->devname, devname);
|
||||||
|
+ if (sysfd >= 0)
|
||||||
|
+ close(sysfd);
|
||||||
|
+ goto abort;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if ((sysfd >= 0 && write(sysfd, "faulty", 6) != 6) ||
|
||||||
|
(sysfd < 0 && ioctl(fd, SET_DISK_FAULTY,
|
||||||
|
rdev))) {
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
112
0056-Monitor-Fix-statelist-memory-leaks.patch
Normal file
112
0056-Monitor-Fix-statelist-memory-leaks.patch
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
From 55c10e4de13abe3e6934895e1fff7d2d20d0b2c2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pawel Baldysiak <pawel.baldysiak@intel.com>
|
||||||
|
Date: Thu, 1 Sep 2022 11:20:31 +0200
|
||||||
|
Subject: [PATCH 56/63] Monitor: Fix statelist memory leaks
|
||||||
|
|
||||||
|
Free statelist in error path in Monitor initialization.
|
||||||
|
|
||||||
|
Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
|
||||||
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||||
|
---
|
||||||
|
Monitor.c | 40 +++++++++++++++++++++++++++++++---------
|
||||||
|
1 file changed, 31 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Monitor.c b/Monitor.c
|
||||||
|
index 93f36ac0..b4e954c6 100644
|
||||||
|
--- a/Monitor.c
|
||||||
|
+++ b/Monitor.c
|
||||||
|
@@ -74,6 +74,7 @@ static int add_new_arrays(struct mdstat_ent *mdstat, struct state **statelist,
|
||||||
|
int test, struct alert_info *info);
|
||||||
|
static void try_spare_migration(struct state *statelist, struct alert_info *info);
|
||||||
|
static void link_containers_with_subarrays(struct state *list);
|
||||||
|
+static void free_statelist(struct state *statelist);
|
||||||
|
#ifndef NO_LIBUDEV
|
||||||
|
static int check_udev_activity(void);
|
||||||
|
#endif
|
||||||
|
@@ -128,7 +129,6 @@ int Monitor(struct mddev_dev *devlist,
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct state *statelist = NULL;
|
||||||
|
- struct state *st2;
|
||||||
|
int finished = 0;
|
||||||
|
struct mdstat_ent *mdstat = NULL;
|
||||||
|
char *mailfrom;
|
||||||
|
@@ -185,12 +185,14 @@ int Monitor(struct mddev_dev *devlist,
|
||||||
|
continue;
|
||||||
|
if (strcasecmp(mdlist->devname, "<ignore>") == 0)
|
||||||
|
continue;
|
||||||
|
+ if (!is_mddev(mdlist->devname)) {
|
||||||
|
+ free_statelist(statelist);
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
st = xcalloc(1, sizeof *st);
|
||||||
|
snprintf(st->devname, MD_NAME_MAX + sizeof("/dev/md/"),
|
||||||
|
"/dev/md/%s", basename(mdlist->devname));
|
||||||
|
- if (!is_mddev(mdlist->devname))
|
||||||
|
- return 1;
|
||||||
|
st->next = statelist;
|
||||||
|
st->devnm[0] = 0;
|
||||||
|
st->percent = RESYNC_UNKNOWN;
|
||||||
|
@@ -206,8 +208,10 @@ int Monitor(struct mddev_dev *devlist,
|
||||||
|
for (dv = devlist; dv; dv = dv->next) {
|
||||||
|
struct state *st;
|
||||||
|
|
||||||
|
- if (!is_mddev(dv->devname))
|
||||||
|
+ if (!is_mddev(dv->devname)) {
|
||||||
|
+ free_statelist(statelist);
|
||||||
|
return 1;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
st = xcalloc(1, sizeof *st);
|
||||||
|
mdlist = conf_get_ident(dv->devname);
|
||||||
|
@@ -294,16 +298,16 @@ int Monitor(struct mddev_dev *devlist,
|
||||||
|
for (stp = &statelist; (st = *stp) != NULL; ) {
|
||||||
|
if (st->from_auto && st->err > 5) {
|
||||||
|
*stp = st->next;
|
||||||
|
- free(st->spare_group);
|
||||||
|
+ if (st->spare_group)
|
||||||
|
+ free(st->spare_group);
|
||||||
|
+
|
||||||
|
free(st);
|
||||||
|
} else
|
||||||
|
stp = &st->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- for (st2 = statelist; st2; st2 = statelist) {
|
||||||
|
- statelist = st2->next;
|
||||||
|
- free(st2);
|
||||||
|
- }
|
||||||
|
+
|
||||||
|
+ free_statelist(statelist);
|
||||||
|
|
||||||
|
if (pidfile)
|
||||||
|
unlink(pidfile);
|
||||||
|
@@ -1056,6 +1060,24 @@ static void link_containers_with_subarrays(struct state *list)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * free_statelist() - Frees statelist.
|
||||||
|
+ * @statelist: statelist to free
|
||||||
|
+ */
|
||||||
|
+static void free_statelist(struct state *statelist)
|
||||||
|
+{
|
||||||
|
+ struct state *tmp = NULL;
|
||||||
|
+
|
||||||
|
+ while (statelist) {
|
||||||
|
+ if (statelist->spare_group)
|
||||||
|
+ free(statelist->spare_group);
|
||||||
|
+
|
||||||
|
+ tmp = statelist;
|
||||||
|
+ statelist = statelist->next;
|
||||||
|
+ free(tmp);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
#ifndef NO_LIBUDEV
|
||||||
|
/* function: check_udev_activity
|
||||||
|
* Description: Function waits for udev to finish
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
@ -0,0 +1,64 @@
|
|||||||
|
From ea7a02a3294aae223e1329aed5da7f4aa3ac05c5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Old=C5=99ich=20Jedli=C4=8Dka?= <oldium.pro@gmail.com>
|
||||||
|
Date: Wed, 31 Aug 2022 19:57:29 +0200
|
||||||
|
Subject: [PATCH 57/63] mdadm: added support for Intel Alderlake RST on VMD
|
||||||
|
platform
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Alderlake RST on VMD uses RstVmdV UEFI variable name, so detect it.
|
||||||
|
|
||||||
|
Signed-off-by: Oldřich Jedlička <oldium.pro@gmail.com>
|
||||||
|
Reviewed-by: Kinga Tanska <kinga.tanska@linux.intel.com>
|
||||||
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||||
|
---
|
||||||
|
platform-intel.c | 18 +++++++++++++-----
|
||||||
|
1 file changed, 13 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/platform-intel.c b/platform-intel.c
|
||||||
|
index 5a8729e7..757f0b1b 100644
|
||||||
|
--- a/platform-intel.c
|
||||||
|
+++ b/platform-intel.c
|
||||||
|
@@ -512,7 +512,8 @@ static const struct imsm_orom *find_imsm_hba_orom(struct sys_dev *hba)
|
||||||
|
#define AHCI_PROP "RstSataV"
|
||||||
|
#define AHCI_SSATA_PROP "RstsSatV"
|
||||||
|
#define AHCI_TSATA_PROP "RsttSatV"
|
||||||
|
-#define VMD_PROP "RstUefiV"
|
||||||
|
+#define VROC_VMD_PROP "RstUefiV"
|
||||||
|
+#define RST_VMD_PROP "RstVmdV"
|
||||||
|
|
||||||
|
#define VENDOR_GUID \
|
||||||
|
EFI_GUID(0x193dfefa, 0xa445, 0x4302, 0x99, 0xd8, 0xef, 0x3a, 0xad, 0x1a, 0x04, 0xc6)
|
||||||
|
@@ -605,6 +606,7 @@ const struct imsm_orom *find_imsm_efi(struct sys_dev *hba)
|
||||||
|
struct orom_entry *ret;
|
||||||
|
static const char * const sata_efivars[] = {AHCI_PROP, AHCI_SSATA_PROP,
|
||||||
|
AHCI_TSATA_PROP};
|
||||||
|
+ static const char * const vmd_efivars[] = {VROC_VMD_PROP, RST_VMD_PROP};
|
||||||
|
unsigned long i;
|
||||||
|
|
||||||
|
if (check_env("IMSM_TEST_AHCI_EFI") || check_env("IMSM_TEST_SCU_EFI"))
|
||||||
|
@@ -636,10 +638,16 @@ const struct imsm_orom *find_imsm_efi(struct sys_dev *hba)
|
||||||
|
|
||||||
|
break;
|
||||||
|
case SYS_DEV_VMD:
|
||||||
|
- if (!read_efi_variable(&orom, sizeof(orom), VMD_PROP,
|
||||||
|
- VENDOR_GUID))
|
||||||
|
- break;
|
||||||
|
- return NULL;
|
||||||
|
+ for (i = 0; i < ARRAY_SIZE(vmd_efivars); i++) {
|
||||||
|
+ if (!read_efi_variable(&orom, sizeof(orom),
|
||||||
|
+ vmd_efivars[i], VENDOR_GUID))
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (i == ARRAY_SIZE(vmd_efivars))
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ break;
|
||||||
|
default:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
111
0058-mdadm-Add-Documentation-entries-to-systemd-services.patch
Normal file
111
0058-mdadm-Add-Documentation-entries-to-systemd-services.patch
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
From ea109700563d93704ebdc540c7770d874369f667 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Date: Fri, 9 Sep 2022 15:50:33 +0200
|
||||||
|
Subject: [PATCH 58/63] mdadm: Add Documentation entries to systemd services
|
||||||
|
|
||||||
|
Add documentation section.
|
||||||
|
Copied from Debian.
|
||||||
|
|
||||||
|
Cc: Felix Lechner <felix.lechner@lease-up.com>
|
||||||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Acked-by: Coly Li <colyli@suse.de>
|
||||||
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||||
|
---
|
||||||
|
systemd/mdadm-grow-continue@.service | 1 +
|
||||||
|
systemd/mdadm-last-resort@.service | 1 +
|
||||||
|
systemd/mdcheck_continue.service | 3 ++-
|
||||||
|
systemd/mdcheck_start.service | 1 +
|
||||||
|
systemd/mdmon@.service | 1 +
|
||||||
|
systemd/mdmonitor-oneshot.service | 1 +
|
||||||
|
systemd/mdmonitor.service | 1 +
|
||||||
|
7 files changed, 8 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/systemd/mdadm-grow-continue@.service b/systemd/mdadm-grow-continue@.service
|
||||||
|
index 9fdc8ec7..64b8254a 100644
|
||||||
|
--- a/systemd/mdadm-grow-continue@.service
|
||||||
|
+++ b/systemd/mdadm-grow-continue@.service
|
||||||
|
@@ -8,6 +8,7 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Manage MD Reshape on /dev/%I
|
||||||
|
DefaultDependencies=no
|
||||||
|
+Documentation=man:mdadm(8)
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=BINDIR/mdadm --grow --continue /dev/%I
|
||||||
|
diff --git a/systemd/mdadm-last-resort@.service b/systemd/mdadm-last-resort@.service
|
||||||
|
index efeb3f63..e9381125 100644
|
||||||
|
--- a/systemd/mdadm-last-resort@.service
|
||||||
|
+++ b/systemd/mdadm-last-resort@.service
|
||||||
|
@@ -2,6 +2,7 @@
|
||||||
|
Description=Activate md array %I even though degraded
|
||||||
|
DefaultDependencies=no
|
||||||
|
ConditionPathExists=!/sys/devices/virtual/block/%i/md/sync_action
|
||||||
|
+Documentation=man:mdadm(8)
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
diff --git a/systemd/mdcheck_continue.service b/systemd/mdcheck_continue.service
|
||||||
|
index 854317f1..f5324905 100644
|
||||||
|
--- a/systemd/mdcheck_continue.service
|
||||||
|
+++ b/systemd/mdcheck_continue.service
|
||||||
|
@@ -7,7 +7,8 @@
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=MD array scrubbing - continuation
|
||||||
|
-ConditionPathExistsGlob = /var/lib/mdcheck/MD_UUID_*
|
||||||
|
+ConditionPathExistsGlob=/var/lib/mdcheck/MD_UUID_*
|
||||||
|
+Documentation=man:mdadm(8)
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
diff --git a/systemd/mdcheck_start.service b/systemd/mdcheck_start.service
|
||||||
|
index 3bb3d130..703a6583 100644
|
||||||
|
--- a/systemd/mdcheck_start.service
|
||||||
|
+++ b/systemd/mdcheck_start.service
|
||||||
|
@@ -8,6 +8,7 @@
|
||||||
|
[Unit]
|
||||||
|
Description=MD array scrubbing
|
||||||
|
Wants=mdcheck_continue.timer
|
||||||
|
+Documentation=man:mdadm(8)
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
diff --git a/systemd/mdmon@.service b/systemd/mdmon@.service
|
||||||
|
index 77533958..97a1acd9 100644
|
||||||
|
--- a/systemd/mdmon@.service
|
||||||
|
+++ b/systemd/mdmon@.service
|
||||||
|
@@ -9,6 +9,7 @@
|
||||||
|
Description=MD Metadata Monitor on /dev/%I
|
||||||
|
DefaultDependencies=no
|
||||||
|
Before=initrd-switch-root.target
|
||||||
|
+Documentation=man:mdmon(8)
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
# mdmon should never complain due to lack of a platform,
|
||||||
|
diff --git a/systemd/mdmonitor-oneshot.service b/systemd/mdmonitor-oneshot.service
|
||||||
|
index 373955a2..ba86b44e 100644
|
||||||
|
--- a/systemd/mdmonitor-oneshot.service
|
||||||
|
+++ b/systemd/mdmonitor-oneshot.service
|
||||||
|
@@ -7,6 +7,7 @@
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Reminder for degraded MD arrays
|
||||||
|
+Documentation=man:mdadm(8)
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Environment=MDADM_MONITOR_ARGS=--scan
|
||||||
|
diff --git a/systemd/mdmonitor.service b/systemd/mdmonitor.service
|
||||||
|
index 46f7b880..9c364785 100644
|
||||||
|
--- a/systemd/mdmonitor.service
|
||||||
|
+++ b/systemd/mdmonitor.service
|
||||||
|
@@ -8,6 +8,7 @@
|
||||||
|
[Unit]
|
||||||
|
Description=MD array monitor
|
||||||
|
DefaultDependencies=no
|
||||||
|
+Documentation=man:mdadm(8)
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Environment= MDADM_MONITOR_ARGS=--scan
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
32
0059-ReadMe-fix-command-line-help.patch
Normal file
32
0059-ReadMe-fix-command-line-help.patch
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
From f7cbd810b639eb946ba1b3bddb1faefb9696de42 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Date: Fri, 9 Sep 2022 15:50:34 +0200
|
||||||
|
Subject: [PATCH 59/63] ReadMe: fix command-line help
|
||||||
|
|
||||||
|
Make command-line help consistent with manual page.
|
||||||
|
Copied from Debian.
|
||||||
|
|
||||||
|
Cc: Felix Lechner <felix.lechner@lease-up.com>
|
||||||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Acked-by: Coly Li <colyli@suse.de>
|
||||||
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||||
|
---
|
||||||
|
ReadMe.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/ReadMe.c b/ReadMe.c
|
||||||
|
index 7f94847e..50a5e36d 100644
|
||||||
|
--- a/ReadMe.c
|
||||||
|
+++ b/ReadMe.c
|
||||||
|
@@ -477,7 +477,7 @@ char Help_assemble[] =
|
||||||
|
;
|
||||||
|
|
||||||
|
char Help_manage[] =
|
||||||
|
-"Usage: mdadm arraydevice options component devices...\n"
|
||||||
|
+"Usage: mdadm [mode] arraydevice [options] <component devices...>\n"
|
||||||
|
"\n"
|
||||||
|
"This usage is for managing the component devices within an array.\n"
|
||||||
|
"The --manage option is not needed and is assumed if the first argument\n"
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
257
0060-mdadm-replace-container-level-checking-with-inline.patch
Normal file
257
0060-mdadm-replace-container-level-checking-with-inline.patch
Normal file
@ -0,0 +1,257 @@
|
|||||||
|
From 6f2af6a48c541f207cb727a31fb86de2cd04fc21 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kinga Tanska <kinga.tanska@intel.com>
|
||||||
|
Date: Fri, 2 Sep 2022 08:49:23 +0200
|
||||||
|
Subject: [PATCH 60/63] mdadm: replace container level checking with inline
|
||||||
|
|
||||||
|
To unify all containers checks in code, is_container() function is
|
||||||
|
added and propagated.
|
||||||
|
|
||||||
|
Signed-off-by: Kinga Tanska <kinga.tanska@intel.com>
|
||||||
|
Acked-by: Coly Li <colyli@suse.de>
|
||||||
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||||
|
---
|
||||||
|
Assemble.c | 7 +++----
|
||||||
|
Create.c | 6 +++---
|
||||||
|
Grow.c | 6 +++---
|
||||||
|
Incremental.c | 4 ++--
|
||||||
|
mdadm.h | 14 ++++++++++++++
|
||||||
|
super-ddf.c | 6 +++---
|
||||||
|
super-intel.c | 4 ++--
|
||||||
|
super0.c | 2 +-
|
||||||
|
super1.c | 2 +-
|
||||||
|
sysfs.c | 2 +-
|
||||||
|
10 files changed, 33 insertions(+), 20 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Assemble.c b/Assemble.c
|
||||||
|
index 1dd82a8c..8b0af0c9 100644
|
||||||
|
--- a/Assemble.c
|
||||||
|
+++ b/Assemble.c
|
||||||
|
@@ -1120,7 +1120,7 @@ static int start_array(int mdfd,
|
||||||
|
i/2, mddev);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (content->array.level == LEVEL_CONTAINER) {
|
||||||
|
+ if (is_container(content->array.level)) {
|
||||||
|
sysfs_rules_apply(mddev, content);
|
||||||
|
if (c->verbose >= 0) {
|
||||||
|
pr_err("Container %s has been assembled with %d drive%s",
|
||||||
|
@@ -1549,8 +1549,7 @@ try_again:
|
||||||
|
*/
|
||||||
|
trustworthy = LOCAL;
|
||||||
|
|
||||||
|
- if (name[0] == 0 &&
|
||||||
|
- content->array.level == LEVEL_CONTAINER) {
|
||||||
|
+ if (!name[0] && is_container(content->array.level)) {
|
||||||
|
name = content->text_version;
|
||||||
|
trustworthy = METADATA;
|
||||||
|
}
|
||||||
|
@@ -1809,7 +1808,7 @@ try_again:
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
- if (c->force && !clean && content->array.level != LEVEL_CONTAINER &&
|
||||||
|
+ if (c->force && !clean && !is_container(content->array.level) &&
|
||||||
|
!enough(content->array.level, content->array.raid_disks,
|
||||||
|
content->array.layout, clean, avail)) {
|
||||||
|
change += st->ss->update_super(st, content, "force-array",
|
||||||
|
diff --git a/Create.c b/Create.c
|
||||||
|
index e06ec2ae..953e7372 100644
|
||||||
|
--- a/Create.c
|
||||||
|
+++ b/Create.c
|
||||||
|
@@ -487,7 +487,7 @@ int Create(struct supertype *st, char *mddev,
|
||||||
|
st->minor_version >= 1)
|
||||||
|
/* metadata at front */
|
||||||
|
warn |= check_partitions(fd, dname, 0, 0);
|
||||||
|
- else if (s->level == 1 || s->level == LEVEL_CONTAINER ||
|
||||||
|
+ else if (s->level == 1 || is_container(s->level) ||
|
||||||
|
(s->level == 0 && s->raiddisks == 1))
|
||||||
|
/* partitions could be meaningful */
|
||||||
|
warn |= check_partitions(fd, dname, freesize*2, s->size*2);
|
||||||
|
@@ -997,7 +997,7 @@ int Create(struct supertype *st, char *mddev,
|
||||||
|
* again returns container info.
|
||||||
|
*/
|
||||||
|
st->ss->getinfo_super(st, &info_new, NULL);
|
||||||
|
- if (st->ss->external && s->level != LEVEL_CONTAINER &&
|
||||||
|
+ if (st->ss->external && !is_container(s->level) &&
|
||||||
|
!same_uuid(info_new.uuid, info.uuid, 0)) {
|
||||||
|
map_update(&map, fd2devnm(mdfd),
|
||||||
|
info_new.text_version,
|
||||||
|
@@ -1040,7 +1040,7 @@ int Create(struct supertype *st, char *mddev,
|
||||||
|
map_unlock(&map);
|
||||||
|
free(infos);
|
||||||
|
|
||||||
|
- if (s->level == LEVEL_CONTAINER) {
|
||||||
|
+ if (is_container(s->level)) {
|
||||||
|
/* No need to start. But we should signal udev to
|
||||||
|
* create links */
|
||||||
|
sysfs_uevent(&info, "change");
|
||||||
|
diff --git a/Grow.c b/Grow.c
|
||||||
|
index 0f07a894..e362403a 100644
|
||||||
|
--- a/Grow.c
|
||||||
|
+++ b/Grow.c
|
||||||
|
@@ -2175,7 +2175,7 @@ size_change_error:
|
||||||
|
devname, s->size);
|
||||||
|
}
|
||||||
|
changed = 1;
|
||||||
|
- } else if (array.level != LEVEL_CONTAINER) {
|
||||||
|
+ } else if (!is_container(array.level)) {
|
||||||
|
s->size = get_component_size(fd)/2;
|
||||||
|
if (s->size == 0)
|
||||||
|
s->size = array.size;
|
||||||
|
@@ -2231,7 +2231,7 @@ size_change_error:
|
||||||
|
info.component_size = s->size*2;
|
||||||
|
info.new_level = s->level;
|
||||||
|
info.new_chunk = s->chunk * 1024;
|
||||||
|
- if (info.array.level == LEVEL_CONTAINER) {
|
||||||
|
+ if (is_container(info.array.level)) {
|
||||||
|
info.delta_disks = UnSet;
|
||||||
|
info.array.raid_disks = s->raiddisks;
|
||||||
|
} else if (s->raiddisks)
|
||||||
|
@@ -2344,7 +2344,7 @@ size_change_error:
|
||||||
|
printf("layout for %s set to %d\n",
|
||||||
|
devname, array.layout);
|
||||||
|
}
|
||||||
|
- } else if (array.level == LEVEL_CONTAINER) {
|
||||||
|
+ } else if (is_container(array.level)) {
|
||||||
|
/* This change is to be applied to every array in the
|
||||||
|
* container. This is only needed when the metadata imposes
|
||||||
|
* restraints of the various arrays in the container.
|
||||||
|
diff --git a/Incremental.c b/Incremental.c
|
||||||
|
index 4d0cd9d6..5a5f4c4c 100644
|
||||||
|
--- a/Incremental.c
|
||||||
|
+++ b/Incremental.c
|
||||||
|
@@ -244,7 +244,7 @@ int Incremental(struct mddev_dev *devlist, struct context *c,
|
||||||
|
c->autof = ci->autof;
|
||||||
|
|
||||||
|
name_to_use = info.name;
|
||||||
|
- if (name_to_use[0] == 0 && info.array.level == LEVEL_CONTAINER) {
|
||||||
|
+ if (name_to_use[0] == 0 && is_container(info.array.level)) {
|
||||||
|
name_to_use = info.text_version;
|
||||||
|
trustworthy = METADATA;
|
||||||
|
}
|
||||||
|
@@ -472,7 +472,7 @@ int Incremental(struct mddev_dev *devlist, struct context *c,
|
||||||
|
|
||||||
|
/* 7/ Is there enough devices to possibly start the array? */
|
||||||
|
/* 7a/ if not, finish with success. */
|
||||||
|
- if (info.array.level == LEVEL_CONTAINER) {
|
||||||
|
+ if (is_container(info.array.level)) {
|
||||||
|
char devnm[32];
|
||||||
|
/* Try to assemble within the container */
|
||||||
|
sysfs_uevent(sra, "change");
|
||||||
|
diff --git a/mdadm.h b/mdadm.h
|
||||||
|
index 941a5f38..3673494e 100644
|
||||||
|
--- a/mdadm.h
|
||||||
|
+++ b/mdadm.h
|
||||||
|
@@ -1924,3 +1924,17 @@ enum r0layout {
|
||||||
|
* This is true for native and DDF, IMSM allows 16.
|
||||||
|
*/
|
||||||
|
#define MD_NAME_MAX 32
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * is_container() - check if @level is &LEVEL_CONTAINER
|
||||||
|
+ * @level: level value
|
||||||
|
+ *
|
||||||
|
+ * return:
|
||||||
|
+ * 1 if level is equal to &LEVEL_CONTAINER, 0 otherwise.
|
||||||
|
+ */
|
||||||
|
+static inline int is_container(const int level)
|
||||||
|
+{
|
||||||
|
+ if (level == LEVEL_CONTAINER)
|
||||||
|
+ return 1;
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
diff --git a/super-ddf.c b/super-ddf.c
|
||||||
|
index 949e7d15..9d1e3b94 100644
|
||||||
|
--- a/super-ddf.c
|
||||||
|
+++ b/super-ddf.c
|
||||||
|
@@ -3325,7 +3325,7 @@ validate_geometry_ddf_container(struct supertype *st,
|
||||||
|
int fd;
|
||||||
|
unsigned long long ldsize;
|
||||||
|
|
||||||
|
- if (level != LEVEL_CONTAINER)
|
||||||
|
+ if (!is_container(level))
|
||||||
|
return 0;
|
||||||
|
if (!dev)
|
||||||
|
return 1;
|
||||||
|
@@ -3371,7 +3371,7 @@ static int validate_geometry_ddf(struct supertype *st,
|
||||||
|
|
||||||
|
if (level == LEVEL_NONE)
|
||||||
|
level = LEVEL_CONTAINER;
|
||||||
|
- if (level == LEVEL_CONTAINER) {
|
||||||
|
+ if (is_container(level)) {
|
||||||
|
/* Must be a fresh device to add to a container */
|
||||||
|
return validate_geometry_ddf_container(st, level, raiddisks,
|
||||||
|
data_offset, dev,
|
||||||
|
@@ -3488,7 +3488,7 @@ static int validate_geometry_ddf_bvd(struct supertype *st,
|
||||||
|
struct dl *dl;
|
||||||
|
unsigned long long maxsize;
|
||||||
|
/* ddf/bvd supports lots of things, but not containers */
|
||||||
|
- if (level == LEVEL_CONTAINER) {
|
||||||
|
+ if (is_container(level)) {
|
||||||
|
if (verbose)
|
||||||
|
pr_err("DDF cannot create a container within an container\n");
|
||||||
|
return 0;
|
||||||
|
diff --git a/super-intel.c b/super-intel.c
|
||||||
|
index 4d82af3d..b0565610 100644
|
||||||
|
--- a/super-intel.c
|
||||||
|
+++ b/super-intel.c
|
||||||
|
@@ -6727,7 +6727,7 @@ static int validate_geometry_imsm_container(struct supertype *st, int level,
|
||||||
|
struct intel_super *super = NULL;
|
||||||
|
int rv = 0;
|
||||||
|
|
||||||
|
- if (level != LEVEL_CONTAINER)
|
||||||
|
+ if (!is_container(level))
|
||||||
|
return 0;
|
||||||
|
if (!dev)
|
||||||
|
return 1;
|
||||||
|
@@ -7692,7 +7692,7 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout,
|
||||||
|
* if given unused devices create a container
|
||||||
|
* if given given devices in a container create a member volume
|
||||||
|
*/
|
||||||
|
- if (level == LEVEL_CONTAINER)
|
||||||
|
+ if (is_container(level))
|
||||||
|
/* Must be a fresh device to add to a container */
|
||||||
|
return validate_geometry_imsm_container(st, level, raiddisks,
|
||||||
|
data_offset, dev,
|
||||||
|
diff --git a/super0.c b/super0.c
|
||||||
|
index 37f595ed..93876e2e 100644
|
||||||
|
--- a/super0.c
|
||||||
|
+++ b/super0.c
|
||||||
|
@@ -1273,7 +1273,7 @@ static int validate_geometry0(struct supertype *st, int level,
|
||||||
|
if (get_linux_version() < 3001000)
|
||||||
|
tbmax = 2;
|
||||||
|
|
||||||
|
- if (level == LEVEL_CONTAINER) {
|
||||||
|
+ if (is_container(level)) {
|
||||||
|
if (verbose)
|
||||||
|
pr_err("0.90 metadata does not support containers\n");
|
||||||
|
return 0;
|
||||||
|
diff --git a/super1.c b/super1.c
|
||||||
|
index 58345e68..0b505a7e 100644
|
||||||
|
--- a/super1.c
|
||||||
|
+++ b/super1.c
|
||||||
|
@@ -2830,7 +2830,7 @@ static int validate_geometry1(struct supertype *st, int level,
|
||||||
|
unsigned long long overhead;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
- if (level == LEVEL_CONTAINER) {
|
||||||
|
+ if (is_container(level)) {
|
||||||
|
if (verbose)
|
||||||
|
pr_err("1.x metadata does not support containers\n");
|
||||||
|
return 0;
|
||||||
|
diff --git a/sysfs.c b/sysfs.c
|
||||||
|
index 0d98a65f..ca1d888f 100644
|
||||||
|
--- a/sysfs.c
|
||||||
|
+++ b/sysfs.c
|
||||||
|
@@ -763,7 +763,7 @@ int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd, int resume)
|
||||||
|
|
||||||
|
rv = sysfs_set_num(sra, sd, "offset", sd->data_offset);
|
||||||
|
rv |= sysfs_set_num(sra, sd, "size", (sd->component_size+1) / 2);
|
||||||
|
- if (sra->array.level != LEVEL_CONTAINER) {
|
||||||
|
+ if (!is_container(sra->array.level)) {
|
||||||
|
if (sra->consistency_policy == CONSISTENCY_POLICY_PPL) {
|
||||||
|
rv |= sysfs_set_num(sra, sd, "ppl_sector", sd->ppl_sector);
|
||||||
|
rv |= sysfs_set_num(sra, sd, "ppl_size", sd->ppl_size);
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
58
0061-Mdmonitor-Omit-non-md-devices.patch
Normal file
58
0061-Mdmonitor-Omit-non-md-devices.patch
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
From 8b668d4aa3305af5963162b7499b128bd71f8f29 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lukasz Florczak <lukasz.florczak@linux.intel.com>
|
||||||
|
Date: Thu, 22 Sep 2022 08:29:50 +0200
|
||||||
|
Subject: [PATCH 61/63] Mdmonitor: Omit non-md devices
|
||||||
|
|
||||||
|
Fix segfault commit [1] introduced check whether given device is
|
||||||
|
mddevice, but it happend to terminate Mdmonitor if at least one of given
|
||||||
|
devices didn't fulfill that condition. In result Mdmonitor service was
|
||||||
|
no longer started on boot (with --scan option) when config contained some
|
||||||
|
non-existent array entry.
|
||||||
|
|
||||||
|
This commit introduces ommiting non-md devices so scan option can still
|
||||||
|
be used when config is wrong and allow Mdmonitor service to run on boot.
|
||||||
|
|
||||||
|
Giving a list of devices to monitor containing non-existing or
|
||||||
|
non-md devices will result in monitoring only confirmed mddevices.
|
||||||
|
|
||||||
|
[1] https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/commit/?id=e702f392959d1c2ad2089e595b52235ed97b4e18
|
||||||
|
|
||||||
|
Signed-off-by: Lukasz Florczak <lukasz.florczak@linux.intel.com>
|
||||||
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||||
|
---
|
||||||
|
Monitor.c | 12 ++++--------
|
||||||
|
1 file changed, 4 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Monitor.c b/Monitor.c
|
||||||
|
index b4e954c6..7d7dc4d2 100644
|
||||||
|
--- a/Monitor.c
|
||||||
|
+++ b/Monitor.c
|
||||||
|
@@ -185,10 +185,8 @@ int Monitor(struct mddev_dev *devlist,
|
||||||
|
continue;
|
||||||
|
if (strcasecmp(mdlist->devname, "<ignore>") == 0)
|
||||||
|
continue;
|
||||||
|
- if (!is_mddev(mdlist->devname)) {
|
||||||
|
- free_statelist(statelist);
|
||||||
|
- return 1;
|
||||||
|
- }
|
||||||
|
+ if (!is_mddev(mdlist->devname))
|
||||||
|
+ continue;
|
||||||
|
|
||||||
|
st = xcalloc(1, sizeof *st);
|
||||||
|
snprintf(st->devname, MD_NAME_MAX + sizeof("/dev/md/"),
|
||||||
|
@@ -208,10 +206,8 @@ int Monitor(struct mddev_dev *devlist,
|
||||||
|
for (dv = devlist; dv; dv = dv->next) {
|
||||||
|
struct state *st;
|
||||||
|
|
||||||
|
- if (!is_mddev(dv->devname)) {
|
||||||
|
- free_statelist(statelist);
|
||||||
|
- return 1;
|
||||||
|
- }
|
||||||
|
+ if (!is_mddev(dv->devname))
|
||||||
|
+ continue;
|
||||||
|
|
||||||
|
st = xcalloc(1, sizeof *st);
|
||||||
|
mdlist = conf_get_ident(dv->devname);
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
@ -0,0 +1,31 @@
|
|||||||
|
From 75f23f662fdfd6709be3d1d554d435cc0aa33443 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Logan Gunthorpe <logang@deltatee.com>
|
||||||
|
Date: Wed, 21 Sep 2022 14:43:50 -0600
|
||||||
|
Subject: [PATCH 62/63] Create: goto abort_locked instead of return 1 in error
|
||||||
|
path
|
||||||
|
|
||||||
|
The return 1 after the fstat_is_blkdev() check should be replaced
|
||||||
|
with an error return that goes through the error path to unlock
|
||||||
|
resources locked by this function.
|
||||||
|
|
||||||
|
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
|
||||||
|
---
|
||||||
|
Create.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/Create.c b/Create.c
|
||||||
|
index 953e7372..2e8203ec 100644
|
||||||
|
--- a/Create.c
|
||||||
|
+++ b/Create.c
|
||||||
|
@@ -939,7 +939,7 @@ int Create(struct supertype *st, char *mddev,
|
||||||
|
goto abort_locked;
|
||||||
|
}
|
||||||
|
if (!fstat_is_blkdev(fd, dv->devname, &rdev))
|
||||||
|
- return 1;
|
||||||
|
+ goto abort_locked;
|
||||||
|
inf->disk.major = major(rdev);
|
||||||
|
inf->disk.minor = minor(rdev);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
59
0063-Create-remove-safe_mode_delay-local-variable.patch
Normal file
59
0063-Create-remove-safe_mode_delay-local-variable.patch
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
From 249da94563dddb852ccb52164411ff99a6c90489 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Logan Gunthorpe <logang@deltatee.com>
|
||||||
|
Date: Wed, 21 Sep 2022 14:43:51 -0600
|
||||||
|
Subject: [PATCH 63/63] Create: remove safe_mode_delay local variable
|
||||||
|
|
||||||
|
All .getinfo_super() call sets the info.safe_mode_delay variables
|
||||||
|
to a constant value, so no matter what the current state is
|
||||||
|
that function will always set it to the same value.
|
||||||
|
|
||||||
|
Create() calls .getinfo_super() multiple times while creating the array.
|
||||||
|
The value is stored in a local variable for every disk in the loop
|
||||||
|
to add disks (so the last disc call takes precedence). The local
|
||||||
|
variable is then used in the call to sysfs_set_safemode().
|
||||||
|
|
||||||
|
This can be simplified by using info.safe_mode_delay directly. The info
|
||||||
|
variable had .getinfo_super() called on it early in the function so, by the
|
||||||
|
reasoning above, it will have the same value as the local variable which
|
||||||
|
can thus be removed.
|
||||||
|
|
||||||
|
Doing this allows for factoring out code from Create() in a subsequent
|
||||||
|
patch.
|
||||||
|
|
||||||
|
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
|
||||||
|
---
|
||||||
|
Create.c | 4 +---
|
||||||
|
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Create.c b/Create.c
|
||||||
|
index 2e8203ec..8ded81dc 100644
|
||||||
|
--- a/Create.c
|
||||||
|
+++ b/Create.c
|
||||||
|
@@ -137,7 +137,6 @@ int Create(struct supertype *st, char *mddev,
|
||||||
|
int did_default = 0;
|
||||||
|
int do_default_layout = 0;
|
||||||
|
int do_default_chunk = 0;
|
||||||
|
- unsigned long safe_mode_delay = 0;
|
||||||
|
char chosen_name[1024];
|
||||||
|
struct map_ent *map = NULL;
|
||||||
|
unsigned long long newsize;
|
||||||
|
@@ -952,7 +951,6 @@ int Create(struct supertype *st, char *mddev,
|
||||||
|
goto abort_locked;
|
||||||
|
}
|
||||||
|
st->ss->getinfo_super(st, inf, NULL);
|
||||||
|
- safe_mode_delay = inf->safe_mode_delay;
|
||||||
|
|
||||||
|
if (have_container && c->verbose > 0)
|
||||||
|
pr_err("Using %s for device %d\n",
|
||||||
|
@@ -1065,7 +1063,7 @@ int Create(struct supertype *st, char *mddev,
|
||||||
|
"readonly");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
- sysfs_set_safemode(&info, safe_mode_delay);
|
||||||
|
+ sysfs_set_safemode(&info, info.safe_mode_delay);
|
||||||
|
if (err) {
|
||||||
|
pr_err("failed to activate array.\n");
|
||||||
|
ioctl(mdfd, STOP_ARRAY, NULL);
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
@ -1,13 +0,0 @@
|
|||||||
--- mdadm-4.1_rc1/udev-md-raid-assembly.rules~ 2018-06-22 13:10:58.196250086 +0800
|
|
||||||
+++ mdadm-4.1_rc1/udev-md-raid-assembly.rules 2018-06-22 13:11:37.761241080 +0800
|
|
||||||
@@ -5,6 +5,10 @@
|
|
||||||
ENV{ANACONDA}=="?*", GOTO="md_inc_end"
|
|
||||||
# assemble md arrays
|
|
||||||
|
|
||||||
+# In Fedora we handle the raid components in 65-md-incremental.rules so that
|
|
||||||
+# we can do things like honor anaconda command line options and such
|
|
||||||
+GOTO="md_inc_end"
|
|
||||||
+
|
|
||||||
SUBSYSTEM!="block", GOTO="md_inc_end"
|
|
||||||
|
|
||||||
# skip non-initialized devices
|
|
26
mdadm-udev.patch
Normal file
26
mdadm-udev.patch
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
--- mdadm/udev-md-raid-assembly.rules.orig 2022-10-25 08:34:58.137936285 +0800
|
||||||
|
+++ mdadm/udev-md-raid-assembly.rules 2022-10-25 09:28:23.453154190 +0800
|
||||||
|
@@ -5,6 +5,9 @@
|
||||||
|
ENV{ANACONDA}=="?*", GOTO="md_inc_end"
|
||||||
|
# assemble md arrays
|
||||||
|
|
||||||
|
+# Also don't process disks that are slated to be a multipath device
|
||||||
|
+ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="md_inc_end"
|
||||||
|
+
|
||||||
|
SUBSYSTEM!="block", GOTO="md_inc_end"
|
||||||
|
|
||||||
|
# skip non-initialized devices
|
||||||
|
@@ -28,6 +31,13 @@
|
||||||
|
|
||||||
|
LABEL="md_inc"
|
||||||
|
|
||||||
|
+# Make sure we don't handle dm devices when some limits are set.
|
||||||
|
+# And linux_raid_member only be set when change/remove event happen.
|
||||||
|
+# So we don't need to consider add event here
|
||||||
|
+KERNEL=="dm-*", ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="md_inc_end"
|
||||||
|
+KERNEL=="dm-*", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="md_inc_end"
|
||||||
|
+KERNEL=="dm-*", ENV{DM_SUSPENDED}=="1", GOTO="md_inc_end"
|
||||||
|
+
|
||||||
|
# remember you can limit what gets auto/incrementally assembled by
|
||||||
|
# mdadm.conf(5)'s 'AUTO' and selectively whitelist using 'ARRAY'
|
||||||
|
ACTION!="remove", IMPORT{program}="BINDIR/mdadm --incremental --export $devnode --offroot $env{DEVLINKS}"
|
69
mdadm.rules
69
mdadm.rules
@ -1,69 +0,0 @@
|
|||||||
# This file causes block devices with Linux RAID (mdadm) signatures to
|
|
||||||
# automatically cause mdadm to be run.
|
|
||||||
# See udev(8) for syntax
|
|
||||||
|
|
||||||
# Don't process any events if anaconda is running as anaconda brings up
|
|
||||||
# raid devices manually
|
|
||||||
ENV{ANACONDA}=="?*", GOTO="md_end"
|
|
||||||
|
|
||||||
# Also don't process disks that are slated to be a multipath device
|
|
||||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="md_end"
|
|
||||||
|
|
||||||
# We process add events on block devices (since they are ready as soon as
|
|
||||||
# they are added to the system), but we must process change events as well
|
|
||||||
# on any dm devices (like LUKS partitions or LVM logical volumes) and on
|
|
||||||
# md devices because both of these first get added, then get brought live
|
|
||||||
# and trigger a change event. The reason we don't process change events
|
|
||||||
# on bare hard disks is because if you stop all arrays on a disk, then
|
|
||||||
# run fdisk on the disk to change the partitions, when fdisk exits it
|
|
||||||
# triggers a change event, and we want to wait until all the fdisks on
|
|
||||||
# all member disks are done before we do anything. Unfortunately, we have
|
|
||||||
# no way of knowing that, so we just have to let those arrays be brought
|
|
||||||
# up manually after fdisk has been run on all of the disks.
|
|
||||||
|
|
||||||
# First, process all add events (md and dm devices will not really do
|
|
||||||
# anything here, just regular disks, and this also won't get any imsm
|
|
||||||
# array members either)
|
|
||||||
SUBSYSTEM=="block", ACTION=="add", ENV{ID_FS_TYPE}=="linux_raid_member", \
|
|
||||||
IMPORT{program}="/sbin/mdadm -I $env{DEVNAME} --export $devnode --offroot $env{DEVLINKS}"
|
|
||||||
SUBSYSTEM=="block", ACTION=="add", ENV{ID_FS_TYPE}=="linux_raid_member", \
|
|
||||||
ENV{MD_STARTED}=="*unsafe*", ENV{MD_FOREIGN}=="no", ENV{SYSTEMD_WANTS}+="mdadm-last-resort@$env{MD_DEVICE}.timer"
|
|
||||||
SUBSYSTEM=="block", ACTION=="remove", ENV{ID_PATH}=="?*", \
|
|
||||||
ENV{ID_FS_TYPE}=="linux_raid_member", \
|
|
||||||
RUN+="/sbin/mdadm -If $name --path $env{ID_PATH}"
|
|
||||||
SUBSYSTEM=="block", ACTION=="remove", ENV{ID_PATH}!="?*", \
|
|
||||||
ENV{ID_FS_TYPE}=="linux_raid_member", \
|
|
||||||
RUN+="/sbin/mdadm -If $name"
|
|
||||||
|
|
||||||
# Next, check to make sure the BIOS raid stuff wasn't turned off via cmdline
|
|
||||||
IMPORT{cmdline}="noiswmd"
|
|
||||||
IMPORT{cmdline}="nodmraid"
|
|
||||||
ENV{noiswmd}=="?*", GOTO="md_imsm_inc_end"
|
|
||||||
ENV{nodmraid}=="?*", GOTO="md_imsm_inc_end"
|
|
||||||
SUBSYSTEM=="block", ACTION=="add", ENV{ID_FS_TYPE}=="isw_raid_member", \
|
|
||||||
RUN+="/sbin/mdadm -I $env{DEVNAME}"
|
|
||||||
SUBSYSTEM=="block", ACTION=="add", ENV{ID_FS_TYPE}=="ddf_raid_member", \
|
|
||||||
RUN+="/sbin/mdadm -I $env{DEVNAME}"
|
|
||||||
SUBSYSTEM=="block", ACTION=="remove", ENV{ID_PATH}=="?*", \
|
|
||||||
ENV{ID_FS_TYPE}=="isw_raid_member", \
|
|
||||||
RUN+="/sbin/mdadm -If $name --path $env{ID_PATH}"
|
|
||||||
SUBSYSTEM=="block", ACTION=="remove", ENV{ID_PATH}!="?*", \
|
|
||||||
ENV{ID_FS_TYPE}=="isw_raid_member", \
|
|
||||||
RUN+="/sbin/mdadm -If $name"
|
|
||||||
LABEL="md_imsm_inc_end"
|
|
||||||
|
|
||||||
# Next make sure that this isn't a dm device we should skip for some reason
|
|
||||||
ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="dm_change_end"
|
|
||||||
ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="dm_change_end"
|
|
||||||
ENV{DM_SUSPENDED}=="1", GOTO="dm_change_end"
|
|
||||||
KERNEL=="dm-*", SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="linux_raid_member", \
|
|
||||||
ACTION=="change", RUN+="/sbin/mdadm -I $env{DEVNAME}"
|
|
||||||
LABEL="dm_change_end"
|
|
||||||
|
|
||||||
# Finally catch any nested md raid arrays. If we brought up an md raid
|
|
||||||
# array that's part of another md raid array, it won't be ready to be used
|
|
||||||
# until the change event that occurs when it becomes live
|
|
||||||
KERNEL=="md*", SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="linux_raid_member", \
|
|
||||||
ACTION=="change", RUN+="/sbin/mdadm -I $env{DEVNAME}"
|
|
||||||
|
|
||||||
LABEL="md_end"
|
|
269
mdadm.spec
269
mdadm.spec
@ -2,76 +2,87 @@ Summary: The mdadm program controls Linux md devices (software RAID arrays)
|
|||||||
Name: mdadm
|
Name: mdadm
|
||||||
Version: 4.2
|
Version: 4.2
|
||||||
# extraversion is used to define rhel internal version
|
# extraversion is used to define rhel internal version
|
||||||
%define extraversion 5
|
%define extraversion 6
|
||||||
Release: %{extraversion}%{?dist}
|
Release: %{extraversion}%{?dist}
|
||||||
Source: http://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-%{version}%{?subversion:-%{subversion}}.tar.xz
|
Source: http://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-%{version}%{?subversion:-%{subversion}}.tar.xz
|
||||||
Source1: mdmonitor.init
|
Source1: mdmonitor.init
|
||||||
Source2: raid-check
|
Source2: raid-check
|
||||||
Source3: mdadm.rules
|
Source3: mdadm-raid-check-sysconfig
|
||||||
Source4: mdadm-raid-check-sysconfig
|
Source4: mdadm-cron
|
||||||
Source5: mdadm-cron
|
Source5: mdmonitor.service
|
||||||
Source6: mdmonitor.service
|
Source6: mdadm.conf
|
||||||
Source7: mdadm.conf
|
Source7: mdadm_event.conf
|
||||||
Source8: mdadm_event.conf
|
Source8: mdcheck
|
||||||
Source9: mdcheck
|
Source9: mdadm_env.sh
|
||||||
Source10: mdadm_env.sh
|
|
||||||
|
|
||||||
Patch000: disable-Werror.patch
|
Patch000: 0001-Unify-error-message.patch
|
||||||
Patch001: 0001-Unify-error-message.patch
|
Patch001: 0002-mdadm-Fix-double-free.patch
|
||||||
Patch002: 0002-mdadm-Fix-double-free.patch
|
Patch002: 0003-Grow_reshape-Add-r0-grow-size-error-message-and-upda.patch
|
||||||
Patch003: 0003-Grow_reshape-Add-r0-grow-size-error-message-and-upda.patch
|
Patch003: 0004-udev-adapt-rules-to-systemd-v247.patch
|
||||||
Patch004: 0004-udev-adapt-rules-to-systemd-v247.patch
|
Patch004: 0005-Replace-error-prone-signal-with-sigaction.patch
|
||||||
Patch005: 0005-Replace-error-prone-signal-with-sigaction.patch
|
Patch005: 0006-mdadm-Respect-config-file-location-in-man.patch
|
||||||
Patch006: 0006-mdadm-Respect-config-file-location-in-man.patch
|
Patch006: 0007-mdadm-Update-ReadMe.patch
|
||||||
Patch007: 0007-mdadm-Update-ReadMe.patch
|
Patch007: 0008-mdadm-Update-config-man-regarding-default-files-and-.patch
|
||||||
Patch008: 0008-mdadm-Update-config-man-regarding-default-files-and-.patch
|
Patch008: 0009-mdadm-Update-config-manual.patch
|
||||||
Patch009: 0009-mdadm-Update-config-manual.patch
|
Patch009: 0010-Create-Build-use-default_layout.patch
|
||||||
Patch010: 0010-Create-Build-use-default_layout.patch
|
Patch010: 0011-mdadm-add-map_num_s.patch
|
||||||
Patch011: 0011-mdadm-add-map_num_s.patch
|
# patch0012 is deleted because of needing KillMode=none
|
||||||
Patch012: 0013-mdmon-Stop-parsing-duplicate-options.patch
|
Patch011: 0013-mdmon-Stop-parsing-duplicate-options.patch
|
||||||
Patch013: 0014-Grow-block-n-on-external-volumes.patch
|
Patch012: 0014-Grow-block-n-on-external-volumes.patch
|
||||||
Patch014: 0015-Incremental-Fix-possible-memory-and-resource-leaks.patch
|
Patch013: 0015-Incremental-Fix-possible-memory-and-resource-leaks.patch
|
||||||
Patch015: 0016-Mdmonitor-Fix-segfault.patch
|
Patch014: 0016-Mdmonitor-Fix-segfault.patch
|
||||||
Patch016: 0017-Mdmonitor-Improve-logging-method.patch
|
Patch015: 0017-Mdmonitor-Improve-logging-method.patch
|
||||||
Patch017: 0018-Fix-possible-NULL-ptr-dereferences-and-memory-leaks.patch
|
Patch016: 0018-Fix-possible-NULL-ptr-dereferences-and-memory-leaks.patch
|
||||||
Patch018: 0019-imsm-Remove-possibility-for-get_imsm_dev-to-return-N.patch
|
Patch017: 0019-imsm-Remove-possibility-for-get_imsm_dev-to-return-N.patch
|
||||||
Patch019: 0020-Revert-mdadm-fix-coredump-of-mdadm-monitor-r.patch
|
Patch018: 0020-Revert-mdadm-fix-coredump-of-mdadm-monitor-r.patch
|
||||||
Patch020: 0021-util-replace-ioctl-use-with-function.patch
|
Patch019: 0021-util-replace-ioctl-use-with-function.patch
|
||||||
Patch021: 0022-mdadm-super1-restore-commit-45a87c2f31335-to-fix-clu.patch
|
Patch020: 0022-mdadm-super1-restore-commit-45a87c2f31335-to-fix-clu.patch
|
||||||
Patch022: 0023-imsm-introduce-get_disk_slot_in_dev.patch
|
Patch021: 0023-imsm-introduce-get_disk_slot_in_dev.patch
|
||||||
Patch023: 0024-imsm-use-same-slot-across-container.patch
|
Patch022: 0024-imsm-use-same-slot-across-container.patch
|
||||||
Patch024: 0025-imsm-block-changing-slots-during-creation.patch
|
Patch023: 0025-imsm-block-changing-slots-during-creation.patch
|
||||||
Patch025: 0026-mdadm-block-update-ppl-for-non-raid456-levels.patch
|
Patch024: 0026-mdadm-block-update-ppl-for-non-raid456-levels.patch
|
||||||
Patch026: 0027-mdadm-Fix-array-size-mismatch-after-grow.patch
|
Patch025: 0027-mdadm-Fix-array-size-mismatch-after-grow.patch
|
||||||
Patch027: 0028-mdadm-Remove-dead-code-in-imsm_fix_size_mismatch.patch
|
Patch026: 0028-mdadm-Remove-dead-code-in-imsm_fix_size_mismatch.patch
|
||||||
Patch028: 0029-Monitor-use-devname-as-char-array-instead-of-pointer.patch
|
Patch027: 0029-Monitor-use-devname-as-char-array-instead-of-pointer.patch
|
||||||
Patch029: 0030-Monitor-use-snprintf-to-fill-device-name.patch
|
Patch028: 0030-Monitor-use-snprintf-to-fill-device-name.patch
|
||||||
Patch030: 0031-Makefile-Don-t-build-static-build-with-everything-an.patch
|
Patch029: 0031-Makefile-Don-t-build-static-build-with-everything-an.patch
|
||||||
Patch031: 0032-DDF-Cleanup-validate_geometry_ddf_container.patch
|
Patch030: 0032-DDF-Cleanup-validate_geometry_ddf_container.patch
|
||||||
Patch032: 0033-DDF-Fix-NULL-pointer-dereference-in-validate_geometr.patch
|
Patch031: 0033-DDF-Fix-NULL-pointer-dereference-in-validate_geometr.patch
|
||||||
Patch033: 0034-mdadm-Grow-Fix-use-after-close-bug-by-closing-after-.patch
|
Patch032: 0034-mdadm-Grow-Fix-use-after-close-bug-by-closing-after-.patch
|
||||||
Patch034: 0035-monitor-Avoid-segfault-when-calling-NULL-get_bad_blo.patch
|
Patch033: 0035-monitor-Avoid-segfault-when-calling-NULL-get_bad_blo.patch
|
||||||
Patch035: 0036-mdadm-Fix-mdadm-r-remove-option-regression.patch
|
Patch034: 0036-mdadm-Fix-mdadm-r-remove-option-regression.patch
|
||||||
Patch036: 0037-mdadm-Fix-optional-write-behind-parameter.patch
|
Patch035: 0037-mdadm-Fix-optional-write-behind-parameter.patch
|
||||||
Patch037: 0038-tests-00raid0-add-a-test-that-validates-raid0-with-l.patch
|
Patch036: 0038-tests-00raid0-add-a-test-that-validates-raid0-with-l.patch
|
||||||
Patch038: 0039-tests-fix-raid0-tests-for-0.90-metadata.patch
|
Patch037: 0039-tests-fix-raid0-tests-for-0.90-metadata.patch
|
||||||
Patch039: 0040-tests-04update-metadata-avoid-passing-chunk-size-to-.patch
|
Patch038: 0040-tests-04update-metadata-avoid-passing-chunk-size-to-.patch
|
||||||
Patch040: 0041-tests-02lineargrow-clear-the-superblock-at-every-ite.patch
|
Patch039: 0041-tests-02lineargrow-clear-the-superblock-at-every-ite.patch
|
||||||
Patch041: 0042-mdadm-test-Add-a-mode-to-repeat-specified-tests.patch
|
Patch040: 0042-mdadm-test-Add-a-mode-to-repeat-specified-tests.patch
|
||||||
Patch042: 0043-mdadm-test-Mark-and-ignore-broken-test-failures.patch
|
Patch041: 0043-mdadm-test-Mark-and-ignore-broken-test-failures.patch
|
||||||
Patch043: 0044-tests-Add-broken-files-for-all-broken-tests.patch
|
Patch042: 0044-tests-Add-broken-files-for-all-broken-tests.patch
|
||||||
Patch044: 0045-mdadm-Replace-obsolete-usleep-with-nanosleep.patch
|
Patch043: 0045-mdadm-Replace-obsolete-usleep-with-nanosleep.patch
|
||||||
Patch045: 0046-tests-00readonly-Run-udevadm-settle-before-setting-r.patch
|
Patch044: 0046-tests-00readonly-Run-udevadm-settle-before-setting-r.patch
|
||||||
Patch046: 0047-tests-add-test-for-names.patch
|
Patch045: 0047-tests-add-test-for-names.patch
|
||||||
Patch047: 0048-mdadm-remove-symlink-option.patch
|
Patch046: 0048-mdadm-remove-symlink-option.patch
|
||||||
Patch048: 0049-mdadm-move-data_offset-to-struct-shape.patch
|
Patch047: 0049-mdadm-move-data_offset-to-struct-shape.patch
|
||||||
Patch049: 0050-mdadm-Don-t-open-md-device-for-CREATE-and-ASSEMBLE.patch
|
Patch048: 0050-mdadm-Don-t-open-md-device-for-CREATE-and-ASSEMBLE.patch
|
||||||
Patch050: 0051-Grow-Split-Grow_reshape-into-helper-function.patch
|
Patch049: 0051-Grow-Split-Grow_reshape-into-helper-function.patch
|
||||||
Patch051: 0052-Assemble-check-if-device-is-container-before-schedul.patch
|
Patch050: 0052-Assemble-check-if-device-is-container-before-schedul.patch
|
||||||
|
Patch051: 0053-super1-report-truncated-device.patch
|
||||||
|
Patch052: 0054-mdadm-Correct-typos-punctuation-and-grammar-in-man.patch
|
||||||
|
Patch053: 0055-Manage-Block-unsafe-member-failing.patch
|
||||||
|
Patch054: 0056-Monitor-Fix-statelist-memory-leaks.patch
|
||||||
|
Patch055: 0057-mdadm-added-support-for-Intel-Alderlake-RST-on-VMD-p.patch
|
||||||
|
Patch056: 0058-mdadm-Add-Documentation-entries-to-systemd-services.patch
|
||||||
|
Patch057: 0059-ReadMe-fix-command-line-help.patch
|
||||||
|
Patch058: 0060-mdadm-replace-container-level-checking-with-inline.patch
|
||||||
|
Patch059: 0061-Mdmonitor-Omit-non-md-devices.patch
|
||||||
|
Patch060: 0062-Create-goto-abort_locked-instead-of-return-1-in-erro.patch
|
||||||
|
Patch061: 0063-Create-remove-safe_mode_delay-local-variable.patch
|
||||||
|
|
||||||
# RHEL customization patches
|
# RHEL customization patches
|
||||||
Patch200: mdadm-3.3-udev.patch
|
Patch200: mdadm-udev.patch
|
||||||
Patch201: mdadm-2.5.2-static.patch
|
Patch201: mdadm-2.5.2-static.patch
|
||||||
|
Patch202: disable-Werror.patch
|
||||||
|
|
||||||
URL: http://www.kernel.org/pub/linux/utils/raid/mdadm/
|
URL: http://www.kernel.org/pub/linux/utils/raid/mdadm/
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
@ -98,62 +109,73 @@ file can be used to help with some common tasks.
|
|||||||
%prep
|
%prep
|
||||||
%setup -q -n %{name}-%{version}%{?subversion:_%{subversion}}
|
%setup -q -n %{name}-%{version}%{?subversion:_%{subversion}}
|
||||||
|
|
||||||
%patch000 -p1 -b .disable
|
%patch000 -p1 -b .0001
|
||||||
%patch001 -p1 -b .0001
|
%patch001 -p1 -b .0002
|
||||||
%patch002 -p1 -b .0002
|
%patch002 -p1 -b .0003
|
||||||
%patch003 -p1 -b .0003
|
%patch003 -p1 -b .0004
|
||||||
%patch004 -p1 -b .0004
|
%patch004 -p1 -b .0005
|
||||||
%patch005 -p1 -b .0005
|
%patch005 -p1 -b .0006
|
||||||
%patch006 -p1 -b .0006
|
%patch006 -p1 -b .0007
|
||||||
%patch007 -p1 -b .0007
|
%patch007 -p1 -b .0008
|
||||||
%patch008 -p1 -b .0008
|
%patch008 -p1 -b .0009
|
||||||
%patch009 -p1 -b .0009
|
%patch009 -p1 -b .0010
|
||||||
%patch010 -p1 -b .0010
|
%patch010 -p1 -b .0011
|
||||||
%patch011 -p1 -b .0011
|
%patch011 -p1 -b .0013
|
||||||
%patch012 -p1 -b .0013
|
%patch012 -p1 -b .0014
|
||||||
%patch013 -p1 -b .0014
|
%patch013 -p1 -b .0015
|
||||||
%patch014 -p1 -b .0015
|
%patch014 -p1 -b .0016
|
||||||
%patch015 -p1 -b .0016
|
%patch015 -p1 -b .0017
|
||||||
%patch016 -p1 -b .0017
|
%patch016 -p1 -b .0018
|
||||||
%patch017 -p1 -b .0018
|
%patch017 -p1 -b .0019
|
||||||
%patch018 -p1 -b .0019
|
%patch018 -p1 -b .0020
|
||||||
%patch019 -p1 -b .0020
|
%patch019 -p1 -b .0021
|
||||||
%patch020 -p1 -b .0021
|
%patch020 -p1 -b .0022
|
||||||
%patch021 -p1 -b .0022
|
%patch021 -p1 -b .0023
|
||||||
%patch022 -p1 -b .0023
|
%patch022 -p1 -b .0024
|
||||||
%patch023 -p1 -b .0024
|
%patch023 -p1 -b .0025
|
||||||
%patch024 -p1 -b .0025
|
%patch024 -p1 -b .0026
|
||||||
%patch025 -p1 -b .0026
|
%patch025 -p1 -b .0027
|
||||||
%patch026 -p1 -b .0027
|
%patch026 -p1 -b .0028
|
||||||
%patch027 -p1 -b .0028
|
%patch027 -p1 -b .0029
|
||||||
%patch028 -p1 -b .0029
|
%patch028 -p1 -b .0030
|
||||||
%patch029 -p1 -b .0030
|
%patch029 -p1 -b .0031
|
||||||
%patch030 -p1 -b .0031
|
%patch030 -p1 -b .0032
|
||||||
%patch031 -p1 -b .0032
|
%patch031 -p1 -b .0033
|
||||||
%patch032 -p1 -b .0033
|
%patch032 -p1 -b .0034
|
||||||
%patch033 -p1 -b .0034
|
%patch033 -p1 -b .0035
|
||||||
%patch034 -p1 -b .0035
|
%patch034 -p1 -b .0036
|
||||||
%patch035 -p1 -b .0036
|
%patch035 -p1 -b .0037
|
||||||
%patch036 -p1 -b .0037
|
%patch036 -p1 -b .0038
|
||||||
%patch037 -p1 -b .0038
|
%patch037 -p1 -b .0039
|
||||||
%patch038 -p1 -b .0039
|
%patch038 -p1 -b .0040
|
||||||
%patch039 -p1 -b .0040
|
%patch039 -p1 -b .0041
|
||||||
%patch040 -p1 -b .0041
|
%patch040 -p1 -b .0042
|
||||||
%patch041 -p1 -b .0042
|
%patch041 -p1 -b .0043
|
||||||
%patch042 -p1 -b .0043
|
%patch042 -p1 -b .0044
|
||||||
%patch043 -p1 -b .0044
|
%patch043 -p1 -b .0045
|
||||||
%patch044 -p1 -b .0045
|
%patch044 -p1 -b .0046
|
||||||
%patch045 -p1 -b .0046
|
%patch045 -p1 -b .0047
|
||||||
%patch046 -p1 -b .0047
|
%patch046 -p1 -b .0048
|
||||||
%patch047 -p1 -b .0048
|
%patch047 -p1 -b .0049
|
||||||
%patch048 -p1 -b .0049
|
%patch048 -p1 -b .0050
|
||||||
%patch049 -p1 -b .0050
|
%patch049 -p1 -b .0051
|
||||||
%patch050 -p1 -b .0051
|
%patch050 -p1 -b .0052
|
||||||
%patch051 -p1 -b .0052
|
%patch051 -p1 -b .0053
|
||||||
|
%patch052 -p1 -b .0054
|
||||||
|
%patch053 -p1 -b .0055
|
||||||
|
%patch054 -p1 -b .0056
|
||||||
|
%patch055 -p1 -b .0057
|
||||||
|
%patch056 -p1 -b .0058
|
||||||
|
%patch057 -p1 -b .0059
|
||||||
|
%patch058 -p1 -b .0060
|
||||||
|
%patch059 -p1 -b .0061
|
||||||
|
%patch060 -p1 -b .0062
|
||||||
|
%patch061 -p1 -b .0063
|
||||||
|
|
||||||
# RHEL customization patches
|
# RHEL customization patches
|
||||||
%patch200 -p1 -b .udev
|
%patch200 -p1 -b .udev
|
||||||
%patch201 -p1 -b .static
|
%patch201 -p1 -b .static
|
||||||
|
%patch202 -p1 -b .disable
|
||||||
|
|
||||||
%build
|
%build
|
||||||
make %{?_smp_mflags} CXFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_LD_FLAGS" SYSCONFDIR="%{_sysconfdir}" EXTRAVERSION="%{extraversion}" mdadm mdmon
|
make %{?_smp_mflags} CXFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_LD_FLAGS" SYSCONFDIR="%{_sysconfdir}" EXTRAVERSION="%{extraversion}" mdadm mdmon
|
||||||
@ -162,28 +184,27 @@ make %{?_smp_mflags} CXFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_LD_FLAGS" SYSCONFDIR
|
|||||||
rm -rf %{buildroot}
|
rm -rf %{buildroot}
|
||||||
make DESTDIR=%{buildroot} MANDIR=%{_mandir} BINDIR=%{_sbindir} SYSTEMD_DIR=%{_unitdir} install install-systemd
|
make DESTDIR=%{buildroot} MANDIR=%{_mandir} BINDIR=%{_sbindir} SYSTEMD_DIR=%{_unitdir} install install-systemd
|
||||||
install -Dp -m 755 %{SOURCE2} %{buildroot}%{_sbindir}/raid-check
|
install -Dp -m 755 %{SOURCE2} %{buildroot}%{_sbindir}/raid-check
|
||||||
install -Dp -m 644 %{SOURCE3} %{buildroot}%{_udevrulesdir}/65-md-incremental.rules
|
install -Dp -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/sysconfig/raid-check
|
||||||
install -Dp -m 644 %{SOURCE4} %{buildroot}%{_sysconfdir}/sysconfig/raid-check
|
install -Dp -m 644 %{SOURCE4} %{buildroot}%{_sysconfdir}/cron.d/raid-check
|
||||||
install -Dp -m 644 %{SOURCE5} %{buildroot}%{_sysconfdir}/cron.d/raid-check
|
|
||||||
mkdir -p -m 710 %{buildroot}/var/run/mdadm
|
mkdir -p -m 710 %{buildroot}/var/run/mdadm
|
||||||
mkdir -p -m 700 %{buildroot}/usr/share/mdadm
|
mkdir -p -m 700 %{buildroot}/usr/share/mdadm
|
||||||
mkdir -p -m 700 %{buildroot}/usr/lib/mdadm
|
mkdir -p -m 700 %{buildroot}/usr/lib/mdadm
|
||||||
install -Dp -m 755 %{SOURCE9} %{buildroot}/usr/share/mdadm/mdcheck
|
install -Dp -m 755 %{SOURCE8} %{buildroot}/usr/share/mdadm/mdcheck
|
||||||
install -Dp -m 755 %{SOURCE10} %{buildroot}/usr/lib/mdadm/mdadm_env.sh
|
install -Dp -m 755 %{SOURCE9} %{buildroot}/usr/lib/mdadm/mdadm_env.sh
|
||||||
|
|
||||||
# systemd
|
# systemd
|
||||||
mkdir -p %{buildroot}%{_unitdir}
|
mkdir -p %{buildroot}%{_unitdir}
|
||||||
install -m644 %{SOURCE6} %{buildroot}%{_unitdir}
|
install -m644 %{SOURCE5} %{buildroot}%{_unitdir}
|
||||||
|
|
||||||
# tmpfile
|
# tmpfile
|
||||||
mkdir -p %{buildroot}%{_tmpfilesdir}
|
mkdir -p %{buildroot}%{_tmpfilesdir}
|
||||||
install -m 0644 %{SOURCE7} %{buildroot}%{_tmpfilesdir}/%{name}.conf
|
install -m 0644 %{SOURCE6} %{buildroot}%{_tmpfilesdir}/%{name}.conf
|
||||||
mkdir -p %{buildroot}%{_localstatedir}/run/
|
mkdir -p %{buildroot}%{_localstatedir}/run/
|
||||||
install -d -m 0710 %{buildroot}%{_localstatedir}/run/%{name}/
|
install -d -m 0710 %{buildroot}%{_localstatedir}/run/%{name}/
|
||||||
|
|
||||||
# abrt
|
# abrt
|
||||||
mkdir -p %{buildroot}/etc/libreport/events.d
|
mkdir -p %{buildroot}/etc/libreport/events.d
|
||||||
install -m644 %{SOURCE8} %{buildroot}/etc/libreport/events.d
|
install -m644 %{SOURCE7} %{buildroot}/etc/libreport/events.d
|
||||||
|
|
||||||
%clean
|
%clean
|
||||||
rm -rf %{buildroot}
|
rm -rf %{buildroot}
|
||||||
@ -221,6 +242,10 @@ rm -rf %{buildroot}
|
|||||||
/usr/lib/mdadm/mdadm_env.sh
|
/usr/lib/mdadm/mdadm_env.sh
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Sep 8 2022 Xiao Ni <xni@redhat.com> - 4.2-6
|
||||||
|
- Keep udev rule close to upstream and update to latest upstream
|
||||||
|
- Resolves rhbz#1991596, rhbz#2129088, rhbz#2107150
|
||||||
|
|
||||||
* Thu Aug 25 2022 Xiao Ni <xni@redhat.com> - 4.2-5
|
* Thu Aug 25 2022 Xiao Ni <xni@redhat.com> - 4.2-5
|
||||||
- Update mdadm to latest upstream
|
- Update mdadm to latest upstream
|
||||||
- Resolves rhbz#2092326
|
- Resolves rhbz#2092326
|
||||||
|
Loading…
Reference in New Issue
Block a user