upgrade version to 4.2
This commit is contained in:
parent
2445ded0d2
commit
41edfb1913
@ -1,39 +0,0 @@
|
||||
From d164718cc46b5b2ca3096829f385c935c5d99776 Mon Sep 17 00:00:00 2001
|
||||
From: Gioh Kim <gi-oh.kim@profitbricks.com>
|
||||
Date: Tue, 6 Nov 2018 15:27:42 +0100
|
||||
Subject: [PATCH 01/27] Assemble: keep MD_DISK_FAILFAST and MD_DISK_WRITEMOSTLY
|
||||
flag
|
||||
|
||||
Before updating superblock of slave disks, desired_state value
|
||||
is set for the target state of the slave disks. But it forgets
|
||||
to check MD_DISK_FAILFAST and MD_DISK_WRITEMOSTLY flags. Then
|
||||
start_arrays() calls ADD_NEW_DISK ioctl-call and pass the state
|
||||
without MD_DISK_FAILFAST and MD_DISK_WRITEMOSTLY.
|
||||
|
||||
Currenlty it does not generate any problem because kernel does not
|
||||
care MD_DISK_FAILFAST or MD_DISK_WRITEMOSTLY flags.
|
||||
|
||||
Reviewed-by: NeilBrown <neilb@suse.com>
|
||||
Signed-off-by: Gioh Kim <gi-oh.kim@profitbricks.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
Assemble.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/Assemble.c b/Assemble.c
|
||||
index a79466c..f39c9e1 100644
|
||||
--- a/Assemble.c
|
||||
+++ b/Assemble.c
|
||||
@@ -1704,6 +1704,9 @@ try_again:
|
||||
else
|
||||
desired_state = (1<<MD_DISK_ACTIVE) | (1<<MD_DISK_SYNC);
|
||||
|
||||
+ desired_state |= devices[j].i.disk.state & ((1<<MD_DISK_FAILFAST) |
|
||||
+ (1<<MD_DISK_WRITEMOSTLY));
|
||||
+
|
||||
if (!devices[j].uptodate)
|
||||
continue;
|
||||
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
From 1cb13d072393b6f9ff51d678a2e5de8ada33c471 Mon Sep 17 00:00:00 2001
|
||||
From 08a99f11c2b507b5e6e5403461e2f53715be8ade Mon Sep 17 00:00:00 2001
|
||||
From: Zhiqiang Liu <liuzhiqiang26@huawei.com>
|
||||
Date: Mon, 29 Jun 2020 21:33:22 +0800
|
||||
Subject: [PATCH 27/27] mdadm: remove -Werror to fix
|
||||
Subject: [PATCH] mdadm: remove -Werror to fix
|
||||
[-Werror=address-of-packed-member] problem
|
||||
|
||||
gcc reports [-Werror=address-of-packed-member] error when building
|
||||
@ -14,12 +14,12 @@ Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 2767ac6..5e24cbd 100644
|
||||
index 2a51d81..ee5bdad 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -48,7 +48,7 @@ endif
|
||||
|
||||
CC ?= $(CROSS_COMPILE)gcc
|
||||
@@ -50,7 +50,7 @@ ifeq ($(origin CC),default)
|
||||
CC := $(CROSS_COMPILE)gcc
|
||||
endif
|
||||
CXFLAGS ?= -ggdb
|
||||
-CWFLAGS = -Wall -Werror -Wstrict-prototypes -Wextra -Wno-unused-parameter
|
||||
+CWFLAGS = -Wall -Wstrict-prototypes -Wextra -Wno-unused-parameter
|
||||
@ -27,5 +27,5 @@ index 2767ac6..5e24cbd 100644
|
||||
CWFLAGS += -Wp,-D_FORTIFY_SOURCE=2 -O3
|
||||
endif
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
2.33.0
|
||||
|
||||
@ -1,77 +0,0 @@
|
||||
From 3a5189df04c3bfa74e59014de1bf7b4d1acd2c10 Mon Sep 17 00:00:00 2001
|
||||
From: NeilBrown <neilb@suse.com>
|
||||
Date: Fri, 9 Nov 2018 17:12:33 +1100
|
||||
Subject: [PATCH 02/27] Document PART-POLICY lines
|
||||
|
||||
PART-POLICY has been accepted in mdadm.conf since the same
|
||||
time that POLICY was accepted, but it was never documented.
|
||||
So add the missing documentation.
|
||||
|
||||
Also fix a bug which would have stopped it from working if
|
||||
anyone had ever tried to use it.
|
||||
|
||||
Signed-off-by: NeilBrown <neilb@suse.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
mdadm.conf.5 | 24 +++++++++++++++++++++++-
|
||||
policy.c | 2 +-
|
||||
2 files changed, 24 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/mdadm.conf.5 b/mdadm.conf.5
|
||||
index 18512cb..47c962a 100644
|
||||
--- a/mdadm.conf.5
|
||||
+++ b/mdadm.conf.5
|
||||
@@ -501,7 +501,7 @@ To update hot plug configuration it is necessary to execute
|
||||
.B mdadm \-\-udev\-rules
|
||||
command after changing the config file
|
||||
|
||||
-Key words used in the
|
||||
+Keywords used in the
|
||||
.I POLICY
|
||||
line and supported values are:
|
||||
|
||||
@@ -565,6 +565,28 @@ be automatically added to that array (or it's container)
|
||||
as above and the disk will become a spare in remaining cases
|
||||
.RE
|
||||
|
||||
+.TP
|
||||
+.B PART-POLICY
|
||||
+This is similar to
|
||||
+.B POLICY
|
||||
+and accepts the same keyword assignments. It allows a consistent set
|
||||
+of policies to applied to each of the partitions of a device.
|
||||
+
|
||||
+A
|
||||
+.B PART-POLICY
|
||||
+line should set
|
||||
+.I type=disk
|
||||
+and identify the path to one or more disk devices. Each partition on
|
||||
+these disks will be treated according to the
|
||||
+.I action=
|
||||
+setting from this line. If a
|
||||
+.I domain
|
||||
+is set in the line, then the domain associated with each patition will
|
||||
+be based on the domain, but with
|
||||
+.RB \(dq -part N\(dq
|
||||
+appended, when N is the partition number for the partition that was
|
||||
+found.
|
||||
+
|
||||
.SH EXAMPLE
|
||||
DEVICE /dev/sd[bcdjkl]1
|
||||
.br
|
||||
diff --git a/policy.c b/policy.c
|
||||
index c0d18a7..258f393 100644
|
||||
--- a/policy.c
|
||||
+++ b/policy.c
|
||||
@@ -300,7 +300,7 @@ static int path_has_part(char *path, char **part)
|
||||
l--;
|
||||
if (l < 5 || strncmp(path+l-5, "-part", 5) != 0)
|
||||
return 0;
|
||||
- *part = path+l-4;
|
||||
+ *part = path+l-5;
|
||||
return 1;
|
||||
}
|
||||
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,34 +0,0 @@
|
||||
From 488555f211b2bae7f54670e6f3fc3aef14215f44 Mon Sep 17 00:00:00 2001
|
||||
From: NeilBrown <neilb@suse.com>
|
||||
Date: Thu, 6 Dec 2018 10:35:41 +1100
|
||||
Subject: [PATCH 03/27] Grow: avoid overflow in compute_backup_blocks()
|
||||
|
||||
With a chunk size of 16Meg and data drive count of 8,
|
||||
this calculate can easily overflow the 'int' type that
|
||||
is used for the multiplications.
|
||||
So force it to use "long" instead.
|
||||
|
||||
Reported-and-tested-by: Ed Spiridonov <edo.rus@gmail.com>
|
||||
Signed-off-by: NeilBrown <neilb@suse.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
Grow.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Grow.c b/Grow.c
|
||||
index 4436a4d..76f82c0 100644
|
||||
--- a/Grow.c
|
||||
+++ b/Grow.c
|
||||
@@ -1196,7 +1196,8 @@ unsigned long compute_backup_blocks(int nchunk, int ochunk,
|
||||
/* Find GCD */
|
||||
a = GCD(a, b);
|
||||
/* LCM == product / GCD */
|
||||
- blocks = (ochunk/512) * (nchunk/512) * odata * ndata / a;
|
||||
+ blocks = (unsigned long)(ochunk/512) * (unsigned long)(nchunk/512) *
|
||||
+ odata * ndata / a;
|
||||
|
||||
return blocks;
|
||||
}
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,30 +0,0 @@
|
||||
From a3afc5af0cdf29652c8350d03b6d7fbb28f4ccf9 Mon Sep 17 00:00:00 2001
|
||||
From: NeilBrown <neilb@suse.com>
|
||||
Date: Thu, 6 Dec 2018 10:36:28 +1100
|
||||
Subject: [PATCH 04/27] Grow: report correct new chunk size.
|
||||
|
||||
When using "--grow --chunk=" to change chunk
|
||||
size, the old chunksize is reported instead of the new.
|
||||
|
||||
Signed-off-by: NeilBrown <neilb@suse.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
Grow.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Grow.c b/Grow.c
|
||||
index 76f82c0..363b209 100644
|
||||
--- a/Grow.c
|
||||
+++ b/Grow.c
|
||||
@@ -3286,7 +3286,7 @@ static int reshape_array(char *container, int fd, char *devname,
|
||||
goto release;
|
||||
} else if (verbose >= 0)
|
||||
printf("chunk size for %s set to %d\n",
|
||||
- devname, array.chunk_size);
|
||||
+ devname, info->new_chunk);
|
||||
}
|
||||
unfreeze(st);
|
||||
return 0;
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,101 +0,0 @@
|
||||
From 73b33b805f386c1aee582b2579d82ae5cbbd0f98 Mon Sep 17 00:00:00 2001
|
||||
From: Dimitri John Ledkov <xnox@ubuntu.com>
|
||||
Date: Tue, 15 Jan 2019 19:08:37 +0000
|
||||
Subject: [PATCH 05/27] Fix spelling typos.
|
||||
|
||||
Signed-off-by: Dimitri John Ledkov <xnox@ubuntu.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
Assemble.c | 2 +-
|
||||
Create.c | 2 +-
|
||||
Grow.c | 6 +++---
|
||||
super-ddf.c | 2 +-
|
||||
super-intel.c | 2 +-
|
||||
5 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/Assemble.c b/Assemble.c
|
||||
index f39c9e1..3fa996f 100644
|
||||
--- a/Assemble.c
|
||||
+++ b/Assemble.c
|
||||
@@ -876,7 +876,7 @@ static int force_array(struct mdinfo *content,
|
||||
current_events = devices[chosen_drive].i.events;
|
||||
add_another:
|
||||
if (c->verbose >= 0)
|
||||
- pr_err("forcing event count in %s(%d) from %d upto %d\n",
|
||||
+ pr_err("forcing event count in %s(%d) from %d up to %d\n",
|
||||
devices[chosen_drive].devname,
|
||||
devices[chosen_drive].i.disk.raid_disk,
|
||||
(int)(devices[chosen_drive].i.events),
|
||||
diff --git a/Create.c b/Create.c
|
||||
index 04b1dfc..6f1b228 100644
|
||||
--- a/Create.c
|
||||
+++ b/Create.c
|
||||
@@ -823,7 +823,7 @@ int Create(struct supertype *st, char *mddev,
|
||||
}
|
||||
bitmap_fd = open(s->bitmap_file, O_RDWR);
|
||||
if (bitmap_fd < 0) {
|
||||
- pr_err("weird: %s cannot be openned\n",
|
||||
+ pr_err("weird: %s cannot be opened\n",
|
||||
s->bitmap_file);
|
||||
goto abort_locked;
|
||||
}
|
||||
diff --git a/Grow.c b/Grow.c
|
||||
index 363b209..6d32661 100644
|
||||
--- a/Grow.c
|
||||
+++ b/Grow.c
|
||||
@@ -446,7 +446,7 @@ int Grow_addbitmap(char *devname, int fd, struct context *c, struct shape *s)
|
||||
if (offset_setable) {
|
||||
st->ss->getinfo_super(st, mdi, NULL);
|
||||
if (sysfs_init(mdi, fd, NULL)) {
|
||||
- pr_err("failed to intialize sysfs.\n");
|
||||
+ pr_err("failed to initialize sysfs.\n");
|
||||
free(mdi);
|
||||
}
|
||||
rv = sysfs_set_num_signed(mdi, NULL, "bitmap/location",
|
||||
@@ -2178,7 +2178,7 @@ size_change_error:
|
||||
memset(&info, 0, sizeof(info));
|
||||
info.array = array;
|
||||
if (sysfs_init(&info, fd, NULL)) {
|
||||
- pr_err("failed to intialize sysfs.\n");
|
||||
+ pr_err("failed to initialize sysfs.\n");
|
||||
rv = 1;
|
||||
goto release;
|
||||
}
|
||||
@@ -2903,7 +2903,7 @@ static int impose_level(int fd, int level, char *devname, int verbose)
|
||||
struct mdinfo info;
|
||||
|
||||
if (sysfs_init(&info, fd, NULL)) {
|
||||
- pr_err("failed to intialize sysfs.\n");
|
||||
+ pr_err("failed to initialize sysfs.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
diff --git a/super-ddf.c b/super-ddf.c
|
||||
index 618542c..c095e8a 100644
|
||||
--- a/super-ddf.c
|
||||
+++ b/super-ddf.c
|
||||
@@ -1900,7 +1900,7 @@ static struct vd_config *find_vdcr(struct ddf_super *ddf, unsigned int inst,
|
||||
return conf;
|
||||
}
|
||||
bad:
|
||||
- pr_err("Could't find disk %d in array %u\n", n, inst);
|
||||
+ pr_err("Couldn't find disk %d in array %u\n", n, inst);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
diff --git a/super-intel.c b/super-intel.c
|
||||
index 6438987..401a3ea 100644
|
||||
--- a/super-intel.c
|
||||
+++ b/super-intel.c
|
||||
@@ -9956,7 +9956,7 @@ static void imsm_process_update(struct supertype *st,
|
||||
break;
|
||||
}
|
||||
default:
|
||||
- pr_err("error: unsuported process update type:(type: %d)\n", type);
|
||||
+ pr_err("error: unsupported process update type:(type: %d)\n", type);
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,46 +0,0 @@
|
||||
From 3f772cd2f7c81f7475b425f0128e97f2cc142490 Mon Sep 17 00:00:00 2001
|
||||
From: Coly Li <colyli@suse.de>
|
||||
Date: Tue, 12 Feb 2019 12:53:18 +0800
|
||||
Subject: [PATCH 06/27] Detail.c: do not skip first character when calling
|
||||
xstrdup in Detail()
|
||||
|
||||
'Commit b9c9bd9bacaa ("Detail: ensure --export names are acceptable as
|
||||
shell variables")' duplicates mdi->sys_name to sysdev string by,
|
||||
char *sysdev = xstrdup(mdi->sys_name + 1);
|
||||
which skips the first character of mdi->sys_name. Then when running
|
||||
mdadm --detail <md device> --export, the output looks like,
|
||||
MD_DEVICE_ev_sda2_ROLE=1
|
||||
MD_DEVICE_ev_sda2_DEV=/dev/sda2
|
||||
The first character of md device (between MD_DEVICE and _ROLE/_DEV)
|
||||
is dropped. The expected output should be,
|
||||
MD_DEVICE_dev_sda2_ROLE=1
|
||||
MD_DEVICE_dev_sda2_DEV=/dev/sda2
|
||||
|
||||
This patch removes the '+ 1' from calling xstrdup() in Detail(), which
|
||||
gets the dropped first character back.
|
||||
|
||||
Reported-by: Arvin Schnell <aschnell@suse.com>
|
||||
Fixes: b9c9bd9bacaa ("Detail: ensure --export names are acceptable as 4 shell variables")
|
||||
Signed-off-by: Coly Li <colyli@suse.de>
|
||||
Cc: NeilBrown <neilb@suse.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
Detail.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Detail.c b/Detail.c
|
||||
index b3e857a..20ea03a 100644
|
||||
--- a/Detail.c
|
||||
+++ b/Detail.c
|
||||
@@ -284,7 +284,7 @@ int Detail(char *dev, struct context *c)
|
||||
struct mdinfo *mdi;
|
||||
for (mdi = sra->devs; mdi; mdi = mdi->next) {
|
||||
char *path;
|
||||
- char *sysdev = xstrdup(mdi->sys_name + 1);
|
||||
+ char *sysdev = xstrdup(mdi->sys_name);
|
||||
char *cp;
|
||||
|
||||
path = map_dev(mdi->disk.major,
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,70 +0,0 @@
|
||||
From 896bd7389840921f586bb52d9d6b73a5cae13f52 Mon Sep 17 00:00:00 2001
|
||||
From: Corey Hickey <bugfood-c@fatooh.org>
|
||||
Date: Mon, 11 Feb 2019 17:18:38 -0800
|
||||
Subject: [PATCH 07/27] Fix reshape for decreasing data offset
|
||||
|
||||
...when not changing the number of disks.
|
||||
|
||||
This patch needs context to explain. These are the relevant parts of
|
||||
the original code (condensed and annotated):
|
||||
|
||||
if (dir > 0) {
|
||||
/* Increase data offset (reshape backwards) */
|
||||
if (data_offset < sd->data_offset + min) {
|
||||
pr_err("--data-offset too small on %s\n",
|
||||
dn);
|
||||
goto release;
|
||||
}
|
||||
} else {
|
||||
/* Decrease data offset (reshape forwards) */
|
||||
if (data_offset < sd->data_offset - min) {
|
||||
pr_err("--data-offset too small on %s\n",
|
||||
dn);
|
||||
goto release;
|
||||
}
|
||||
}
|
||||
|
||||
When this code is reached, mdadm has already decided on a reshape
|
||||
direction. When increasing the data offset, the reshape runs backwards
|
||||
(dir==1); when decreasing the data offset, the reshape runs forwards
|
||||
(dir==-1).
|
||||
|
||||
The conditional within the backwards reshape is correct: the requested
|
||||
offset must be larger than the old offset plus a minimum delta; thus the
|
||||
reshape has room to work.
|
||||
|
||||
For the forwards reshape, the requested offset needs to be smaller than
|
||||
the old offset minus a minimum delta; to do this correctly, the
|
||||
comparison must be reversed.
|
||||
|
||||
Also update the error message.
|
||||
|
||||
Note: I have tested this change on a RAID 5 on Linux 4.18.0 and verified
|
||||
that there were no errors from the kernel and that the device data
|
||||
remained intact. I do not know if there are considerations for different
|
||||
RAID levels.
|
||||
|
||||
Signed-off-by: Corey Hickey <bugfood-c@fatooh.org>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
Grow.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/Grow.c b/Grow.c
|
||||
index 6d32661..764374f 100644
|
||||
--- a/Grow.c
|
||||
+++ b/Grow.c
|
||||
@@ -2613,8 +2613,8 @@ static int set_new_data_offset(struct mdinfo *sra, struct supertype *st,
|
||||
goto release;
|
||||
}
|
||||
if (data_offset != INVALID_SECTORS &&
|
||||
- data_offset < sd->data_offset - min) {
|
||||
- pr_err("--data-offset too small on %s\n",
|
||||
+ data_offset > sd->data_offset - min) {
|
||||
+ pr_err("--data-offset too large on %s\n",
|
||||
dn);
|
||||
goto release;
|
||||
}
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,50 +0,0 @@
|
||||
From 195b937685f1076d9e418d01b77e3274dffb29dc Mon Sep 17 00:00:00 2001
|
||||
From: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
|
||||
Date: Fri, 22 Feb 2019 10:15:45 +0100
|
||||
Subject: [PATCH 08/27] mdmon: don't attempt to manage new arrays when
|
||||
terminating
|
||||
|
||||
When mdmon gets a SIGTERM, it stops managing arrays that are clean. If
|
||||
there is more that one array in the container and one of them is dirty
|
||||
and the clean one is still present in mdstat, mdmon will treat it as a
|
||||
new array and start managing it again. This leads to a cycle of
|
||||
remove_old() / manage_new() calls for the clean array, until the other
|
||||
one also becomes clean.
|
||||
|
||||
Prevent this by not calling manage_new() if sigterm is set. Also, remove
|
||||
a check for sigterm in manage_new() because the condition will never be
|
||||
true.
|
||||
|
||||
Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
managemon.c | 6 ++----
|
||||
1 file changed, 2 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/managemon.c b/managemon.c
|
||||
index 101231c..29b91ba 100644
|
||||
--- a/managemon.c
|
||||
+++ b/managemon.c
|
||||
@@ -727,9 +727,7 @@ static void manage_new(struct mdstat_ent *mdstat,
|
||||
dprintf("inst: %s action: %d state: %d\n", inst,
|
||||
new->action_fd, new->info.state_fd);
|
||||
|
||||
- if (sigterm)
|
||||
- new->info.safe_mode_delay = 1;
|
||||
- else if (mdi->safe_mode_delay >= 50)
|
||||
+ if (mdi->safe_mode_delay >= 50)
|
||||
/* Normal start, mdadm set this. */
|
||||
new->info.safe_mode_delay = mdi->safe_mode_delay;
|
||||
else
|
||||
@@ -803,7 +801,7 @@ void manage(struct mdstat_ent *mdstat, struct supertype *container)
|
||||
break;
|
||||
}
|
||||
}
|
||||
- if (a == NULL || !a->container)
|
||||
+ if ((a == NULL || !a->container) && !sigterm)
|
||||
manage_new(mdstat, container, a);
|
||||
}
|
||||
}
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,57 +0,0 @@
|
||||
From ba21bae7f771a7e1ac9b9eaa0e0357fa597447e8 Mon Sep 17 00:00:00 2001
|
||||
From: Pawel Baldysiak <pawel.baldysiak@intel.com>
|
||||
Date: Fri, 22 Feb 2019 13:30:27 +0100
|
||||
Subject: [PATCH 09/27] mdmon: wait for previous mdmon to exit during takeover
|
||||
|
||||
Since the patch c76242c5("mdmon: get safe mode delay file descriptor
|
||||
early"), safe_mode_dalay is set properly by initrd mdmon. But in some
|
||||
cases with filesystem traffic since the very start of the system, it
|
||||
might take a while to transit to clean state. Due to fact that new
|
||||
mdmon does not wait for the old one to exit - it might happen that the
|
||||
new one switches safe_mode_delay back to seconds, before old one exits.
|
||||
As the result two mdmons are running concurrently on same array.
|
||||
|
||||
Wait for the old mdmon to exit by pinging it with SIGUSR1 signal, just
|
||||
in case it is sleeping.
|
||||
|
||||
Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
mdmon.c | 14 +++++++++++---
|
||||
1 file changed, 11 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/mdmon.c b/mdmon.c
|
||||
index 0955fcc..ff985d2 100644
|
||||
--- a/mdmon.c
|
||||
+++ b/mdmon.c
|
||||
@@ -171,6 +171,7 @@ static void try_kill_monitor(pid_t pid, char *devname, int sock)
|
||||
int fd;
|
||||
int n;
|
||||
long fl;
|
||||
+ int rv;
|
||||
|
||||
/* first rule of survival... don't off yourself */
|
||||
if (pid == getpid())
|
||||
@@ -201,9 +202,16 @@ static void try_kill_monitor(pid_t pid, char *devname, int sock)
|
||||
fl &= ~O_NONBLOCK;
|
||||
fcntl(sock, F_SETFL, fl);
|
||||
n = read(sock, buf, 100);
|
||||
- /* Ignore result, it is just the wait that
|
||||
- * matters
|
||||
- */
|
||||
+
|
||||
+ /* If there is I/O going on it might took some time to get to
|
||||
+ * clean state. Wait for monitor to exit fully to avoid races.
|
||||
+ * Ping it with SIGUSR1 in case that it is sleeping */
|
||||
+ for (n = 0; n < 25; n++) {
|
||||
+ rv = kill(pid, SIGUSR1);
|
||||
+ if (rv < 0)
|
||||
+ break;
|
||||
+ usleep(200000);
|
||||
+ }
|
||||
}
|
||||
|
||||
void remove_pidfile(char *devname)
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,52 +0,0 @@
|
||||
From 428f76d7aa74c7980cf4dbda3714a25b0d4b48ee Mon Sep 17 00:00:00 2001
|
||||
From: Pawel Baldysiak <pawel.baldysiak@intel.com>
|
||||
Date: Fri, 22 Feb 2019 12:56:27 +0100
|
||||
Subject: [PATCH 10/27] Assemble: Fix starting array with initial reshape
|
||||
checkpoint
|
||||
|
||||
If array was stopped during reshape initialization,
|
||||
there might be a "0" checkpoint recorded in metadata.
|
||||
If array with such condition (reshape with position 0)
|
||||
is passed to kernel - it will refuse to start such array.
|
||||
|
||||
Treat such array as normal during assemble, Grow_continue() will
|
||||
reinitialize and start the reshape.
|
||||
|
||||
Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
Assemble.c | 18 ++++++++++++++++--
|
||||
1 file changed, 16 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/Assemble.c b/Assemble.c
|
||||
index 3fa996f..bcf6487 100644
|
||||
--- a/Assemble.c
|
||||
+++ b/Assemble.c
|
||||
@@ -2058,8 +2058,22 @@ int assemble_container_content(struct supertype *st, int mdfd,
|
||||
spare, &c->backup_file, c->verbose) == 1)
|
||||
return 1;
|
||||
|
||||
- err = sysfs_set_str(content, NULL,
|
||||
- "array_state", "readonly");
|
||||
+ if (content->reshape_progress == 0) {
|
||||
+ /* If reshape progress is 0 - we are assembling the
|
||||
+ * array that was stopped, before reshape has started.
|
||||
+ * Array needs to be started as active, Grow_continue()
|
||||
+ * will start the reshape.
|
||||
+ */
|
||||
+ sysfs_set_num(content, NULL, "reshape_position",
|
||||
+ MaxSector);
|
||||
+ err = sysfs_set_str(content, NULL,
|
||||
+ "array_state", "active");
|
||||
+ sysfs_set_num(content, NULL, "reshape_position", 0);
|
||||
+ } else {
|
||||
+ err = sysfs_set_str(content, NULL,
|
||||
+ "array_state", "readonly");
|
||||
+ }
|
||||
+
|
||||
if (err)
|
||||
return 1;
|
||||
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,59 +0,0 @@
|
||||
From 4e01454a7f340e09559f3c229f9a67381906119d Mon Sep 17 00:00:00 2001
|
||||
From: Corey Hickey <bugfood-c@fatooh.org>
|
||||
Date: Mon, 11 Feb 2019 17:42:27 -0800
|
||||
Subject: [PATCH 11/27] add missing units to --examine
|
||||
|
||||
Within the output of "mdadm --examine", there are three sizes reported
|
||||
on adjacent lines. For example:
|
||||
|
||||
$ sudo mdadm --examine /dev/md3
|
||||
[...]
|
||||
Avail Dev Size : 17580545024 (8383.06 GiB 9001.24 GB)
|
||||
Array Size : 17580417024 (16765.99 GiB 18002.35 GB)
|
||||
Used Dev Size : 11720278016 (5588.66 GiB 6000.78 GB)
|
||||
[...]
|
||||
|
||||
This can be confusing, since the first and third line are in 512-byte
|
||||
sectors, and the second is in KiB.
|
||||
|
||||
Add units to avoid ambiguity.
|
||||
|
||||
(I don't particularly like the "KiB" notation, but it is at least
|
||||
unambiguous.)
|
||||
|
||||
Signed-off-by: Corey Hickey <bugfood-c@fatooh.org>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
super1.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/super1.c b/super1.c
|
||||
index 636a286..b85dc20 100644
|
||||
--- a/super1.c
|
||||
+++ b/super1.c
|
||||
@@ -360,7 +360,7 @@ static void examine_super1(struct supertype *st, char *homehost)
|
||||
printf(" Raid Level : %s\n", c?c:"-unknown-");
|
||||
printf(" Raid Devices : %d\n", __le32_to_cpu(sb->raid_disks));
|
||||
printf("\n");
|
||||
- printf(" Avail Dev Size : %llu%s\n",
|
||||
+ printf(" Avail Dev Size : %llu sectors%s\n",
|
||||
(unsigned long long)__le64_to_cpu(sb->data_size),
|
||||
human_size(__le64_to_cpu(sb->data_size)<<9));
|
||||
if (__le32_to_cpu(sb->level) > 0) {
|
||||
@@ -378,11 +378,11 @@ static void examine_super1(struct supertype *st, char *homehost)
|
||||
if (ddsks) {
|
||||
long long asize = __le64_to_cpu(sb->size);
|
||||
asize = (asize << 9) * ddsks / ddsks_denom;
|
||||
- printf(" Array Size : %llu%s\n",
|
||||
+ printf(" Array Size : %llu KiB%s\n",
|
||||
asize >> 10, human_size(asize));
|
||||
}
|
||||
if (sb->size != sb->data_size)
|
||||
- printf(" Used Dev Size : %llu%s\n",
|
||||
+ printf(" Used Dev Size : %llu sectors%s\n",
|
||||
(unsigned long long)__le64_to_cpu(sb->size),
|
||||
human_size(__le64_to_cpu(sb->size)<<9));
|
||||
}
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,94 +0,0 @@
|
||||
From a03332b6f634b9c504a5bef920141fa63335aeb8 Mon Sep 17 00:00:00 2001
|
||||
From: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
|
||||
Date: Mon, 1 Apr 2019 16:53:41 +0200
|
||||
Subject: [PATCH 12/27] Create: Block rounding size to max
|
||||
|
||||
When passed size is smaller than chunk, mdadm rounds it to 0 but 0 there
|
||||
means max available space.
|
||||
Block it for every metadata. Remove the same check from imsm routine.
|
||||
|
||||
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
Create.c | 23 ++++++++++++++++++++---
|
||||
super-intel.c | 5 ++---
|
||||
2 files changed, 22 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/Create.c b/Create.c
|
||||
index 6f1b228..292f92a 100644
|
||||
--- a/Create.c
|
||||
+++ b/Create.c
|
||||
@@ -27,6 +27,18 @@
|
||||
#include "md_p.h"
|
||||
#include <ctype.h>
|
||||
|
||||
+static int round_size_and_verify(unsigned long long *size, int chunk)
|
||||
+{
|
||||
+ if (*size == 0)
|
||||
+ return 0;
|
||||
+ *size &= ~(unsigned long long)(chunk - 1);
|
||||
+ if (*size == 0) {
|
||||
+ pr_err("Size cannot be smaller than chunk.\n");
|
||||
+ return 1;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int default_layout(struct supertype *st, int level, int verbose)
|
||||
{
|
||||
int layout = UnSet;
|
||||
@@ -248,11 +260,14 @@ int Create(struct supertype *st, char *mddev,
|
||||
pr_err("unknown level %d\n", s->level);
|
||||
return 1;
|
||||
}
|
||||
+
|
||||
if (s->size == MAX_SIZE)
|
||||
/* use '0' to mean 'max' now... */
|
||||
s->size = 0;
|
||||
if (s->size && s->chunk && s->chunk != UnSet)
|
||||
- s->size &= ~(unsigned long long)(s->chunk - 1);
|
||||
+ if (round_size_and_verify(&s->size, s->chunk))
|
||||
+ return 1;
|
||||
+
|
||||
newsize = s->size * 2;
|
||||
if (st && ! st->ss->validate_geometry(st, s->level, s->layout, s->raiddisks,
|
||||
&s->chunk, s->size*2,
|
||||
@@ -267,7 +282,8 @@ int Create(struct supertype *st, char *mddev,
|
||||
/* default chunk was just set */
|
||||
if (c->verbose > 0)
|
||||
pr_err("chunk size defaults to %dK\n", s->chunk);
|
||||
- s->size &= ~(unsigned long long)(s->chunk - 1);
|
||||
+ if (round_size_and_verify(&s->size, s->chunk))
|
||||
+ return 1;
|
||||
do_default_chunk = 0;
|
||||
}
|
||||
}
|
||||
@@ -413,7 +429,8 @@ int Create(struct supertype *st, char *mddev,
|
||||
/* default chunk was just set */
|
||||
if (c->verbose > 0)
|
||||
pr_err("chunk size defaults to %dK\n", s->chunk);
|
||||
- s->size &= ~(unsigned long long)(s->chunk - 1);
|
||||
+ if (round_size_and_verify(&s->size, s->chunk))
|
||||
+ return 1;
|
||||
do_default_chunk = 0;
|
||||
}
|
||||
}
|
||||
diff --git a/super-intel.c b/super-intel.c
|
||||
index 401a3ea..5c3f9cb 100644
|
||||
--- a/super-intel.c
|
||||
+++ b/super-intel.c
|
||||
@@ -7385,9 +7385,8 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout,
|
||||
verbose);
|
||||
}
|
||||
|
||||
- if (size && ((size < 1024) || (*chunk != UnSet &&
|
||||
- size < (unsigned long long) *chunk))) {
|
||||
- pr_err("Given size must be greater than 1M and chunk size.\n");
|
||||
+ if (size && (size < 1024)) {
|
||||
+ pr_err("Given size must be greater than 1M.\n");
|
||||
/* Depends on algorithm in Create.c :
|
||||
* if container was given (dev == NULL) return -1,
|
||||
* if block device was given ( dev != NULL) return 0.
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,38 +0,0 @@
|
||||
From 5d494b2e4a4fc1208e56a78cfdc8bfb20c6ffa83 Mon Sep 17 00:00:00 2001
|
||||
From: Jes Sorensen <jsorensen@fb.com>
|
||||
Date: Tue, 9 Jul 2019 13:26:08 -0400
|
||||
Subject: [PATCH 13/27] super-intel: Fix issue with abs() being irrelevant
|
||||
|
||||
gcc9 complains about subtracting unsigned from unsigned and code
|
||||
assuming the result can be negative.
|
||||
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
super-intel.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/super-intel.c b/super-intel.c
|
||||
index 5c3f9cb..988883e 100644
|
||||
--- a/super-intel.c
|
||||
+++ b/super-intel.c
|
||||
@@ -2805,7 +2805,7 @@ static unsigned long long calc_component_size(struct imsm_map *map,
|
||||
{
|
||||
unsigned long long component_size;
|
||||
unsigned long long dev_size = imsm_dev_size(dev);
|
||||
- unsigned long long calc_dev_size = 0;
|
||||
+ long long calc_dev_size = 0;
|
||||
unsigned int member_disks = imsm_num_data_members(map);
|
||||
|
||||
if (member_disks == 0)
|
||||
@@ -2819,7 +2819,7 @@ static unsigned long long calc_component_size(struct imsm_map *map,
|
||||
* 2048 blocks per each device. If the difference is higher it means
|
||||
* that array size was expanded and num_data_stripes was not updated.
|
||||
*/
|
||||
- if ((unsigned int)abs(calc_dev_size - dev_size) >
|
||||
+ if (llabs(calc_dev_size - (long long)dev_size) >
|
||||
(1 << SECT_PER_MB_SHIFT) * member_disks) {
|
||||
component_size = dev_size / member_disks;
|
||||
dprintf("Invalid num_data_stripes in metadata; expected=%llu, found=%llu\n",
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,44 +0,0 @@
|
||||
From 055124106fe3c77db639fd7d315b099c5d52f517 Mon Sep 17 00:00:00 2001
|
||||
From: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
|
||||
Date: Mon, 15 Jul 2019 09:25:35 +0200
|
||||
Subject: [PATCH 14/27] imsm: close removed drive fd.
|
||||
|
||||
When member drive fails, managemon prepares metadata update and adds
|
||||
the drive to disk_mgmt_list with DISK_REMOVE flag. It fills only
|
||||
minor and major. It is enough to recognize the device later.
|
||||
|
||||
Monitor thread while processing this update will remove the drive from
|
||||
super only if it is a spare. It never removes failed member from
|
||||
disks list. As a result, it still keeps opened descriptor to
|
||||
non-existing device.
|
||||
|
||||
If removed drive is not a spare fill fd in disk_cfg structure
|
||||
(prepared by managemon), monitor will close fd during freeing it.
|
||||
|
||||
Also set this drive fd to -1 in super to avoid double closing because
|
||||
monitor will close the fd (if needed) while replacing removed drive
|
||||
in array.
|
||||
|
||||
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
super-intel.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/super-intel.c b/super-intel.c
|
||||
index 988883e..8b7709f 100644
|
||||
--- a/super-intel.c
|
||||
+++ b/super-intel.c
|
||||
@@ -9121,6 +9121,9 @@ static int add_remove_disk_update(struct intel_super *super)
|
||||
remove_disk_super(super,
|
||||
disk_cfg->major,
|
||||
disk_cfg->minor);
|
||||
+ } else {
|
||||
+ disk_cfg->fd = disk->fd;
|
||||
+ disk->fd = -1;
|
||||
}
|
||||
}
|
||||
/* release allocate disk structure */
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,40 +0,0 @@
|
||||
From dac0e65954e43bdf93a8cfccc73108c97d060254 Mon Sep 17 00:00:00 2001
|
||||
From: Nigel Croxon <ncroxon@redhat.com>
|
||||
Date: Tue, 24 Sep 2019 11:39:24 -0400
|
||||
Subject: [PATCH 15/27] mdadm: force a uuid swap on big endian
|
||||
|
||||
The code path for metadata 0.90 calls a common routine
|
||||
fname_from_uuid that uses metadata 1.2. The code expects member
|
||||
swapuuid to be setup and usable. But it is only setup when using
|
||||
metadata 1.2. Since the metadata 0.90 did not create swapuuid
|
||||
and set it. The test (st->ss == &super1) ? 1 : st->ss->swapuuid
|
||||
fails. The swapuuid is set at compile time based on byte order.
|
||||
Any call based on metadata 0.90 and on big endian processors,
|
||||
the --export uuid will be incorrect.
|
||||
|
||||
Signed-Off-by: Nigel Croxon <ncroxon@redhat.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
util.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/util.c b/util.c
|
||||
index c26cf5f..64dd409 100644
|
||||
--- a/util.c
|
||||
+++ b/util.c
|
||||
@@ -685,8 +685,12 @@ char *fname_from_uuid(struct supertype *st, struct mdinfo *info,
|
||||
// work, but can't have it set if we want this printout to match
|
||||
// all the other uuid printouts in super1.c, so we force swapuuid
|
||||
// to 1 to make our printout match the rest of super1
|
||||
+#if __BYTE_ORDER == BIG_ENDIAN
|
||||
+ return __fname_from_uuid(info->uuid, 1, buf, sep);
|
||||
+#else
|
||||
return __fname_from_uuid(info->uuid, (st->ss == &super1) ? 1 :
|
||||
st->ss->swapuuid, buf, sep);
|
||||
+#endif
|
||||
}
|
||||
|
||||
int check_ext2(int fd, char *name)
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,35 +0,0 @@
|
||||
From 13a018075abb72609288d865565ac4f8be34a335 Mon Sep 17 00:00:00 2001
|
||||
From: Xiao Ni <xni@redhat.com>
|
||||
Date: Mon, 30 Sep 2019 19:47:59 +0800
|
||||
Subject: [PATCH 16/27] Init devlist as an array
|
||||
|
||||
devlist is an string. It will change to an array if there is disk that
|
||||
is sbd disk. If one device is sbd, it runs devlist=().
|
||||
This line code changes devlist from a string to an array. If there is
|
||||
no sbd device, it can't run this line code. So it will still be a string.
|
||||
The later codes need an array, rather than an string. So init devlist
|
||||
as an array to fix this problem.
|
||||
|
||||
Signed-off-by: Xiao Ni <xni@redhat.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
clustermd_tests/func.sh | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/clustermd_tests/func.sh b/clustermd_tests/func.sh
|
||||
index 642cc96..801d604 100644
|
||||
--- a/clustermd_tests/func.sh
|
||||
+++ b/clustermd_tests/func.sh
|
||||
@@ -39,6 +39,9 @@ fetch_devlist()
|
||||
devlist=($(ls /dev/disk/by-path/*$ISCSI_ID*))
|
||||
fi
|
||||
# sbd disk cannot use in testing
|
||||
+ # Init devlist as an array
|
||||
+ i=''
|
||||
+ devlist=(${devlist[@]#$i})
|
||||
for i in ${devlist[@]}
|
||||
do
|
||||
sbd -d $i dump &> /dev/null
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,31 +0,0 @@
|
||||
From 3bf7f0b83339a8b76983bbc9b806f4dffa890092 Mon Sep 17 00:00:00 2001
|
||||
From: Xiao Ni <xni@redhat.com>
|
||||
Date: Mon, 30 Sep 2019 19:48:00 +0800
|
||||
Subject: [PATCH 17/27] Don't need to check recovery after re-add when no I/O
|
||||
writes to raid
|
||||
|
||||
If there is no write I/O between removing member disk and re-add it, there is no
|
||||
recovery after re-adding member disk.
|
||||
|
||||
Signed-off-by: Xiao Ni <xni@redhat.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
clustermd_tests/02r1_Manage_re-add | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/clustermd_tests/02r1_Manage_re-add b/clustermd_tests/02r1_Manage_re-add
|
||||
index dd9c416..d0d13e5 100644
|
||||
--- a/clustermd_tests/02r1_Manage_re-add
|
||||
+++ b/clustermd_tests/02r1_Manage_re-add
|
||||
@@ -9,8 +9,6 @@ check all state UU
|
||||
check all dmesg
|
||||
mdadm --manage $md0 --fail $dev0 --remove $dev0
|
||||
mdadm --manage $md0 --re-add $dev0
|
||||
-check $NODE1 recovery
|
||||
-check all wait
|
||||
check all state UU
|
||||
check all dmesg
|
||||
stop_md all $md0
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,52 +0,0 @@
|
||||
From 5983db9ecae579c1acd7a32e785ecfda5a659f9f Mon Sep 17 00:00:00 2001
|
||||
From: Xiao Yang <ice_yangxiao@163.com>
|
||||
Date: Wed, 27 Nov 2019 11:59:24 +0800
|
||||
Subject: [PATCH 18/27] Manage: Remove the legacy code for md driver prior to
|
||||
0.90.03
|
||||
|
||||
Previous re-add operation only calls ioctl(HOT_ADD_DISK) for array without
|
||||
metadata(e.g. mdadm -B/--build) when md driver is less than 0.90.02, but
|
||||
commit 091e8e6 breaks the logic and current re-add operation can call
|
||||
ioctl(HOT_ADD_DISK) even if md driver is 0.90.03.
|
||||
|
||||
This issue is reproduced by 05r1-re-add-nosuper:
|
||||
------------------------------------------------
|
||||
++ die 'resync or recovery is happening!'
|
||||
++ echo -e '\n\tERROR: resync or recovery is happening! \n'
|
||||
ERROR: resync or recovery is happening!
|
||||
------------------------------------------------
|
||||
|
||||
Fixes: 091e8e6("Manage: Remove all references to md_get_version()")
|
||||
Reported-by: kernel test robot <lkp@intel.com>
|
||||
Signed-off-by: Xiao Yang <ice_yangxiao@163.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
Manage.c | 12 ------------
|
||||
1 file changed, 12 deletions(-)
|
||||
|
||||
diff --git a/Manage.c b/Manage.c
|
||||
index 21536f5..ffe55f8 100644
|
||||
--- a/Manage.c
|
||||
+++ b/Manage.c
|
||||
@@ -741,18 +741,6 @@ int Manage_add(int fd, int tfd, struct mddev_dev *dv,
|
||||
" Adding anyway as --force was given.\n",
|
||||
dv->devname, devname);
|
||||
}
|
||||
- if (!tst->ss->external && array->major_version == 0) {
|
||||
- if (ioctl(fd, HOT_ADD_DISK, rdev)==0) {
|
||||
- if (verbose >= 0)
|
||||
- pr_err("hot added %s\n",
|
||||
- dv->devname);
|
||||
- return 1;
|
||||
- }
|
||||
-
|
||||
- pr_err("hot add failed for %s: %s\n",
|
||||
- dv->devname, strerror(errno));
|
||||
- return -1;
|
||||
- }
|
||||
|
||||
if (array->not_persistent == 0 || tst->ss->external) {
|
||||
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,32 +0,0 @@
|
||||
From fd91a74b58cecc99872a17883289b12e8cd1f163 Mon Sep 17 00:00:00 2001
|
||||
From: Blazej Kucman <blazej.kucman@intel.com>
|
||||
Date: Wed, 11 Mar 2020 15:40:13 +0100
|
||||
Subject: [PATCH 19/27] imsm: Correct minimal device size.
|
||||
|
||||
Check if given size of member drive is not less than 1 MibiByte.
|
||||
|
||||
Signed-off-by: Blazej Kucman <blazej.kucman@intel.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
super-intel.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/super-intel.c b/super-intel.c
|
||||
index 8b7709f..5da99d5 100644
|
||||
--- a/super-intel.c
|
||||
+++ b/super-intel.c
|
||||
@@ -7385,7 +7385,10 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout,
|
||||
verbose);
|
||||
}
|
||||
|
||||
- if (size && (size < 1024)) {
|
||||
+ /*
|
||||
+ * Size is given in sectors.
|
||||
+ */
|
||||
+ if (size && (size < 2048)) {
|
||||
pr_err("Given size must be greater than 1M.\n");
|
||||
/* Depends on algorithm in Create.c :
|
||||
* if container was given (dev == NULL) return -1,
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,30 +0,0 @@
|
||||
From d4f8d99b03fb4f3da105e7f3e52d712a0dea45b7 Mon Sep 17 00:00:00 2001
|
||||
From: Lidong Zhong <lidong.zhong@suse.com>
|
||||
Date: Mon, 16 Mar 2020 10:16:49 +0800
|
||||
Subject: [PATCH 20/27] Detail: show correct bitmap info for cluster raid
|
||||
device
|
||||
|
||||
Signed-off-by: Lidong Zhong <lidong.zhong@suse.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
Detail.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Detail.c b/Detail.c
|
||||
index 20ea03a..dadcafe 100644
|
||||
--- a/Detail.c
|
||||
+++ b/Detail.c
|
||||
@@ -467,7 +467,9 @@ int Detail(char *dev, struct context *c)
|
||||
if (ioctl(fd, GET_BITMAP_FILE, &bmf) == 0 && bmf.pathname[0]) {
|
||||
printf(" Intent Bitmap : %s\n", bmf.pathname);
|
||||
printf("\n");
|
||||
- } else if (array.state & (1<<MD_SB_BITMAP_PRESENT))
|
||||
+ } else if (array.state & (1<<MD_SB_CLUSTERED))
|
||||
+ printf(" Intent Bitmap : Internal(Clustered)\n\n");
|
||||
+ else if (array.state & (1<<MD_SB_BITMAP_PRESENT))
|
||||
printf(" Intent Bitmap : Internal\n\n");
|
||||
atime = array.utime;
|
||||
if (atime)
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,57 +0,0 @@
|
||||
From 0efef9d4c7dae39d01b173bb8aedddd50fc93e49 Mon Sep 17 00:00:00 2001
|
||||
From: Gioh Kim <gi-oh.kim@cloud.ionos.com>
|
||||
Date: Tue, 16 Apr 2019 18:08:17 +0200
|
||||
Subject: [PATCH 21/27] Assemble: print error message if mdadm fails assembling
|
||||
with --uuid option
|
||||
|
||||
When mdadm tries to assemble one working device and one zeroed-out device,
|
||||
it failed but print successful message because there is --uuid option.
|
||||
|
||||
Following script always reproduce it.
|
||||
|
||||
dd if=/dev/zero of=/dev/ram0 oflag=direct
|
||||
dd if=/dev/zero of=/dev/ram1 oflag=direct
|
||||
./mdadm -C /dev/md111 -e 1.2 --uuid="12345678:12345678:12345678:12345678" \
|
||||
-l1 -n2 /dev/ram0 /dev/ram1
|
||||
./mdadm -S /dev/md111
|
||||
dd if=/dev/zero of=/dev/ram1 oflag=direct
|
||||
./mdadm -A /dev/md111 --uuid="12345678:12345678:12345678:12345678" \
|
||||
/dev/ram0 /dev/ram1
|
||||
|
||||
Following is message from mdadm.
|
||||
|
||||
mdadm: No super block found on /dev/ram1 (Expected magic a92b4efc, got 00000000)
|
||||
mdadm: no RAID superblock on /dev/ram1
|
||||
mdadm: /dev/md111 assembled from 1 drive - need all 2 to start it (use --run to insist).
|
||||
|
||||
The mdadm say that it assembled but mdadm does not create /dev/md111.
|
||||
The message is wrong.
|
||||
|
||||
After applying this patch, mdadm reports error correctly as following.
|
||||
|
||||
mdadm: No super block found on /dev/ram1 (Expected magic a92b4efc, got 00000000)
|
||||
mdadm: no RAID superblock on /dev/ram1
|
||||
mdadm: /dev/ram1 has no superblock - assembly aborted
|
||||
|
||||
Signed-off-by: Gioh Kim <gi-oh.kim@cloud.ionos.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
Assemble.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Assemble.c b/Assemble.c
|
||||
index bcf6487..f302deb 100644
|
||||
--- a/Assemble.c
|
||||
+++ b/Assemble.c
|
||||
@@ -269,7 +269,7 @@ static int select_devices(struct mddev_dev *devlist,
|
||||
if (auto_assem || !inargv)
|
||||
/* Ignore unrecognised devices during auto-assembly */
|
||||
goto loop;
|
||||
- if (ident->uuid_set || ident->name[0] ||
|
||||
+ if (ident->name[0] ||
|
||||
ident->super_minor != UnSet)
|
||||
/* Ignore unrecognised device if looking for
|
||||
* specific array */
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,34 +0,0 @@
|
||||
From d62151dfb6ec7f9ede978097421eeba82928710f Mon Sep 17 00:00:00 2001
|
||||
From: Jes Sorensen <jsorensen@fb.com>
|
||||
Date: Mon, 18 May 2020 20:19:53 -0400
|
||||
Subject: [PATCH 22/27] Include count for \0 character when using strncpy to
|
||||
implement strdup.
|
||||
|
||||
We have to include the \0 character in the length when copying a
|
||||
string with strncpy() for which length was found with strlen().
|
||||
Otherwise the destination will not get null terminated - except that
|
||||
we explicitly zeroed it out earlier.
|
||||
|
||||
This quiets down the compiler's warnings.
|
||||
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
dlink.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlink.c b/dlink.c
|
||||
index 3efa94b..69aa7aa 100644
|
||||
--- a/dlink.c
|
||||
+++ b/dlink.c
|
||||
@@ -63,7 +63,7 @@ char *dl_strndup(char *s, int l)
|
||||
if (s == NULL)
|
||||
return NULL;
|
||||
n = dl_newv(char, l+1);
|
||||
- strncpy(n, s, l);
|
||||
+ strncpy(n, s, l+1);
|
||||
n[l] = 0;
|
||||
return n;
|
||||
}
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,53 +0,0 @@
|
||||
From 0a0051cb0e573d76a1ebd99d4ac0932fc45460d3 Mon Sep 17 00:00:00 2001
|
||||
From: Guoqing Jiang <guoqing.jiang@cloud.ionos.com>
|
||||
Date: Mon, 18 May 2020 23:53:36 +0200
|
||||
Subject: [PATCH 23/27] =?UTF-8?q?restripe:=20fix=20ignoring=20return=20val?=
|
||||
=?UTF-8?q?ue=20of=20=E2=80=98read=E2=80=99=20and=20lseek?=
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Got below error when run "make everything".
|
||||
|
||||
restripe.c: In function ‘test_stripes’:
|
||||
restripe.c:870:4: error: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Werror=unused-result]
|
||||
read(source[i], stripes[i], chunk_size);
|
||||
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Fix it by check the return value of ‘read’, and free memory
|
||||
in the failure case.
|
||||
|
||||
And check the return value of lseek as well per Jes's comment.
|
||||
|
||||
Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
restripe.c | 12 ++++++++++--
|
||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/restripe.c b/restripe.c
|
||||
index 31b07e8..86e1d00 100644
|
||||
--- a/restripe.c
|
||||
+++ b/restripe.c
|
||||
@@ -866,8 +866,16 @@ int test_stripes(int *source, unsigned long long *offsets,
|
||||
int disk;
|
||||
|
||||
for (i = 0 ; i < raid_disks ; i++) {
|
||||
- lseek64(source[i], offsets[i]+start, 0);
|
||||
- read(source[i], stripes[i], chunk_size);
|
||||
+ if ((lseek64(source[i], offsets[i]+start, 0) < 0) ||
|
||||
+ (read(source[i], stripes[i], chunk_size) !=
|
||||
+ chunk_size)) {
|
||||
+ free(q);
|
||||
+ free(p);
|
||||
+ free(blocks);
|
||||
+ free(stripes);
|
||||
+ free(stripe_buf);
|
||||
+ return -1;
|
||||
+ }
|
||||
}
|
||||
for (i = 0 ; i < data_disks ; i++) {
|
||||
int disk = geo_map(i, start/chunk_size, raid_disks,
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,32 +0,0 @@
|
||||
From 5d11bd766ee17d3b9a7d96e184704723c11a99d1 Mon Sep 17 00:00:00 2001
|
||||
From: Kinga Tanska <kinga.tanska@intel.com>
|
||||
Date: Fri, 29 May 2020 08:31:36 +0200
|
||||
Subject: [PATCH 24/27] Block overwriting existing links while manual assembly
|
||||
|
||||
Manual assembly with existing link caused overwriting
|
||||
this link. Add checking link and block this situation.
|
||||
|
||||
Signed-off-by: Kinga Tanska <kinga.tanska@intel.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
Assemble.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/Assemble.c b/Assemble.c
|
||||
index f302deb..914c193 100644
|
||||
--- a/Assemble.c
|
||||
+++ b/Assemble.c
|
||||
@@ -1467,6 +1467,10 @@ try_again:
|
||||
name = content->name;
|
||||
break;
|
||||
}
|
||||
+ if (mddev && map_by_name(&map, mddev) != NULL) {
|
||||
+ pr_err("Cannot create device with %s because is in use\n", mddev);
|
||||
+ goto out;
|
||||
+ }
|
||||
if (!auto_assem)
|
||||
/* If the array is listed in mdadm.conf or on
|
||||
* command line, then we trust the name
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,76 +0,0 @@
|
||||
From bcc3a5ea9c631645b792f151e1beb9a4b1a4e34e Mon Sep 17 00:00:00 2001
|
||||
From: David Favro <dfavro@meta-dynamic.com>
|
||||
Date: Sat, 23 May 2020 08:24:59 -0400
|
||||
Subject: [PATCH 25/27] Detect too-small device: error rather than
|
||||
underflow/crash
|
||||
|
||||
For 1.x metadata, when the user requested creation of an array on
|
||||
component devices that were too small even to hold the superblock,
|
||||
an undetected integer wraparound (underflow) resulted in an enormous
|
||||
computed size which resulted in various follow-on errors such as
|
||||
floating-point exception.
|
||||
|
||||
This patch detects this condition, prints a reasonable diagnostic
|
||||
message, and refuses to continue.
|
||||
|
||||
Signed-off-by: David Favro <dfavro@meta-dynamic.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
super1.c | 19 ++++++++++++++-----
|
||||
1 file changed, 14 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/super1.c b/super1.c
|
||||
index b85dc20..06bc145 100644
|
||||
--- a/super1.c
|
||||
+++ b/super1.c
|
||||
@@ -2715,6 +2715,7 @@ static int validate_geometry1(struct supertype *st, int level,
|
||||
unsigned long long ldsize, devsize;
|
||||
int bmspace;
|
||||
unsigned long long headroom;
|
||||
+ unsigned long long overhead;
|
||||
int fd;
|
||||
|
||||
if (level == LEVEL_CONTAINER) {
|
||||
@@ -2747,10 +2748,6 @@ static int validate_geometry1(struct supertype *st, int level,
|
||||
close(fd);
|
||||
|
||||
devsize = ldsize >> 9;
|
||||
- if (devsize < 24) {
|
||||
- *freesize = 0;
|
||||
- return 0;
|
||||
- }
|
||||
|
||||
/* creating: allow suitable space for bitmap or PPL */
|
||||
if (consistency_policy == CONSISTENCY_POLICY_PPL)
|
||||
@@ -2791,15 +2788,27 @@ static int validate_geometry1(struct supertype *st, int level,
|
||||
case 0: /* metadata at end. Round down and subtract space to reserve */
|
||||
devsize = (devsize & ~(4ULL*2-1));
|
||||
/* space for metadata, bblog, bitmap/ppl */
|
||||
- devsize -= 8*2 + 8 + bmspace;
|
||||
+ overhead = 8*2 + 8 + bmspace;
|
||||
+ if (devsize < overhead) /* detect underflow */
|
||||
+ goto dev_too_small_err;
|
||||
+ devsize -= overhead;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
+ if (devsize < data_offset) /* detect underflow */
|
||||
+ goto dev_too_small_err;
|
||||
devsize -= data_offset;
|
||||
break;
|
||||
}
|
||||
*freesize = devsize;
|
||||
return 1;
|
||||
+
|
||||
+/* Error condition, device cannot even hold the overhead. */
|
||||
+dev_too_small_err:
|
||||
+ fprintf(stderr, "device %s is too small (%lluK) for "
|
||||
+ "required metadata!\n", subdev, devsize>>1);
|
||||
+ *freesize = 0;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
void *super1_make_v0(struct supertype *st, struct mdinfo *info, mdp_super_t *sb0)
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,64 +0,0 @@
|
||||
From 17ee1b8ebaf51b117e17578f48ffb1ad293ff117 Mon Sep 17 00:00:00 2001
|
||||
From: allenpeng <allenpeng@synology.com>
|
||||
Date: Fri, 12 Jun 2020 17:00:39 +0800
|
||||
Subject: [PATCH 26/27] mdadm/Grow: prevent md's fd from being occupied during
|
||||
delayed time
|
||||
|
||||
If we start reshaping on md which shares sub-devices with another
|
||||
resyncing md, it may be forced to wait for others to complete. mdadm
|
||||
occupies the md's fd during this time, which causes the md can not be
|
||||
stopped and the filesystem can not be mounted on the md. We can close
|
||||
md's fd earlier to solve this problem.
|
||||
|
||||
Reproducible Steps:
|
||||
|
||||
1. create two partitions on sda, sdb, sdc, sdd
|
||||
2. create raid1 with sda1, sdb1
|
||||
mdadm -C /dev/md1 --assume-clean -l1 -n2 /dev/sda1 /dev/sdb1
|
||||
3. create raid5 with sda2, sdb2, sdc2
|
||||
mdadm -C /dev/md2 --assume-clean -l5 -n3 /dev/sda2 /dev/sdb2 /dev/sdc2
|
||||
4. start resync at md1
|
||||
echo repair > /sys/block/md1/md/sync_action
|
||||
5. reshape raid5 to raid6
|
||||
mdadm -a /dev/md2 /dev/sdd2
|
||||
mdadm --grow /dev/md2 -n4 -l6 --backup-file=/root/md2-backup
|
||||
|
||||
Now mdadm is occupying the fd of md2, causing md2 unable to be stopped
|
||||
|
||||
6.Try to stop md2, an error message shows
|
||||
mdadm -S /dev/md2
|
||||
mdadm: Cannot get exclusive access to /dev/md3:Perhaps a running process,
|
||||
mounted filesystem or active volume group?
|
||||
|
||||
Reviewed-by: Alex Wu <alexwu@synology.com>
|
||||
Reviewed-by: BingJing Chang <bingjingc@synology.com>
|
||||
Reviewed-by: Danny Shih <dannyshih@synology.com>
|
||||
Signed-off-by: ChangSyun Peng <allenpeng@synology.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
Grow.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Grow.c b/Grow.c
|
||||
index 764374f..57db7d4 100644
|
||||
--- a/Grow.c
|
||||
+++ b/Grow.c
|
||||
@@ -3517,6 +3517,7 @@ started:
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ close(fd);
|
||||
/* Now we just need to kick off the reshape and watch, while
|
||||
* handling backups of the data...
|
||||
* This is all done by a forked background process.
|
||||
@@ -3569,7 +3570,6 @@ started:
|
||||
mdstat_wait(30 - (delayed-1) * 25);
|
||||
} while (delayed);
|
||||
mdstat_close();
|
||||
- close(fd);
|
||||
if (check_env("MDADM_GROW_VERIFY"))
|
||||
fd = open(devname, O_RDONLY | O_DIRECT);
|
||||
else
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
@ -1,39 +0,0 @@
|
||||
From 546047688e1c64638f462147c755b58119cabdc8 Mon Sep 17 00:00:00 2001
|
||||
From: Wu Guanghao <wuguanghao3@huawei.com>
|
||||
Date: Mon, 16 Aug 2021 15:24:51 +0800
|
||||
Subject: [PATCH] mdadm: fix coredump of mdadm --monitor -r
|
||||
|
||||
The --monitor -r option requires a parameter, otherwise a null pointer will be manipulated
|
||||
when converting to integer data, and a coredump will appear.
|
||||
|
||||
Segmentation fault (core dumped)
|
||||
|
||||
Signed-off-by: Wu Guanghao <wuguanghao3@huawei.com>
|
||||
Acked-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
ReadMe.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/ReadMe.c b/ReadMe.c
|
||||
index 978796ac..37d84625 100644
|
||||
--- a/ReadMe.c
|
||||
+++ b/ReadMe.c
|
||||
@@ -81,11 +81,11 @@ char Version[] = "mdadm - v" VERSION " - " VERS_DATE EXTRAVERSION "\n";
|
||||
* found, it is started.
|
||||
*/
|
||||
|
||||
-char short_options[]="-ABCDEFGIQhVXYWZ:vqbc:i:l:p:m:n:x:u:c:d:z:U:N:sarfRSow1tye:k:";
|
||||
+char short_options[]="-ABCDEFGIQhVXYWZ:vqbc:i:l:p:m:r:n:x:u:c:d:z:U:N:safRSow1tye:k";
|
||||
char short_bitmap_options[]=
|
||||
- "-ABCDEFGIQhVXYWZ:vqb:c:i:l:p:m:n:x:u:c:d:z:U:N:sarfRSow1tye:k:";
|
||||
+ "-ABCDEFGIQhVXYWZ:vqb:c:i:l:p:m:r:n:x:u:c:d:z:U:N:sarfRSow1tye:k:";
|
||||
char short_bitmap_auto_options[]=
|
||||
- "-ABCDEFGIQhVXYWZ:vqb:c:i:l:p:m:n:x:u:c:d:z:U:N:sa:rfRSow1tye:k:";
|
||||
+ "-ABCDEFGIQhVXYWZ:vqb:c:i:l:p:m:r:n:x:u:c:d:z:U:N:sa:rfRSow1tye:k:";
|
||||
|
||||
struct option long_options[] = {
|
||||
{"manage", 0, 0, ManageOpt},
|
||||
--
|
||||
2.27.0
|
||||
|
||||
BIN
mdadm-4.1.tar.xz
BIN
mdadm-4.1.tar.xz
Binary file not shown.
BIN
mdadm-4.2.tar.xz
Normal file
BIN
mdadm-4.2.tar.xz
Normal file
Binary file not shown.
40
mdadm.spec
40
mdadm.spec
@ -1,6 +1,6 @@
|
||||
Name: mdadm
|
||||
Version: 4.1
|
||||
Release: 6
|
||||
Version: 4.2
|
||||
Release: 1
|
||||
Summary: The software RAID arrays user manage tools
|
||||
License: GPLv2+
|
||||
URL: http://www.kernel.org/pub/linux/utils/raid/mdadm/
|
||||
@ -10,37 +10,10 @@ Source1: mdcheck-cron
|
||||
Source2: mdmonitor.service
|
||||
Source3: mdadm.conf
|
||||
|
||||
Patch1: 0001-Assemble-keep-MD_DISK_FAILFAST-and-MD_DISK_WRITEMOST.patch
|
||||
Patch2: 0002-Document-PART-POLICY-lines.patch
|
||||
Patch3: 0003-Grow-avoid-overflow-in-compute_backup_blocks.patch
|
||||
Patch4: 0004-Grow-report-correct-new-chunk-size.patch
|
||||
Patch5: 0005-Fix-spelling-typos.patch
|
||||
Patch6: 0006-Detail.c-do-not-skip-first-character-when-calling-xs.patch
|
||||
Patch7: 0007-Fix-reshape-for-decreasing-data-offset.patch
|
||||
Patch8: 0008-mdmon-don-t-attempt-to-manage-new-arrays-when-termin.patch
|
||||
Patch9: 0009-mdmon-wait-for-previous-mdmon-to-exit-during-takeove.patch
|
||||
Patch10: 0010-Assemble-Fix-starting-array-with-initial-reshape-che.patch
|
||||
Patch11: 0011-add-missing-units-to-examine.patch
|
||||
Patch12: 0012-Create-Block-rounding-size-to-max.patch
|
||||
Patch13: 0013-super-intel-Fix-issue-with-abs-being-irrelevant.patch
|
||||
Patch14: 0014-imsm-close-removed-drive-fd.patch
|
||||
Patch15: 0015-mdadm-force-a-uuid-swap-on-big-endian.patch
|
||||
Patch16: 0016-Init-devlist-as-an-array.patch
|
||||
Patch17: 0017-Don-t-need-to-check-recovery-after-re-add-when-no-I-.patch
|
||||
Patch18: 0018-Manage-Remove-the-legacy-code-for-md-driver-prior-to.patch
|
||||
Patch19: 0019-imsm-Correct-minimal-device-size.patch
|
||||
Patch20: 0020-Detail-show-correct-bitmap-info-for-cluster-raid-dev.patch
|
||||
Patch21: 0021-Assemble-print-error-message-if-mdadm-fails-assembli.patch
|
||||
Patch22: 0022-Include-count-for-0-character-when-using-strncpy-to-.patch
|
||||
Patch23: 0023-restripe-fix-ignoring-return-value-of-read-and-lseek.patch
|
||||
Patch24: 0024-Block-overwriting-existing-links-while-manual-assemb.patch
|
||||
Patch25: 0025-Detect-too-small-device-error-rather-than-underflow-.patch
|
||||
Patch26: 0026-mdadm-Grow-prevent-md-s-fd-from-being-occupied-durin.patch
|
||||
Patch27: 0027-mdadm-remove-Werror-to-fix-Werror-address-of-packed-.patch
|
||||
Patch28: 0028-mdadm-fix-coredump-of-mdadm-monitor-r.patch
|
||||
Patch29: 0029-mdadm-Fix-mdadm-r-remove-option-regresision.patch
|
||||
Patch1: 0001-mdadm-remove-Werror-to-fix-Werror-address-of-packed-.patch
|
||||
Patch2: 0002-mdadm-Fix-mdadm-r-remove-option-regresision.patch
|
||||
|
||||
BuildRequires: systemd gcc binutils
|
||||
BuildRequires: systemd gcc binutils libudev-devel
|
||||
Requires(post): systemd coreutils
|
||||
Requires(preun): systemd
|
||||
Requires(postun): systemd coreutils
|
||||
@ -104,6 +77,9 @@ install -d -m 710 %{buildroot}/var/run/mdadm/
|
||||
%{_mandir}/man*/*
|
||||
|
||||
%changelog
|
||||
* Mon Oct 17 2022 wuguanghao <wuguanghao3@huawei.com> - 4.2-1
|
||||
- upgrade version to 4.2
|
||||
|
||||
* Sat Jun 25 2022 wuguanghao <wuguanghao3@huawei.com> - 4.1-6
|
||||
- fix segfault of --monitor -r
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user