adfbb8ebd5
If mdcheck_start service can finish check action, it doesn't need to start mdcheck_continue service. So in rhel only patch mdcheck.patch, we stop mdcheck_continue timer. And there is a history problem. It needed KillMode=none before, so it removed the upstream patch 52c67fcdd. Now this problem has been fixed, so we can do the backport more easilly now. We don't need to remove the upstream patch here again. Resolves: rhbz#2116418, rhbz#2150862, rhbz#2159584 Signed-off-by: Xiao Ni <xni@redhat.com>
173 lines
4.7 KiB
Diff
173 lines
4.7 KiB
Diff
From 420dafcd38c5949c2ddb90ad6873e7edd625db30 Mon Sep 17 00:00:00 2001
|
|
From: NeilBrown <neilb@suse.de>
|
|
Date: Mon, 20 Mar 2023 14:43:54 +1100
|
|
Subject: [PATCH 113/125] Improvements for IMSM_NO_PLATFORM testing.
|
|
|
|
Factor out IMSM_NO_PLATFORM testing into a single function that caches
|
|
the result.
|
|
|
|
Allow mdmon to explicitly set the result to "1" so that we don't need
|
|
the ENV var in the unit file
|
|
|
|
Check if the kernel command line contains "mdadm.imsm.test=1" and in
|
|
that case assert NO_PLATFORM. This simplifies testing in a virtual
|
|
machine.
|
|
|
|
Signed-off-by: NeilBrown <neilb@suse.de>
|
|
Signed-off-by: Jes Sorensen <jes@trained-monkey.org>
|
|
---
|
|
mdadm.8.in | 5 +++++
|
|
mdadm.h | 2 ++
|
|
mdmon.c | 6 ++++++
|
|
super-intel.c | 45 +++++++++++++++++++++++++++++++++++++++---
|
|
systemd/mdmon@.service | 3 ---
|
|
5 files changed, 55 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/mdadm.8.in b/mdadm.8.in
|
|
index 6f0f6c13..b7159509 100644
|
|
--- a/mdadm.8.in
|
|
+++ b/mdadm.8.in
|
|
@@ -3197,6 +3197,11 @@ 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
|
|
+.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.
|
|
+
|
|
.TP
|
|
.B MDADM_GROW_ALLOW_OLD
|
|
If an array is stopped while it is performing a reshape and that
|
|
diff --git a/mdadm.h b/mdadm.h
|
|
index 1e518276..0d995445 100644
|
|
--- a/mdadm.h
|
|
+++ b/mdadm.h
|
|
@@ -1263,6 +1263,8 @@ extern struct superswitch super0, super1;
|
|
extern struct superswitch super_imsm, super_ddf;
|
|
extern struct superswitch mbr, gpt;
|
|
|
|
+void imsm_set_no_platform(int v);
|
|
+
|
|
struct metadata_update {
|
|
int len;
|
|
char *buf;
|
|
diff --git a/mdmon.c b/mdmon.c
|
|
index 096b4d76..cef5bbc8 100644
|
|
--- a/mdmon.c
|
|
+++ b/mdmon.c
|
|
@@ -318,6 +318,12 @@ int main(int argc, char *argv[])
|
|
{NULL, 0, NULL, 0}
|
|
};
|
|
|
|
+ /*
|
|
+ * mdmon should never complain due to lack of a platform,
|
|
+ * that is mdadm's job if at all.
|
|
+ */
|
|
+ imsm_set_no_platform(1);
|
|
+
|
|
while ((opt = getopt_long(argc, argv, "thaF", options, NULL)) != -1) {
|
|
switch (opt) {
|
|
case 'a':
|
|
diff --git a/super-intel.c b/super-intel.c
|
|
index e155a8ae..a5c86cb2 100644
|
|
--- a/super-intel.c
|
|
+++ b/super-intel.c
|
|
@@ -20,6 +20,7 @@
|
|
#define HAVE_STDINT_H 1
|
|
#include "mdadm.h"
|
|
#include "mdmon.h"
|
|
+#include "dlink.h"
|
|
#include "sha1.h"
|
|
#include "platform-intel.h"
|
|
#include <values.h>
|
|
@@ -629,6 +630,44 @@ static const char *_sys_dev_type[] = {
|
|
[SYS_DEV_VMD] = "VMD"
|
|
};
|
|
|
|
+static int no_platform = -1;
|
|
+
|
|
+static int check_no_platform(void)
|
|
+{
|
|
+ static const char search[] = "mdadm.imsm.test=1";
|
|
+ FILE *fp;
|
|
+
|
|
+ if (no_platform >= 0)
|
|
+ return no_platform;
|
|
+
|
|
+ if (check_env("IMSM_NO_PLATFORM")) {
|
|
+ no_platform = 1;
|
|
+ return 1;
|
|
+ }
|
|
+ fp = fopen("/proc/cmdline", "r");
|
|
+ if (fp) {
|
|
+ char *l = conf_line(fp);
|
|
+ char *w = l;
|
|
+
|
|
+ do {
|
|
+ if (strcmp(w, search) == 0)
|
|
+ no_platform = 1;
|
|
+ w = dl_next(w);
|
|
+ } while (w != l);
|
|
+ free_line(l);
|
|
+ fclose(fp);
|
|
+ if (no_platform >= 0)
|
|
+ return no_platform;
|
|
+ }
|
|
+ no_platform = 0;
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+void imsm_set_no_platform(int v)
|
|
+{
|
|
+ no_platform = v;
|
|
+}
|
|
+
|
|
const char *get_sys_dev_type(enum sys_dev_type type)
|
|
{
|
|
if (type >= SYS_DEV_MAX)
|
|
@@ -2699,7 +2738,7 @@ static int detail_platform_imsm(int verbose, int enumerate_only, char *controlle
|
|
int result=1;
|
|
|
|
if (enumerate_only) {
|
|
- if (check_env("IMSM_NO_PLATFORM"))
|
|
+ if (check_no_platform())
|
|
return 0;
|
|
list = find_intel_devices();
|
|
if (!list)
|
|
@@ -4722,7 +4761,7 @@ static int find_intel_hba_capability(int fd, struct intel_super *super, char *de
|
|
devname);
|
|
return 1;
|
|
}
|
|
- if (!is_fd_valid(fd) || check_env("IMSM_NO_PLATFORM")) {
|
|
+ if (!is_fd_valid(fd) || check_no_platform()) {
|
|
super->orom = NULL;
|
|
super->hba = NULL;
|
|
return 0;
|
|
@@ -10697,7 +10736,7 @@ static int imsm_get_allowed_degradation(int level, int raid_disks,
|
|
******************************************************************************/
|
|
int validate_container_imsm(struct mdinfo *info)
|
|
{
|
|
- if (check_env("IMSM_NO_PLATFORM"))
|
|
+ if (check_no_platform())
|
|
return 0;
|
|
|
|
struct sys_dev *idev;
|
|
diff --git a/systemd/mdmon@.service b/systemd/mdmon@.service
|
|
index 23a375f6..020cc7e1 100644
|
|
--- a/systemd/mdmon@.service
|
|
+++ b/systemd/mdmon@.service
|
|
@@ -15,9 +15,6 @@ Documentation=man:mdmon(8)
|
|
IgnoreOnIsolate=true
|
|
|
|
[Service]
|
|
-# mdmon should never complain due to lack of a platform,
|
|
-# that is mdadm's job if at all.
|
|
-Environment=IMSM_NO_PLATFORM=1
|
|
# The mdmon starting in the initramfs (with dracut at least)
|
|
# cannot see sysfs after root is mounted, so we will have to
|
|
# 'takeover'. As the '--offroot --takeover' don't hurt when
|
|
--
|
|
2.38.1
|
|
|