- Detail: remove duplicated code (bsc#1226413)
0008-Detail-remove-duplicated-code.patch - mdadm: Fix native --detail --export (bsc#1226413) 0009-mdadm-Fix-native-detail-export.patch OBS-URL: https://build.opensuse.org/package/show/Base:System/mdadm?expand=0&rev=239
This commit is contained in:
commit
ca78f33aa3
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
## Default LFS
|
||||||
|
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bsp filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gem filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.jar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lzma filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.obscpio filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.oxt filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.png filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.rpm filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.txz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.whl filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zst filter=lfs diff=lfs merge=lfs -text
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.osc
|
68
0001-Remove-hardcoded-checkpoint-interval-checking.patch
Normal file
68
0001-Remove-hardcoded-checkpoint-interval-checking.patch
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
From aec3b907de48be54106600a1ecb69d1231f4801d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mateusz Kusiak <mateusz.kusiak@intel.com>
|
||||||
|
Date: Thu, 18 Jan 2024 11:30:15 +0100
|
||||||
|
Subject: [PATCH 1/5] Remove hardcoded checkpoint interval checking
|
||||||
|
Git-commit: aec3b907de48be54106600a1ecb69d1231f4801d
|
||||||
|
Patch-mainline: mdadm-4.3+
|
||||||
|
References: jsc#PED-7542
|
||||||
|
|
||||||
|
Mdmon assumes that kernel marks checkpoint every 1/16 of the volume size
|
||||||
|
and that the checkpoints are equal in size. This is not true, kernel may
|
||||||
|
mark checkpoints more frequently depending on several factors, including
|
||||||
|
sync speed. This results in checkpoints reported by mdadm --examine
|
||||||
|
falling behind the one reported by kernel.
|
||||||
|
|
||||||
|
Remove hardcoded checkpoint interval checking.
|
||||||
|
|
||||||
|
Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com>
|
||||||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Signed-off-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
monitor.c | 22 ++++++----------------
|
||||||
|
1 file changed, 6 insertions(+), 16 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/monitor.c b/monitor.c
|
||||||
|
index 4acec67..b8d9e88 100644
|
||||||
|
--- a/monitor.c
|
||||||
|
+++ b/monitor.c
|
||||||
|
@@ -564,22 +564,10 @@ static int read_and_act(struct active_array *a, fd_set *fds)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* Check for recovery checkpoint notifications. We need to be a
|
||||||
|
- * minimum distance away from the last checkpoint to prevent
|
||||||
|
- * over checkpointing. Note reshape checkpointing is handled
|
||||||
|
- * in the second branch.
|
||||||
|
+ /* Handle reshape checkpointing
|
||||||
|
*/
|
||||||
|
- if (sync_completed > a->last_checkpoint &&
|
||||||
|
- sync_completed - a->last_checkpoint > a->info.component_size >> 4 &&
|
||||||
|
- a->curr_action > reshape) {
|
||||||
|
- /* A (non-reshape) sync_action has reached a checkpoint.
|
||||||
|
- * Record the updated position in the metadata
|
||||||
|
- */
|
||||||
|
- a->last_checkpoint = sync_completed;
|
||||||
|
- a->container->ss->set_array_state(a, a->curr_state <= clean);
|
||||||
|
- } else if ((a->curr_action == idle && a->prev_action == reshape) ||
|
||||||
|
- (a->curr_action == reshape &&
|
||||||
|
- sync_completed > a->last_checkpoint)) {
|
||||||
|
+ if ((a->curr_action == idle && a->prev_action == reshape) ||
|
||||||
|
+ (a->curr_action == reshape && sync_completed > a->last_checkpoint)) {
|
||||||
|
/* Reshape has progressed or completed so we need to
|
||||||
|
* update the array state - and possibly the array size
|
||||||
|
*/
|
||||||
|
@@ -607,8 +595,10 @@ static int read_and_act(struct active_array *a, fd_set *fds)
|
||||||
|
a->last_checkpoint = sync_completed;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (sync_completed > a->last_checkpoint)
|
||||||
|
+ if (sync_completed > a->last_checkpoint) {
|
||||||
|
a->last_checkpoint = sync_completed;
|
||||||
|
+ a->container->ss->set_array_state(a, a->curr_state <= clean);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (sync_completed >= a->info.component_size)
|
||||||
|
a->last_checkpoint = 0;
|
||||||
|
--
|
||||||
|
2.35.3
|
||||||
|
|
100
0002-monitor-refactor-checkpoint-update.patch
Normal file
100
0002-monitor-refactor-checkpoint-update.patch
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
From cf87fe75fd83dac008ea116c2c52ec69783fdf6a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mateusz Kusiak <mateusz.kusiak@intel.com>
|
||||||
|
Date: Thu, 18 Jan 2024 11:30:16 +0100
|
||||||
|
Subject: [PATCH 2/5] monitor: refactor checkpoint update
|
||||||
|
Git-commit: cf87fe75fd83dac008ea116c2c52ec69783fdf6a
|
||||||
|
Patch-mainline: mdadm-4.3+
|
||||||
|
References: jsc#PED-7542
|
||||||
|
|
||||||
|
"if" statements of checkpoint updates have too many responsibilties.
|
||||||
|
This results in unclear code flow and duplicated code.
|
||||||
|
|
||||||
|
Refactor checkpoint update code and simplify "if" statements.
|
||||||
|
|
||||||
|
Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com>
|
||||||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Signed-off-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
monitor.c | 51 +++++++++++++++++++++++++--------------------------
|
||||||
|
1 file changed, 25 insertions(+), 26 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/monitor.c b/monitor.c
|
||||||
|
index b8d9e88..be0bec7 100644
|
||||||
|
--- a/monitor.c
|
||||||
|
+++ b/monitor.c
|
||||||
|
@@ -412,6 +412,7 @@ static int read_and_act(struct active_array *a, fd_set *fds)
|
||||||
|
int ret = 0;
|
||||||
|
int count = 0;
|
||||||
|
struct timeval tv;
|
||||||
|
+ bool write_checkpoint = false;
|
||||||
|
|
||||||
|
a->next_state = bad_word;
|
||||||
|
a->next_action = bad_action;
|
||||||
|
@@ -564,40 +565,38 @@ static int read_and_act(struct active_array *a, fd_set *fds)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* Handle reshape checkpointing
|
||||||
|
- */
|
||||||
|
- if ((a->curr_action == idle && a->prev_action == reshape) ||
|
||||||
|
- (a->curr_action == reshape && sync_completed > a->last_checkpoint)) {
|
||||||
|
- /* Reshape has progressed or completed so we need to
|
||||||
|
- * update the array state - and possibly the array size
|
||||||
|
- */
|
||||||
|
+ /* Update reshape checkpoint, depending if it finished or progressed */
|
||||||
|
+ if (a->curr_action == idle && a->prev_action == reshape) {
|
||||||
|
+ char buf[SYSFS_MAX_BUF_SIZE];
|
||||||
|
+
|
||||||
|
if (sync_completed != 0)
|
||||||
|
a->last_checkpoint = sync_completed;
|
||||||
|
- /* We might need to update last_checkpoint depending on
|
||||||
|
- * the reason that reshape finished.
|
||||||
|
- * if array reshape is really finished:
|
||||||
|
- * set check point to the end, this allows
|
||||||
|
- * set_array_state() to finalize reshape in metadata
|
||||||
|
- * if reshape if broken: do not set checkpoint to the end
|
||||||
|
- * this allows for reshape restart from checkpoint
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * If reshape really finished, set checkpoint to the end to finalize it.
|
||||||
|
+ * Do not set checkpoint if reshape is broken.
|
||||||
|
+ * Reshape will restart from last checkpoint.
|
||||||
|
*/
|
||||||
|
- if ((a->curr_action != reshape) &&
|
||||||
|
- (a->prev_action == reshape)) {
|
||||||
|
- char buf[SYSFS_MAX_BUF_SIZE];
|
||||||
|
- if ((sysfs_get_str(&a->info, NULL,
|
||||||
|
- "reshape_position",
|
||||||
|
- buf,
|
||||||
|
- sizeof(buf)) >= 0) &&
|
||||||
|
- str_is_none(buf) == true)
|
||||||
|
+ if (sysfs_get_str(&a->info, NULL, "reshape_position", buf, sizeof(buf)) >= 0)
|
||||||
|
+ if (str_is_none(buf) == true)
|
||||||
|
a->last_checkpoint = a->info.component_size;
|
||||||
|
- }
|
||||||
|
- a->container->ss->set_array_state(a, a->curr_state <= clean);
|
||||||
|
- a->last_checkpoint = sync_completed;
|
||||||
|
+
|
||||||
|
+ write_checkpoint = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (sync_completed > a->last_checkpoint) {
|
||||||
|
+ if (a->curr_action >= reshape && sync_completed > a->last_checkpoint) {
|
||||||
|
+ /* Update checkpoint if neither reshape nor idle action */
|
||||||
|
a->last_checkpoint = sync_completed;
|
||||||
|
+
|
||||||
|
+ write_checkpoint = true;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Save checkpoint */
|
||||||
|
+ if (write_checkpoint) {
|
||||||
|
a->container->ss->set_array_state(a, a->curr_state <= clean);
|
||||||
|
+
|
||||||
|
+ if (a->curr_action <= reshape)
|
||||||
|
+ a->last_checkpoint = sync_completed;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sync_completed >= a->info.component_size)
|
||||||
|
--
|
||||||
|
2.35.3
|
||||||
|
|
51
0003-Super-intel-Fix-first-checkpoint-restart.patch
Normal file
51
0003-Super-intel-Fix-first-checkpoint-restart.patch
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
From fdb7e802f4cf64d067c3abaafa35056e2bc1ed43 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mateusz Kusiak <mateusz.kusiak@intel.com>
|
||||||
|
Date: Thu, 18 Jan 2024 11:30:17 +0100
|
||||||
|
Subject: [PATCH 3/5] Super-intel: Fix first checkpoint restart
|
||||||
|
Git-commit: fdb7e802f4cf64d067c3abaafa35056e2bc1ed43
|
||||||
|
Patch-mainline: mdadm-4.3+
|
||||||
|
References: jsc#PED-7542
|
||||||
|
|
||||||
|
When imsm based array is stopped after reaching first checkpoint and
|
||||||
|
then assembled, first checkpoint is reported as 0.
|
||||||
|
|
||||||
|
This behaviour is valid only for initial checkpoint, if the array was
|
||||||
|
stopped while performing some action.
|
||||||
|
|
||||||
|
Last checkpoint value is not taken from metadata but always starts
|
||||||
|
with 0 and it's incremented when sync_completed in sysfs changes.
|
||||||
|
|
||||||
|
In simplification, read_and_act() is responsible for checkpoint updates
|
||||||
|
and is executed each time sysfs checkpoint update happens. For first
|
||||||
|
checkpoint it is executed twice and due to marking checkpoint before
|
||||||
|
triggering any action on the array, it is impossible to read
|
||||||
|
sync_completed from sysfs in just two iterations.
|
||||||
|
|
||||||
|
The workaround to this is not marking any checkpoint for first
|
||||||
|
sysfs checkpoint after RAID assembly, to preserve checkpoint value
|
||||||
|
stored in metadata.
|
||||||
|
|
||||||
|
Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com>
|
||||||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Signed-off-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
super-intel.c | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/super-intel.c b/super-intel.c
|
||||||
|
index dbea235..e61f3f6 100644
|
||||||
|
--- a/super-intel.c
|
||||||
|
+++ b/super-intel.c
|
||||||
|
@@ -8771,6 +8771,9 @@ static int imsm_set_array_state(struct active_array *a, int consistent)
|
||||||
|
super->updates_pending++;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (a->prev_action == idle)
|
||||||
|
+ goto skip_mark_checkpoint;
|
||||||
|
+
|
||||||
|
mark_checkpoint:
|
||||||
|
/* skip checkpointing for general migration,
|
||||||
|
* it is controlled in mdadm
|
||||||
|
--
|
||||||
|
2.35.3
|
||||||
|
|
65
0004-Grow-Move-update_tail-assign-to-Grow_reshape.patch
Normal file
65
0004-Grow-Move-update_tail-assign-to-Grow_reshape.patch
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
From ea2ca7ed3dbbf881ce08d80fe371f2aaf05011c3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mateusz Kusiak <mateusz.kusiak@intel.com>
|
||||||
|
Date: Thu, 18 Jan 2024 11:30:18 +0100
|
||||||
|
Subject: [PATCH 4/5] Grow: Move update_tail assign to Grow_reshape()
|
||||||
|
Git-commit: ea2ca7ed3dbbf881ce08d80fe371f2aaf05011c3
|
||||||
|
Patch-mainline: mdadm-4.3+
|
||||||
|
References: jsc#PED-7542
|
||||||
|
|
||||||
|
Due to e919fb0af245 ("FIX: Enable metadata updates for raid0") code
|
||||||
|
can't enter super-intel.c:3415, resulting in checkpoint not being
|
||||||
|
saved to metadata for second volume in matrix raid array.
|
||||||
|
This results in checkpoint being stuck at last value for the
|
||||||
|
first volume.
|
||||||
|
|
||||||
|
Move st->update_tail to Grow_reshape() so it is assigned for each
|
||||||
|
volume.
|
||||||
|
|
||||||
|
Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com>
|
||||||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Signed-off-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
Grow.c | 13 +++++++------
|
||||||
|
1 file changed, 7 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Grow.c b/Grow.c
|
||||||
|
index f95dae8..5498e54 100644
|
||||||
|
--- a/Grow.c
|
||||||
|
+++ b/Grow.c
|
||||||
|
@@ -2085,9 +2085,10 @@ int Grow_reshape(char *devname, int fd,
|
||||||
|
if (!mdmon_running(st->container_devnm))
|
||||||
|
start_mdmon(st->container_devnm);
|
||||||
|
ping_monitor(container);
|
||||||
|
- if (mdmon_running(st->container_devnm) &&
|
||||||
|
- st->update_tail == NULL)
|
||||||
|
- st->update_tail = &st->updates;
|
||||||
|
+ if (mdmon_running(st->container_devnm) == false) {
|
||||||
|
+ pr_err("No mdmon found. Grow cannot continue.\n");
|
||||||
|
+ goto release;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s->size == MAX_SIZE)
|
||||||
|
@@ -3048,6 +3049,8 @@ static int reshape_array(char *container, int fd, char *devname,
|
||||||
|
dprintf("Cannot get array information.\n");
|
||||||
|
goto release;
|
||||||
|
}
|
||||||
|
+ if (st->update_tail == NULL)
|
||||||
|
+ st->update_tail = &st->updates;
|
||||||
|
if (array.level == 0 && info->component_size == 0) {
|
||||||
|
get_dev_size(fd, NULL, &array_size);
|
||||||
|
info->component_size = array_size / array.raid_disks;
|
||||||
|
@@ -5152,9 +5155,7 @@ int Grow_continue_command(char *devname, int fd,
|
||||||
|
start_mdmon(container);
|
||||||
|
ping_monitor(container);
|
||||||
|
|
||||||
|
- if (mdmon_running(container))
|
||||||
|
- st->update_tail = &st->updates;
|
||||||
|
- else {
|
||||||
|
+ if (mdmon_running(container) == false) {
|
||||||
|
pr_err("No mdmon found. Grow cannot continue.\n");
|
||||||
|
ret_val = 1;
|
||||||
|
goto Grow_continue_command_exit;
|
||||||
|
--
|
||||||
|
2.35.3
|
||||||
|
|
60
0005-Add-understanding-output-section-in-man.patch
Normal file
60
0005-Add-understanding-output-section-in-man.patch
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
From 37eeae381a8ed07a1fabb64184fe45d95a861496 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mateusz Kusiak <mateusz.kusiak@intel.com>
|
||||||
|
Date: Thu, 18 Jan 2024 11:30:19 +0100
|
||||||
|
Subject: [PATCH 5/5] Add understanding output section in man
|
||||||
|
Git-commit: 37eeae381a8ed07a1fabb64184fe45d95a861496
|
||||||
|
Patch-mainline: mdadm-4.3+
|
||||||
|
References: jsc#PED-7542
|
||||||
|
|
||||||
|
Add new section in man for explaining mdadm outputs.
|
||||||
|
Describe checkpoint entry.
|
||||||
|
|
||||||
|
Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com>
|
||||||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Signed-off-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
mdadm.8.in | 21 ++++++++++++++++++++-
|
||||||
|
1 file changed, 20 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/mdadm.8.in b/mdadm.8.in
|
||||||
|
index 96a4a08..9ba6682 100644
|
||||||
|
--- a/mdadm.8.in
|
||||||
|
+++ b/mdadm.8.in
|
||||||
|
@@ -3179,7 +3179,7 @@ environment. This can be useful for testing or for disaster
|
||||||
|
recovery. You should be aware that interoperability may be
|
||||||
|
compromised by setting this value.
|
||||||
|
|
||||||
|
-These change can also be suppressed by adding
|
||||||
|
+These change can also be suppressed by adding
|
||||||
|
.B mdadm.imsm.test=1
|
||||||
|
to the kernel command line. This makes it easy to test IMSM
|
||||||
|
code in a virtual machine that doesn't have IMSM virtual hardware.
|
||||||
|
@@ -3454,6 +3454,25 @@ is any string. These names are supported by
|
||||||
|
since version 3.3 provided they are enabled in
|
||||||
|
.IR mdadm.conf .
|
||||||
|
|
||||||
|
+.SH UNDERSTANDING OUTPUT
|
||||||
|
+
|
||||||
|
+.TP
|
||||||
|
+EXAMINE
|
||||||
|
+
|
||||||
|
+.TP
|
||||||
|
+.B checkpoint
|
||||||
|
+Checkpoint value is reported when array is performing some action including
|
||||||
|
+resync, recovery or reshape. Checkpoints allow resuming action from certain
|
||||||
|
+point if it was interrupted.
|
||||||
|
+
|
||||||
|
+Checkpoint is reported as combination of two values: current migration unit
|
||||||
|
+and number of blocks per unit. By multiplying those values and dividing by
|
||||||
|
+array size checkpoint progress percentage can be obtained in relation to
|
||||||
|
+current progress reported in /proc/mdstat. Checkpoint is also related to (and
|
||||||
|
+sometimes based on) sysfs entry sync_completed but depending on action units
|
||||||
|
+may differ. Even if units are the same, it should not be expected that
|
||||||
|
+checkpoint and sync_completed will be exact match nor updated simultaneously.
|
||||||
|
+
|
||||||
|
.SH NOTE
|
||||||
|
.I mdadm
|
||||||
|
was previously known as
|
||||||
|
--
|
||||||
|
2.35.3
|
||||||
|
|
59
0006-util.c-change-devnm-to-const-in-mdmon-functions.patch
Normal file
59
0006-util.c-change-devnm-to-const-in-mdmon-functions.patch
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
From b0f4e8e30f38d83f7e3f53d01d72d4cb3b4d42d7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kinga Stefaniuk <kinga.stefaniuk@intel.com>
|
||||||
|
Date: Tue, 7 May 2024 05:38:55 +0200
|
||||||
|
Subject: [PATCH] util.c: change devnm to const in mdmon functions
|
||||||
|
Git-commit: b0f4e8e30f38d83f7e3f53d01d72d4cb3b4d42d7
|
||||||
|
Patch-mainline: mdadm-4.3+
|
||||||
|
References: bsc#1225307
|
||||||
|
|
||||||
|
Devnm shall not be changed inside mdmon_running()
|
||||||
|
and mdmon_pid() functions, change this parameter to const.
|
||||||
|
|
||||||
|
Signed-off-by: Kinga Stefaniuk <kinga.stefaniuk@intel.com>
|
||||||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Signed-off-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
mdadm.h | 4 ++--
|
||||||
|
util.c | 4 ++--
|
||||||
|
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/mdadm.h b/mdadm.h
|
||||||
|
index 2ff3e463..1ba541fc 100644
|
||||||
|
--- a/mdadm.h
|
||||||
|
+++ b/mdadm.h
|
||||||
|
@@ -1768,8 +1768,8 @@ extern int is_subarray_active(char *subarray, char *devname);
|
||||||
|
extern int open_subarray(char *dev, char *subarray, struct supertype *st, int quiet);
|
||||||
|
extern struct superswitch *version_to_superswitch(char *vers);
|
||||||
|
|
||||||
|
-extern int mdmon_running(char *devnm);
|
||||||
|
-extern int mdmon_pid(char *devnm);
|
||||||
|
+extern int mdmon_running(const char *devnm);
|
||||||
|
+extern int mdmon_pid(const char *devnm);
|
||||||
|
extern int check_env(char *name);
|
||||||
|
extern __u32 random32(void);
|
||||||
|
extern void random_uuid(__u8 *buf);
|
||||||
|
diff --git a/util.c b/util.c
|
||||||
|
index 4fbf11c4..e2b490e1 100644
|
||||||
|
--- a/util.c
|
||||||
|
+++ b/util.c
|
||||||
|
@@ -1902,7 +1902,7 @@ unsigned long long min_recovery_start(struct mdinfo *array)
|
||||||
|
return recovery_start;
|
||||||
|
}
|
||||||
|
|
||||||
|
-int mdmon_pid(char *devnm)
|
||||||
|
+int mdmon_pid(const char *devnm)
|
||||||
|
{
|
||||||
|
char path[100];
|
||||||
|
char pid[10];
|
||||||
|
@@ -1922,7 +1922,7 @@ int mdmon_pid(char *devnm)
|
||||||
|
return atoi(pid);
|
||||||
|
}
|
||||||
|
|
||||||
|
-int mdmon_running(char *devnm)
|
||||||
|
+int mdmon_running(const char *devnm)
|
||||||
|
{
|
||||||
|
int pid = mdmon_pid(devnm);
|
||||||
|
if (pid <= 0)
|
||||||
|
--
|
||||||
|
2.35.3
|
||||||
|
|
125
0007-Wait-for-mdmon-when-it-is-stared-via-systemd.patch
Normal file
125
0007-Wait-for-mdmon-when-it-is-stared-via-systemd.patch
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
From aa1cc5815d2b14a8b47add18cfaa8264e19c10ce Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kinga Stefaniuk <kinga.stefaniuk@intel.com>
|
||||||
|
Date: Tue, 7 May 2024 05:38:56 +0200
|
||||||
|
Subject: [PATCH] Wait for mdmon when it is stared via systemd
|
||||||
|
Git-commit: aa1cc5815d2b14a8b47add18cfaa8264e19c10ce
|
||||||
|
Patch-mainline: mdadm-4.3+
|
||||||
|
References: bsc#1225307
|
||||||
|
|
||||||
|
When mdmon is being started it may need few seconds to start.
|
||||||
|
For now, we didn't wait for it. Introduce wait_for_mdmon()
|
||||||
|
function, which waits up to 5 seconds for mdmon to start completely.
|
||||||
|
|
||||||
|
Signed-off-by: Kinga Stefaniuk <kinga.stefaniuk@intel.com>
|
||||||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Signed-off-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
Assemble.c | 4 ++--
|
||||||
|
Grow.c | 7 ++++---
|
||||||
|
mdadm.h | 2 ++
|
||||||
|
util.c | 29 +++++++++++++++++++++++++++++
|
||||||
|
4 files changed, 37 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Assemble.c b/Assemble.c
|
||||||
|
index f5e9ab1f..83dced19 100644
|
||||||
|
--- a/Assemble.c
|
||||||
|
+++ b/Assemble.c
|
||||||
|
@@ -2173,8 +2173,8 @@ int assemble_container_content(struct supertype *st, int mdfd,
|
||||||
|
if (!mdmon_running(st->container_devnm))
|
||||||
|
start_mdmon(st->container_devnm);
|
||||||
|
ping_monitor(st->container_devnm);
|
||||||
|
- if (mdmon_running(st->container_devnm) &&
|
||||||
|
- st->update_tail == NULL)
|
||||||
|
+ if (wait_for_mdmon(st->container_devnm) == MDADM_STATUS_SUCCESS &&
|
||||||
|
+ !st->update_tail)
|
||||||
|
st->update_tail = &st->updates;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/Grow.c b/Grow.c
|
||||||
|
index 87ed9214..1923c27c 100644
|
||||||
|
--- a/Grow.c
|
||||||
|
+++ b/Grow.c
|
||||||
|
@@ -2134,7 +2134,7 @@ int Grow_reshape(char *devname, int fd,
|
||||||
|
if (!mdmon_running(st->container_devnm))
|
||||||
|
start_mdmon(st->container_devnm);
|
||||||
|
ping_monitor(container);
|
||||||
|
- if (mdmon_running(st->container_devnm) == false) {
|
||||||
|
+ if (wait_for_mdmon(st->container_devnm) != MDADM_STATUS_SUCCESS) {
|
||||||
|
pr_err("No mdmon found. Grow cannot continue.\n");
|
||||||
|
goto release;
|
||||||
|
}
|
||||||
|
@@ -3218,7 +3218,8 @@ static int reshape_array(char *container, int fd, char *devname,
|
||||||
|
if (!mdmon_running(container))
|
||||||
|
start_mdmon(container);
|
||||||
|
ping_monitor(container);
|
||||||
|
- if (mdmon_running(container) && st->update_tail == NULL)
|
||||||
|
+ if (wait_for_mdmon(container) == MDADM_STATUS_SUCCESS &&
|
||||||
|
+ !st->update_tail)
|
||||||
|
st->update_tail = &st->updates;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -5173,7 +5174,7 @@ int Grow_continue_command(char *devname, int fd, struct context *c)
|
||||||
|
start_mdmon(container);
|
||||||
|
ping_monitor(container);
|
||||||
|
|
||||||
|
- if (mdmon_running(container) == false) {
|
||||||
|
+ if (wait_for_mdmon(container) != MDADM_STATUS_SUCCESS) {
|
||||||
|
pr_err("No mdmon found. Grow cannot continue.\n");
|
||||||
|
ret_val = 1;
|
||||||
|
goto Grow_continue_command_exit;
|
||||||
|
diff --git a/mdadm.h b/mdadm.h
|
||||||
|
index 1ba541fc..b71d7b32 100644
|
||||||
|
--- a/mdadm.h
|
||||||
|
+++ b/mdadm.h
|
||||||
|
@@ -1770,6 +1770,8 @@ extern struct superswitch *version_to_superswitch(char *vers);
|
||||||
|
|
||||||
|
extern int mdmon_running(const char *devnm);
|
||||||
|
extern int mdmon_pid(const char *devnm);
|
||||||
|
+extern mdadm_status_t wait_for_mdmon(const char *devnm);
|
||||||
|
+
|
||||||
|
extern int check_env(char *name);
|
||||||
|
extern __u32 random32(void);
|
||||||
|
extern void random_uuid(__u8 *buf);
|
||||||
|
diff --git a/util.c b/util.c
|
||||||
|
index e2b490e1..bf79742f 100644
|
||||||
|
--- a/util.c
|
||||||
|
+++ b/util.c
|
||||||
|
@@ -1932,6 +1932,35 @@ int mdmon_running(const char *devnm)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/*
|
||||||
|
+ * wait_for_mdmon() - Waits for mdmon within specified time.
|
||||||
|
+ * @devnm: Device for which mdmon should start.
|
||||||
|
+ *
|
||||||
|
+ * Function waits for mdmon to start. It may need few seconds
|
||||||
|
+ * to start, we set timeout to 5, it should be sufficient.
|
||||||
|
+ * Do not wait if mdmon has been started.
|
||||||
|
+ *
|
||||||
|
+ * Return: MDADM_STATUS_SUCCESS if mdmon is running, error code otherwise.
|
||||||
|
+ */
|
||||||
|
+mdadm_status_t wait_for_mdmon(const char *devnm)
|
||||||
|
+{
|
||||||
|
+ const time_t mdmon_timeout = 5;
|
||||||
|
+ time_t start_time = time(0);
|
||||||
|
+
|
||||||
|
+ if (mdmon_running(devnm))
|
||||||
|
+ return MDADM_STATUS_SUCCESS;
|
||||||
|
+
|
||||||
|
+ pr_info("Waiting for mdmon to start\n");
|
||||||
|
+ while (time(0) - start_time < mdmon_timeout) {
|
||||||
|
+ sleep_for(0, MSEC_TO_NSEC(200), true);
|
||||||
|
+ if (mdmon_running(devnm))
|
||||||
|
+ return MDADM_STATUS_SUCCESS;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ pr_err("Timeout waiting for mdmon\n");
|
||||||
|
+ return MDADM_STATUS_ERROR;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int start_mdmon(char *devnm)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
--
|
||||||
|
2.35.3
|
||||||
|
|
79
0008-Detail-remove-duplicated-code.patch
Normal file
79
0008-Detail-remove-duplicated-code.patch
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
From 60c19530dd7cc6b38a75695a0a3d004bbe60d430 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kinga Tanska <kinga.tanska@intel.com>
|
||||||
|
Date: Tue, 27 Feb 2024 03:36:14 +0100
|
||||||
|
Subject: [PATCH] Detail: remove duplicated code
|
||||||
|
Git-commit: 60c19530dd7cc6b38a75695a0a3d004bbe60d430
|
||||||
|
Patch-mainline: mdadm-4.3
|
||||||
|
References: bsc#1226413
|
||||||
|
|
||||||
|
Remove duplicated code from Detail(), where MD_UUID and MD_DEVNAME
|
||||||
|
are being set. Superblock is no longer required to print system
|
||||||
|
properties. Now it tries to obtain map in two ways.
|
||||||
|
|
||||||
|
Signed-off-by: Kinga Tanska <kinga.tanska@intel.com>
|
||||||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Signed-off-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
Detail.c | 33 +++++++++++++--------------------
|
||||||
|
1 file changed, 13 insertions(+), 20 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Detail.c b/Detail.c
|
||||||
|
index aaa3dd6e..f23ec16f 100644
|
||||||
|
--- a/Detail.c
|
||||||
|
+++ b/Detail.c
|
||||||
|
@@ -226,6 +226,9 @@ int Detail(char *dev, struct context *c)
|
||||||
|
str = map_num(pers, array.level);
|
||||||
|
|
||||||
|
if (c->export) {
|
||||||
|
+ char nbuf[64];
|
||||||
|
+ struct map_ent *mp = NULL, *map = NULL;
|
||||||
|
+
|
||||||
|
if (array.raid_disks) {
|
||||||
|
if (str)
|
||||||
|
printf("MD_LEVEL=%s\n", str);
|
||||||
|
@@ -247,32 +250,22 @@ int Detail(char *dev, struct context *c)
|
||||||
|
array.minor_version);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (st && st->sb && info) {
|
||||||
|
- char nbuf[64];
|
||||||
|
- struct map_ent *mp, *map = NULL;
|
||||||
|
-
|
||||||
|
- fname_from_uuid(st, info, nbuf, ':');
|
||||||
|
- printf("MD_UUID=%s\n", nbuf + 5);
|
||||||
|
+ if (info)
|
||||||
|
mp = map_by_uuid(&map, info->uuid);
|
||||||
|
+ if (!mp)
|
||||||
|
+ mp = map_by_devnm(&map, fd2devnm(fd));
|
||||||
|
|
||||||
|
- if (mp && mp->path && strncmp(mp->path, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0)
|
||||||
|
+ if (mp) {
|
||||||
|
+ __fname_from_uuid(mp->uuid, 0, nbuf, ':');
|
||||||
|
+ printf("MD_UUID=%s\n", nbuf + 5);
|
||||||
|
+ if (mp->path && strncmp(mp->path, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0)
|
||||||
|
printf("MD_DEVNAME=%s\n", mp->path + DEV_MD_DIR_LEN);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
+ map_free(map);
|
||||||
|
+ if (st && st->sb) {
|
||||||
|
if (st->ss->export_detail_super)
|
||||||
|
st->ss->export_detail_super(st);
|
||||||
|
- map_free(map);
|
||||||
|
- } else {
|
||||||
|
- struct map_ent *mp, *map = NULL;
|
||||||
|
- char nbuf[64];
|
||||||
|
- mp = map_by_devnm(&map, fd2devnm(fd));
|
||||||
|
- if (mp) {
|
||||||
|
- __fname_from_uuid(mp->uuid, 0, nbuf, ':');
|
||||||
|
- printf("MD_UUID=%s\n", nbuf+5);
|
||||||
|
- }
|
||||||
|
- if (mp && mp->path && strncmp(mp->path, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0)
|
||||||
|
- printf("MD_DEVNAME=%s\n", mp->path + DEV_MD_DIR_LEN);
|
||||||
|
-
|
||||||
|
- map_free(map);
|
||||||
|
}
|
||||||
|
if (!c->no_devices && sra) {
|
||||||
|
struct mdinfo *mdi;
|
||||||
|
--
|
||||||
|
2.46.0
|
||||||
|
|
251
0009-mdadm-Fix-native-detail-export.patch
Normal file
251
0009-mdadm-Fix-native-detail-export.patch
Normal file
@ -0,0 +1,251 @@
|
|||||||
|
From ba65d917d121dfb9876053e6f62dbd4ebf2e028c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Date: Mon, 18 Mar 2024 16:19:30 +0100
|
||||||
|
Subject: [PATCH] mdadm: Fix native --detail --export
|
||||||
|
Git-commit: ba65d917d121dfb9876053e6f62dbd4ebf2e028c
|
||||||
|
Patch-mainline: mdadm-4.3
|
||||||
|
References: bsc#1226413
|
||||||
|
|
||||||
|
Mentioned commit (see Fixes) causes that UUID is not swapped as expected
|
||||||
|
for native superblock. Fix this problem.
|
||||||
|
|
||||||
|
For detail, we should avoid superblock calls, we can have information
|
||||||
|
about supertype from map, use that.
|
||||||
|
|
||||||
|
Simplify fname_from_uuid() by removing dependencies to metadata
|
||||||
|
handler, it is not needed. Decision is taken at compile time, expect
|
||||||
|
super1 but this function is not used by super1. Add warning about that.
|
||||||
|
Remove separator, it is always ':'.
|
||||||
|
|
||||||
|
Fixes: 60c19530dd7c ("Detail: remove duplicated code")
|
||||||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Signed-off-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
Detail.c | 26 +++++++++++++++++++++++++-
|
||||||
|
mdadm.h | 3 +--
|
||||||
|
super-ddf.c | 10 +++++-----
|
||||||
|
super-intel.c | 16 ++++++++--------
|
||||||
|
util.c | 24 +++++++++++++-----------
|
||||||
|
5 files changed, 52 insertions(+), 27 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Detail.c b/Detail.c
|
||||||
|
index f23ec16f..55a086d3 100644
|
||||||
|
--- a/Detail.c
|
||||||
|
+++ b/Detail.c
|
||||||
|
@@ -49,6 +49,30 @@ static int add_device(const char *dev, char ***p_devices,
|
||||||
|
return n_devices + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * detail_fname_from_uuid() - generate uuid string with special super1 handling.
|
||||||
|
+ * @mp: map entry to parse.
|
||||||
|
+ * @buf: buf to write.
|
||||||
|
+ *
|
||||||
|
+ * Hack to workaround an issue with super1 superblocks. It swapuuid set in order for assembly
|
||||||
|
+ * to 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.
|
||||||
|
+ *
|
||||||
|
+ * Always convert uuid if host is big endian.
|
||||||
|
+ */
|
||||||
|
+char *detail_fname_from_uuid(struct map_ent *mp, char *buf)
|
||||||
|
+{
|
||||||
|
+#if __BYTE_ORDER == BIG_ENDIAN
|
||||||
|
+ bool swap = true;
|
||||||
|
+#else
|
||||||
|
+ bool swap = false;
|
||||||
|
+#endif
|
||||||
|
+ if (strncmp(mp->metadata, "1.", 2) == 0)
|
||||||
|
+ swap = true;
|
||||||
|
+
|
||||||
|
+ return __fname_from_uuid(mp->uuid, swap, buf, ':');
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int Detail(char *dev, struct context *c)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
@@ -256,7 +280,7 @@ int Detail(char *dev, struct context *c)
|
||||||
|
mp = map_by_devnm(&map, fd2devnm(fd));
|
||||||
|
|
||||||
|
if (mp) {
|
||||||
|
- __fname_from_uuid(mp->uuid, 0, nbuf, ':');
|
||||||
|
+ detail_fname_from_uuid(mp, nbuf);
|
||||||
|
printf("MD_UUID=%s\n", nbuf + 5);
|
||||||
|
if (mp->path && strncmp(mp->path, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0)
|
||||||
|
printf("MD_DEVNAME=%s\n", mp->path + DEV_MD_DIR_LEN);
|
||||||
|
diff --git a/mdadm.h b/mdadm.h
|
||||||
|
index 3fedca48..a363708a 100644
|
||||||
|
--- a/mdadm.h
|
||||||
|
+++ b/mdadm.h
|
||||||
|
@@ -1696,8 +1696,7 @@ extern const int uuid_zero[4];
|
||||||
|
extern int same_uuid(int a[4], int b[4], int swapuuid);
|
||||||
|
extern void copy_uuid(void *a, int b[4], int swapuuid);
|
||||||
|
extern char *__fname_from_uuid(int id[4], int swap, char *buf, char sep);
|
||||||
|
-extern char *fname_from_uuid(struct supertype *st,
|
||||||
|
- struct mdinfo *info, char *buf, char sep);
|
||||||
|
+extern char *fname_from_uuid(struct mdinfo *info, char *buf);
|
||||||
|
extern unsigned long calc_csum(void *super, int bytes);
|
||||||
|
extern int enough(int level, int raid_disks, int layout, int clean,
|
||||||
|
char *avail);
|
||||||
|
diff --git a/super-ddf.c b/super-ddf.c
|
||||||
|
index 94ac5ff3..21426c75 100644
|
||||||
|
--- a/super-ddf.c
|
||||||
|
+++ b/super-ddf.c
|
||||||
|
@@ -1617,7 +1617,7 @@ static void brief_examine_super_ddf(struct supertype *st, int verbose)
|
||||||
|
struct mdinfo info;
|
||||||
|
char nbuf[64];
|
||||||
|
getinfo_super_ddf(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
|
||||||
|
printf("ARRAY metadata=ddf UUID=%s\n", nbuf + 5);
|
||||||
|
}
|
||||||
|
@@ -1632,7 +1632,7 @@ static void brief_examine_subarrays_ddf(struct supertype *st, int verbose)
|
||||||
|
unsigned int i;
|
||||||
|
char nbuf[64];
|
||||||
|
getinfo_super_ddf(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
|
||||||
|
for (i = 0; i < be16_to_cpu(ddf->virt->max_vdes); i++) {
|
||||||
|
struct virtual_entry *ve = &ddf->virt->entries[i];
|
||||||
|
@@ -1645,7 +1645,7 @@ static void brief_examine_subarrays_ddf(struct supertype *st, int verbose)
|
||||||
|
ddf->currentconf =&vcl;
|
||||||
|
vcl.vcnum = i;
|
||||||
|
uuid_from_super_ddf(st, info.uuid);
|
||||||
|
- fname_from_uuid(st, &info, nbuf1, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf1);
|
||||||
|
_ddf_array_name(namebuf, ddf, i);
|
||||||
|
printf("ARRAY%s%s container=%s member=%d UUID=%s\n",
|
||||||
|
namebuf[0] == '\0' ? "" : " " DEV_MD_DIR, namebuf,
|
||||||
|
@@ -1658,7 +1658,7 @@ static void export_examine_super_ddf(struct supertype *st)
|
||||||
|
struct mdinfo info;
|
||||||
|
char nbuf[64];
|
||||||
|
getinfo_super_ddf(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
printf("MD_METADATA=ddf\n");
|
||||||
|
printf("MD_LEVEL=container\n");
|
||||||
|
printf("MD_UUID=%s\n", nbuf+5);
|
||||||
|
@@ -1798,7 +1798,7 @@ static void brief_detail_super_ddf(struct supertype *st, char *subarray)
|
||||||
|
return;
|
||||||
|
else
|
||||||
|
uuid_of_ddf_subarray(ddf, vcnum, info.uuid);
|
||||||
|
- fname_from_uuid(st, &info, nbuf,':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
printf(" UUID=%s", nbuf + 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/super-intel.c b/super-intel.c
|
||||||
|
index e1754f29..ff2590fe 100644
|
||||||
|
--- a/super-intel.c
|
||||||
|
+++ b/super-intel.c
|
||||||
|
@@ -2217,7 +2217,7 @@ static void examine_super_imsm(struct supertype *st, char *homehost)
|
||||||
|
else
|
||||||
|
printf("not supported\n");
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
printf(" UUID : %s\n", nbuf + 5);
|
||||||
|
sum = __le32_to_cpu(mpb->check_sum);
|
||||||
|
printf(" Checksum : %08x %s\n", sum,
|
||||||
|
@@ -2242,7 +2242,7 @@ static void examine_super_imsm(struct supertype *st, char *homehost)
|
||||||
|
|
||||||
|
super->current_vol = i;
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
print_imsm_dev(super, dev, nbuf + 5, super->disks->index);
|
||||||
|
}
|
||||||
|
for (i = 0; i < mpb->num_disks; i++) {
|
||||||
|
@@ -2267,7 +2267,7 @@ static void brief_examine_super_imsm(struct supertype *st, int verbose)
|
||||||
|
char nbuf[64];
|
||||||
|
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
printf("ARRAY metadata=imsm UUID=%s\n", nbuf + 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2284,13 +2284,13 @@ static void brief_examine_subarrays_imsm(struct supertype *st, int verbose)
|
||||||
|
return;
|
||||||
|
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
for (i = 0; i < super->anchor->num_raid_devs; i++) {
|
||||||
|
struct imsm_dev *dev = get_imsm_dev(super, i);
|
||||||
|
|
||||||
|
super->current_vol = i;
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf1, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf1);
|
||||||
|
printf("ARRAY " DEV_MD_DIR "%.16s container=%s member=%d UUID=%s\n",
|
||||||
|
dev->volume, nbuf + 5, i, nbuf1 + 5);
|
||||||
|
}
|
||||||
|
@@ -2304,7 +2304,7 @@ static void export_examine_super_imsm(struct supertype *st)
|
||||||
|
char nbuf[64];
|
||||||
|
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
printf("MD_METADATA=imsm\n");
|
||||||
|
printf("MD_LEVEL=container\n");
|
||||||
|
printf("MD_UUID=%s\n", nbuf+5);
|
||||||
|
@@ -2324,7 +2324,7 @@ static void detail_super_imsm(struct supertype *st, char *homehost,
|
||||||
|
super->current_vol = strtoul(subarray, NULL, 10);
|
||||||
|
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
printf("\n UUID : %s\n", nbuf + 5);
|
||||||
|
|
||||||
|
super->current_vol = temp_vol;
|
||||||
|
@@ -2341,7 +2341,7 @@ static void brief_detail_super_imsm(struct supertype *st, char *subarray)
|
||||||
|
super->current_vol = strtoul(subarray, NULL, 10);
|
||||||
|
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
printf(" UUID=%s", nbuf + 5);
|
||||||
|
|
||||||
|
super->current_vol = temp_vol;
|
||||||
|
diff --git a/util.c b/util.c
|
||||||
|
index 49a9c6e2..03336d6f 100644
|
||||||
|
--- a/util.c
|
||||||
|
+++ b/util.c
|
||||||
|
@@ -589,19 +589,21 @@ char *__fname_from_uuid(int id[4], int swap, char *buf, char sep)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-char *fname_from_uuid(struct supertype *st, struct mdinfo *info,
|
||||||
|
- char *buf, char sep)
|
||||||
|
-{
|
||||||
|
- // dirty hack to work around an issue with super1 superblocks...
|
||||||
|
- // super1 superblocks need swapuuid set in order for assembly to
|
||||||
|
- // 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
|
||||||
|
+/**
|
||||||
|
+ * fname_from_uuid() - generate uuid string. Should not be used with super1.
|
||||||
|
+ * @info: info with uuid
|
||||||
|
+ * @buf: buf to fill.
|
||||||
|
+ *
|
||||||
|
+ * This routine should not be used with super1. See detail_fname_from_uuid() for details. It does
|
||||||
|
+ * not use superswitch swapuuid as it should be 0 but it has to do UUID conversion if host is big
|
||||||
|
+ * endian- left for backward compatibility.
|
||||||
|
+ */
|
||||||
|
+char *fname_from_uuid(struct mdinfo *info, char *buf)
|
||||||
|
+{
|
||||||
|
#if __BYTE_ORDER == BIG_ENDIAN
|
||||||
|
- return __fname_from_uuid(info->uuid, 1, buf, sep);
|
||||||
|
+ return __fname_from_uuid(info->uuid, true, buf, ':');
|
||||||
|
#else
|
||||||
|
- return __fname_from_uuid(info->uuid, (st->ss == &super1) ? 1 :
|
||||||
|
- st->ss->swapuuid, buf, sep);
|
||||||
|
+ return __fname_from_uuid(info->uuid, false, buf, ':');
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.46.0
|
||||||
|
|
30
1001-display-timeout-status.patch
Normal file
30
1001-display-timeout-status.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
Detail.c | 1 +
|
||||||
|
md_p.h | 1 +
|
||||||
|
2 files changed, 2 insertions(+)
|
||||||
|
|
||||||
|
Index: mdadm-4.0/Detail.c
|
||||||
|
===================================================================
|
||||||
|
--- mdadm-4.0.orig/Detail.c
|
||||||
|
+++ mdadm-4.0/Detail.c
|
||||||
|
@@ -693,6 +693,8 @@ This is pretty boring
|
||||||
|
disk.raid_disk >= 0)
|
||||||
|
failed++;
|
||||||
|
}
|
||||||
|
+ if (disk.state & (1<<MD_DISK_TIMEOUT))
|
||||||
|
+ printf(" timeout");
|
||||||
|
if (disk.state & (1 << MD_DISK_ACTIVE))
|
||||||
|
printf(" active");
|
||||||
|
if (disk.state & (1 << MD_DISK_SYNC)) {
|
||||||
|
Index: mdadm-4.0/md_p.h
|
||||||
|
===================================================================
|
||||||
|
--- mdadm-4.0.orig/md_p.h
|
||||||
|
+++ mdadm-4.0/md_p.h
|
||||||
|
@@ -90,6 +90,7 @@
|
||||||
|
* dire need
|
||||||
|
*/
|
||||||
|
#define MD_DISK_FAILFAST 10 /* Fewer retries, more failures */
|
||||||
|
+#define MD_DISK_TIMEOUT 11 /* disk is faulty due to timeout */
|
||||||
|
|
||||||
|
#define MD_DISK_REPLACEMENT 17
|
||||||
|
#define MD_DISK_JOURNAL 18 /* disk is used as the write journal in RAID-5/6 */
|
25
1002-OnCalendar-format-fix-of-mdcheck_start-timer.patch
Normal file
25
1002-OnCalendar-format-fix-of-mdcheck_start-timer.patch
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
From: Ali Abdallah <ali.abdallah@suse.com>
|
||||||
|
Subject: OnCalendar format fix of mdcheck_start.timer
|
||||||
|
Patch-mainline: in-house patch at this moment, will post to upstream in future
|
||||||
|
References: bsc#1173137
|
||||||
|
|
||||||
|
This patch includes the fix of the OnCalendar format, changing the format of
|
||||||
|
mdcheck_start.timer [Timer] section,
|
||||||
|
from OnCalendar=Sun *-*-1..7 1:00:00
|
||||||
|
to OnCalendar=Sun *-*-* 1:00:00
|
||||||
|
|
||||||
|
Signed-off-by: Ali Abdallah <ali.abdallah@suse.com>
|
||||||
|
Acked-by: Coly Li <colyli@suse.de>
|
||||||
|
Index: mdadm-4.1/systemd/mdcheck_start.timer
|
||||||
|
===================================================================
|
||||||
|
--- mdadm-4.1.orig/systemd/mdcheck_start.timer
|
||||||
|
+++ mdadm-4.1/systemd/mdcheck_start.timer
|
||||||
|
@@ -9,7 +9,7 @@
|
||||||
|
Description=MD array scrubbing
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
-OnCalendar=Sun *-*-1..7 1:00:00
|
||||||
|
+OnCalendar=Sun *-*-* 1:00:00
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy= mdmonitor.service
|
@ -0,0 +1,59 @@
|
|||||||
|
From 2361620a9d78a4e26ec438b5cc21fe796d411497 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Coly Li <colyli@suse.de>
|
||||||
|
Date: Mon, 31 Aug 2020 00:02:10 +0800
|
||||||
|
Subject: [PATCH] mdadm: treat the Dell softraid array as local array
|
||||||
|
Patch-mainline: N/A, in-house usage only as a workaround to Dell's softraid bug
|
||||||
|
References: bsc#1175004
|
||||||
|
|
||||||
|
Dell softraid FW uses homehost in md raid superblock to store
|
||||||
|
its virtual disk name e.g. "VirtualDisk01". The improper usage
|
||||||
|
of md raid super block meta data from Dell softraid S150 utility
|
||||||
|
makes mdadm takes such md raid (Dell softraid Virtual Disk) as
|
||||||
|
foreign array and won't automatically assemble this array by
|
||||||
|
default. Here if an array's homehost name starts with "VirtualDisk"
|
||||||
|
then we take it as a Dell software raid and bypass the set_name
|
||||||
|
checking. This workaround makes current Dell software raid array
|
||||||
|
can be treated as local array and start automatically.
|
||||||
|
|
||||||
|
This workaround patch will be withdrawn after Dell softraid FW
|
||||||
|
fixes the improper usage problem on md raid superblock.
|
||||||
|
|
||||||
|
Signed-off-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
super1.c | 19 ++++++++++++++++++-
|
||||||
|
1 file changed, 18 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/super1.c b/super1.c
|
||||||
|
index 7664883..d15067a 100644
|
||||||
|
--- a/super1.c
|
||||||
|
+++ b/super1.c
|
||||||
|
@@ -954,8 +954,25 @@ static int examine_badblocks_super1(struct supertype *st, int fd, char *devname)
|
||||||
|
static int match_home1(struct supertype *st, char *homehost)
|
||||||
|
{
|
||||||
|
struct mdp_superblock_1 *sb = st->sb;
|
||||||
|
- int l = homehost ? strlen(homehost) : 0;
|
||||||
|
+ char *dell_softraid_header = "VirtualDisk";
|
||||||
|
+ int l = strlen(dell_softraid_header);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Dell softraid FW uses homehost in md raid superblock to store
|
||||||
|
+ * its virtual disk name e.g. "VirtualDisk01". The improper usage
|
||||||
|
+ * of md raid super block meta data from Dell softraid S150 utility
|
||||||
|
+ * makes mdadm takes such md raid (Dell softraid Virtual Disk) as
|
||||||
|
+ * foreign array and won't automatically assemble this array by
|
||||||
|
+ * default. Here if an array's homehost name starts with "VirtualDisk"
|
||||||
|
+ * then we take it as a Dell software raid and bypass the set_name
|
||||||
|
+ * checking. This workaround makes current Dell software raid array
|
||||||
|
+ * can be treated as local array and start automatically.
|
||||||
|
+ */
|
||||||
|
+ if (strncmp(sb->set_name, dell_softraid_header, l) == 0)
|
||||||
|
+ return 1;
|
||||||
|
|
||||||
|
+ /* Normal cases handleing */
|
||||||
|
+ l = homehost ? strlen(homehost) : 0;
|
||||||
|
return (l > 0 && l < 32 && sb->set_name[l] == ':' &&
|
||||||
|
strncmp(sb->set_name, homehost, l) == 0);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
61
1004-call-mdadm_env.sh-from-usr-libexec-mdadm.patch
Normal file
61
1004-call-mdadm_env.sh-from-usr-libexec-mdadm.patch
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
From 6e79d4bd229e5db4e435917daf4c57cd79db9265 Mon Sep 17 00:00:00 2001
|
||||||
|
From: colyli <colyli@suse.coly>
|
||||||
|
Date: Wed, 17 Oct 2018 11:08:39 +0800
|
||||||
|
Subject: [PATCH] Call mdadm_env.sh from /usr/libexec/mdadm
|
||||||
|
Patch-mainline: N/A, SUSE only patch
|
||||||
|
References: bsc#1111960, bsc#1202090
|
||||||
|
|
||||||
|
Current Makefile installs mdadm_env.sh to /usr/libexec/mdadm but the
|
||||||
|
systemd service files call it from /usr/lib/mdadm. This patch changes
|
||||||
|
the calling path in systemd service files to /usr/libexec/mdadm to
|
||||||
|
make things working.
|
||||||
|
|
||||||
|
Signed-off-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
Makefile | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
Index: mdadm-4.3/systemd/mdcheck_continue.service
|
||||||
|
===================================================================
|
||||||
|
--- mdadm-4.3.orig/systemd/mdcheck_continue.service
|
||||||
|
+++ mdadm-4.3/systemd/mdcheck_continue.service
|
||||||
|
@@ -13,4 +13,6 @@ Documentation=man:mdadm(8)
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
Environment="MDADM_CHECK_DURATION=6 hours"
|
||||||
|
+EnvironmentFile=-/run/sysconfig/mdadm
|
||||||
|
+ExecStartPre=-/usr/libexec/mdadm/mdadm_env.sh
|
||||||
|
ExecStart=/usr/share/mdadm/mdcheck --continue --duration ${MDADM_CHECK_DURATION}
|
||||||
|
Index: mdadm-4.3/systemd/mdcheck_start.service
|
||||||
|
===================================================================
|
||||||
|
--- mdadm-4.3.orig/systemd/mdcheck_start.service
|
||||||
|
+++ mdadm-4.3/systemd/mdcheck_start.service
|
||||||
|
@@ -13,4 +13,6 @@ Documentation=man:mdadm(8)
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
Environment="MDADM_CHECK_DURATION=6 hours"
|
||||||
|
+EnvironmentFile=-/run/sysconfig/mdadm
|
||||||
|
+ExecStartPre=-/usr/libexec/mdadm/mdadm_env.sh
|
||||||
|
ExecStart=/usr/share/mdadm/mdcheck --duration ${MDADM_CHECK_DURATION}
|
||||||
|
Index: mdadm-4.3/systemd/mdmonitor-oneshot.service
|
||||||
|
===================================================================
|
||||||
|
--- mdadm-4.3.orig/systemd/mdmonitor-oneshot.service
|
||||||
|
+++ mdadm-4.3/systemd/mdmonitor-oneshot.service
|
||||||
|
@@ -12,5 +12,5 @@ Documentation=man:mdadm(8)
|
||||||
|
[Service]
|
||||||
|
Environment=MDADM_MONITOR_ARGS=--scan
|
||||||
|
EnvironmentFile=-/run/sysconfig/mdadm
|
||||||
|
-ExecStartPre=-/usr/lib/mdadm/mdadm_env.sh
|
||||||
|
+ExecStartPre=-/usr/libexec/mdadm/mdadm_env.sh
|
||||||
|
ExecStart=BINDIR/mdadm --monitor --oneshot $MDADM_MONITOR_ARGS
|
||||||
|
Index: mdadm-4.3/systemd/mdmonitor.service
|
||||||
|
===================================================================
|
||||||
|
--- mdadm-4.3.orig/systemd/mdmonitor.service
|
||||||
|
+++ mdadm-4.3/systemd/mdmonitor.service
|
||||||
|
@@ -13,5 +13,5 @@ Documentation=man:mdadm(8)
|
||||||
|
[Service]
|
||||||
|
Environment= MDADM_MONITOR_ARGS=--scan
|
||||||
|
EnvironmentFile=-/run/sysconfig/mdadm
|
||||||
|
-ExecStartPre=-/usr/lib/mdadm/mdadm_env.sh
|
||||||
|
+ExecStartPre=-/usr/libexec/mdadm/mdadm_env.sh
|
||||||
|
ExecStart=BINDIR/mdadm --monitor $MDADM_MONITOR_ARGS
|
58
1005-mdadm-enable-Intel-Alderlake-RSTe-configuration.patch
Normal file
58
1005-mdadm-enable-Intel-Alderlake-RSTe-configuration.patch
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
From 449c8b62164880ab132ad6eec86a8d53f793af69 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hannes Reinecke <hare@suse.de>
|
||||||
|
Date: Tue, 19 Jul 2022 13:18:23 +0800
|
||||||
|
Subject: [PATCH 19/23] mdadm: enable Intel Alderlake RSTe configuration
|
||||||
|
Patch-mainline: N/A, SUSE only patch
|
||||||
|
References: bsc#1201297
|
||||||
|
|
||||||
|
Alderlake has a slightly different RST configuration; the UEFI
|
||||||
|
variable is name 'RstVmdV', and the AHCI controller shows up as
|
||||||
|
a child device of the VMD bridge, but continues to use the 'AHCI HBA'
|
||||||
|
PCI class (and not the RAID class as RSTe would normally do).
|
||||||
|
|
||||||
|
Signed-off-by: Hannes Reinecke <hare@suse.de>
|
||||||
|
Acked-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
platform-intel.c | 8 ++++++--
|
||||||
|
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
Index: mdadm-4.2/platform-intel.c
|
||||||
|
===================================================================
|
||||||
|
--- mdadm-4.2.orig/platform-intel.c
|
||||||
|
+++ mdadm-4.2/platform-intel.c
|
||||||
|
@@ -512,6 +512,7 @@ static const struct imsm_orom *find_imsm
|
||||||
|
#define AHCI_PROP "RstSataV"
|
||||||
|
#define AHCI_SSATA_PROP "RstsSatV"
|
||||||
|
#define AHCI_TSATA_PROP "RsttSatV"
|
||||||
|
+#define AHCI_RST_PROP "RstVmdV"
|
||||||
|
#define VROC_VMD_PROP "RstUefiV"
|
||||||
|
#define RST_VMD_PROP "RstVmdV"
|
||||||
|
|
||||||
|
@@ -519,6 +520,7 @@ static const struct imsm_orom *find_imsm
|
||||||
|
EFI_GUID(0x193dfefa, 0xa445, 0x4302, 0x99, 0xd8, 0xef, 0x3a, 0xad, 0x1a, 0x04, 0xc6)
|
||||||
|
|
||||||
|
#define PCI_CLASS_RAID_CNTRL 0x010400
|
||||||
|
+#define PCI_CLASS_SATA_HBA 0x010601
|
||||||
|
|
||||||
|
static int read_efi_var(void *buffer, ssize_t buf_size,
|
||||||
|
const char *variable_name, struct efi_guid guid)
|
||||||
|
@@ -605,7 +607,8 @@ const struct imsm_orom *find_imsm_efi(st
|
||||||
|
struct imsm_orom orom;
|
||||||
|
struct orom_entry *ret;
|
||||||
|
static const char * const sata_efivars[] = {AHCI_PROP, AHCI_SSATA_PROP,
|
||||||
|
- AHCI_TSATA_PROP};
|
||||||
|
+ AHCI_TSATA_PROP,
|
||||||
|
+ AHCI_RST_PROP};
|
||||||
|
static const char * const vmd_efivars[] = {VROC_VMD_PROP, RST_VMD_PROP};
|
||||||
|
unsigned long i;
|
||||||
|
|
||||||
|
@@ -624,7 +627,8 @@ const struct imsm_orom *find_imsm_efi(st
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
case SYS_DEV_SATA:
|
||||||
|
- if (hba->class != PCI_CLASS_RAID_CNTRL)
|
||||||
|
+ if (hba->class != PCI_CLASS_RAID_CNTRL &&
|
||||||
|
+ hba->class != PCI_CLASS_SATA_HBA)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(sata_efivars); i++) {
|
BIN
Software-RAID.HOWTO.tar.bz2
(Stored with Git LFS)
Normal file
BIN
Software-RAID.HOWTO.tar.bz2
(Stored with Git LFS)
Normal file
Binary file not shown.
3
mdadm-4.3.tar.xz
Normal file
3
mdadm-4.3.tar.xz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:7ed64ea459e464420d3489d3f1875d3083f72e281ad4cd2f9c12a9ea44a5b606
|
||||||
|
size 467024
|
3227
mdadm.changes
Normal file
3227
mdadm.changes
Normal file
File diff suppressed because it is too large
Load Diff
147
mdadm.spec
Normal file
147
mdadm.spec
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
#
|
||||||
|
# spec file for package mdadm
|
||||||
|
#
|
||||||
|
# Copyright (c) 2024 SUSE LLC
|
||||||
|
#
|
||||||
|
# All modifications and additions to the file contributed by third parties
|
||||||
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
|
# upon. The license for this file, and modifications and additions to the
|
||||||
|
# file, is the same license as for the pristine package itself (unless the
|
||||||
|
# license for the pristine package is not an Open Source License, in which
|
||||||
|
# case the license is the MIT License). An "Open Source License" is a
|
||||||
|
# license that conforms to the Open Source Definition (Version 1.9)
|
||||||
|
# published by the Open Source Initiative.
|
||||||
|
|
||||||
|
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
#Compat macro for new _fillupdir macro introduced in Nov 2017
|
||||||
|
%if ! %{defined _fillupdir}
|
||||||
|
%define _fillupdir /var/adm/fillup-templates
|
||||||
|
%endif
|
||||||
|
|
||||||
|
Name: mdadm
|
||||||
|
Version: 4.3
|
||||||
|
Release: 0
|
||||||
|
BuildRequires: binutils-devel
|
||||||
|
BuildRequires: groff
|
||||||
|
BuildRequires: pkgconfig
|
||||||
|
BuildRequires: sgmltool
|
||||||
|
BuildRequires: pkgconfig(libudev)
|
||||||
|
BuildRequires: pkgconfig(systemd)
|
||||||
|
BuildRequires: pkgconfig(udev)
|
||||||
|
PreReq: %fillup_prereq
|
||||||
|
PreReq: coreutils
|
||||||
|
URL: http://www.kernel.org/pub/linux/utils/raid/mdadm/
|
||||||
|
Summary: Utility for configuring "MD" software RAID devices
|
||||||
|
License: GPL-2.0-only
|
||||||
|
Group: System/Base
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
|
Source: https://www.kernel.org/pub/linux/utils/raid/mdadm/%{name}-%{version}.tar.xz
|
||||||
|
Source1: Software-RAID.HOWTO.tar.bz2
|
||||||
|
Source2: sysconfig.mdadm
|
||||||
|
Patch1: 0001-Remove-hardcoded-checkpoint-interval-checking.patch
|
||||||
|
Patch2: 0002-monitor-refactor-checkpoint-update.patch
|
||||||
|
Patch3: 0003-Super-intel-Fix-first-checkpoint-restart.patch
|
||||||
|
Patch4: 0004-Grow-Move-update_tail-assign-to-Grow_reshape.patch
|
||||||
|
Patch5: 0005-Add-understanding-output-section-in-man.patch
|
||||||
|
Patch6: 0006-util.c-change-devnm-to-const-in-mdmon-functions.patch
|
||||||
|
Patch7: 0007-Wait-for-mdmon-when-it-is-stared-via-systemd.patch
|
||||||
|
Patch8: 0008-Detail-remove-duplicated-code.patch
|
||||||
|
Patch9: 0009-mdadm-Fix-native-detail-export.patch
|
||||||
|
Patch1001: 1001-display-timeout-status.patch
|
||||||
|
Patch1002: 1002-OnCalendar-format-fix-of-mdcheck_start-timer.patch
|
||||||
|
Patch1003: 1003-mdadm-treat-the-Dell-softraid-array-as-local-array.patch
|
||||||
|
Patch1004: 1004-call-mdadm_env.sh-from-usr-libexec-mdadm.patch
|
||||||
|
Patch1005: 1005-mdadm-enable-Intel-Alderlake-RSTe-configuration.patch
|
||||||
|
%define _udevdir %(pkg-config --variable=udevdir udev)
|
||||||
|
%define _systemdshutdowndir %{_unitdir}/../system-shutdown
|
||||||
|
|
||||||
|
%description
|
||||||
|
mdadm is a program that can be used to control Linux md devices.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%autosetup -p1 -a1
|
||||||
|
|
||||||
|
%build
|
||||||
|
make %{?_smp_mflags} CC="%__cc" CXFLAGS="%{optflags} -Wno-error" EXTRAVERSION="%{release}" SUSE=yes BINDIR=%{_sbindir}
|
||||||
|
cd Software-RAID.HOWTO
|
||||||
|
sgml2html Software-RAID.HOWTO.sgml
|
||||||
|
sgml2txt Software-RAID.HOWTO.sgml
|
||||||
|
|
||||||
|
%install
|
||||||
|
%make_install install-systemd install-udev SYSTEMD_DIR=%{_unitdir} UDEVDIR=%{_udevdir} SUSE=yes BINDIR=%{_sbindir}
|
||||||
|
rm -rf %{buildroot}/lib/udev
|
||||||
|
install -d %{buildroot}%{_fillupdir}
|
||||||
|
install -d %{buildroot}/usr/share/mdadm
|
||||||
|
install -m 755 misc/mdcheck %{buildroot}/usr/share/mdadm/mdcheck
|
||||||
|
install -m 644 %{S:2} %{buildroot}%{_fillupdir}/
|
||||||
|
install -d %{buildroot}%{_systemdshutdowndir}
|
||||||
|
install -d %{buildroot}%{_sbindir}
|
||||||
|
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rcmdmonitor
|
||||||
|
%if 0%{?suse_version} < 1550
|
||||||
|
mkdir -p %{buildroot}/sbin
|
||||||
|
ln -s %{_sbindir}/mdadm %{buildroot}/sbin/mdadm
|
||||||
|
ln -s %{_sbindir}/mdmon %{buildroot}/sbin/mdmon
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%define services mdmonitor.service mdcheck_start.service mdcheck_continue.service mdmonitor-oneshot.service
|
||||||
|
|
||||||
|
%pre
|
||||||
|
%service_add_pre %services
|
||||||
|
|
||||||
|
%post
|
||||||
|
%service_add_post %services
|
||||||
|
%{?regenerate_initrd_post}
|
||||||
|
%fillup_only
|
||||||
|
|
||||||
|
%preun
|
||||||
|
%service_del_preun %services
|
||||||
|
|
||||||
|
%postun
|
||||||
|
%service_del_postun %services
|
||||||
|
%{?regenerate_initrd_post}
|
||||||
|
|
||||||
|
%posttrans
|
||||||
|
%{?regenerate_initrd_posttrans}
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-,root,root)
|
||||||
|
%license COPYING
|
||||||
|
%doc ChangeLog README.initramfs TODO mdadm.conf-example mkinitramfs
|
||||||
|
%doc Software-RAID.HOWTO/Software-RAID.HOWTO*{.txt,.html}
|
||||||
|
%doc %{_mandir}/man?/*
|
||||||
|
%{_sbindir}/*
|
||||||
|
%if 0%{?suse_version} < 1550
|
||||||
|
/sbin/mdadm
|
||||||
|
/sbin/mdmon
|
||||||
|
%endif
|
||||||
|
%dir /usr/share/mdadm
|
||||||
|
/usr/share/mdadm/*
|
||||||
|
%{_fillupdir}/sysconfig.mdadm
|
||||||
|
%{_udevdir}/rules.d/01-md-raid-creating.rules
|
||||||
|
%{_udevdir}/rules.d/63-md-raid-arrays.rules
|
||||||
|
%{_udevdir}/rules.d/64-md-raid-assembly.rules
|
||||||
|
%{_udevdir}/rules.d/69-md-clustered-confirm-device.rules
|
||||||
|
# %%{_systemdshutdowndir}/ is not owned by all versions of systemd-mini.
|
||||||
|
# But we really do not want to pull in a full systemd, so we rather just own
|
||||||
|
# that directory by ourselves too. After all, this is allowed.
|
||||||
|
%dir %{_systemdshutdowndir}
|
||||||
|
%{_systemdshutdowndir}/mdadm.shutdown
|
||||||
|
%{_unitdir}/mdmon@.service
|
||||||
|
%{_unitdir}/mdmonitor.service
|
||||||
|
%{_unitdir}/mdadm-last-resort@.timer
|
||||||
|
%{_unitdir}/mdadm-last-resort@.service
|
||||||
|
%{_unitdir}/mdadm-grow-continue@.service
|
||||||
|
%{_unitdir}/mdcheck_continue.service
|
||||||
|
%{_unitdir}/mdcheck_continue.timer
|
||||||
|
%{_unitdir}/mdcheck_start.service
|
||||||
|
%{_unitdir}/mdcheck_start.timer
|
||||||
|
%{_unitdir}/mdmonitor-oneshot.service
|
||||||
|
%{_unitdir}/mdmonitor-oneshot.timer
|
||||||
|
%dir %{_prefix}/libexec/
|
||||||
|
%dir %{_prefix}/libexec/mdadm
|
||||||
|
%{_prefix}/libexec/mdadm/mdadm_env.sh
|
||||||
|
|
||||||
|
%changelog
|
73
sysconfig.mdadm
Normal file
73
sysconfig.mdadm
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
## Path: System/File systems/Mdadm
|
||||||
|
## Description: Additional options for the mdadm daemon (see man mdadm(8)).
|
||||||
|
##
|
||||||
|
## Type: integer
|
||||||
|
## Default: 60
|
||||||
|
#
|
||||||
|
# A delay in seconds between polling the md arrays.
|
||||||
|
#
|
||||||
|
MDADM_DELAY=60
|
||||||
|
|
||||||
|
## Type: string
|
||||||
|
## Default: ""
|
||||||
|
#
|
||||||
|
# A mail address (or comma-separated list of mail addresses) to send alerts to.
|
||||||
|
#
|
||||||
|
MDADM_MAIL="root@localhost"
|
||||||
|
|
||||||
|
## Type: string
|
||||||
|
## Default: ""
|
||||||
|
#
|
||||||
|
# A program to be run whenever an event is detected.
|
||||||
|
#
|
||||||
|
MDADM_PROGRAM=""
|
||||||
|
|
||||||
|
## Type: string
|
||||||
|
## Default: ""
|
||||||
|
#
|
||||||
|
# Monitoring MD devices.
|
||||||
|
#
|
||||||
|
MDADM_RAIDDEVICES=""
|
||||||
|
|
||||||
|
## Type: yesno
|
||||||
|
## Default: yes
|
||||||
|
#
|
||||||
|
# "yes" for scanning config file or /proc/mdstat for missing information.
|
||||||
|
#
|
||||||
|
MDADM_SCAN=yes
|
||||||
|
|
||||||
|
## Type: string
|
||||||
|
## Default: "/etc/mdadm.conf"
|
||||||
|
#
|
||||||
|
# The config file.
|
||||||
|
#
|
||||||
|
MDADM_CONFIG="/etc/mdadm.conf"
|
||||||
|
|
||||||
|
## Type: yesno
|
||||||
|
## Default: no
|
||||||
|
#
|
||||||
|
# "yes" for email to be sent on start
|
||||||
|
#
|
||||||
|
MDADM_SEND_MAIL_ON_START=no
|
||||||
|
|
||||||
|
## Type: integer
|
||||||
|
## Default: 60
|
||||||
|
#
|
||||||
|
# Timeout for udev device detection. This is the upper limit which the
|
||||||
|
# boot script will wait for udev to finish hotplug event processing.
|
||||||
|
# If not all devices are detected during boot this value should be
|
||||||
|
# increased. Setting this to '0' disables waiting for udev.
|
||||||
|
#
|
||||||
|
MDADM_DEVICE_TIMEOUT="60"
|
||||||
|
|
||||||
|
## Type: string
|
||||||
|
## Default: 6 hours
|
||||||
|
#
|
||||||
|
# Amount of time to spend checking md arrays each morning.
|
||||||
|
# A check will start on the first Sunday of the month and run
|
||||||
|
# for this long. If it does not complete, then it will be
|
||||||
|
# continued each subsequent morning until all arrays have
|
||||||
|
# been checked. Any string understood by "date --date="
|
||||||
|
# can be used. An empty string disables automatic checks.
|
||||||
|
#
|
||||||
|
MDADM_CHECK_DURATION="6 hours"
|
Loading…
Reference in New Issue
Block a user