forked from pool/mdadm
Accepting request 816431 from home:colyli:branches:Base:System
- OnCalendar format fix of mdcheck_start.timer (bsc#1173137) 1002-OnCalendar-format-fix-of-mdcheck_start-timer.patch - Detail: adding sync status for cluster device (bsc#1163727) 0072-Detail-adding-sync-status-for-cluster-device.patch - Monitor: improve check_one_sharer() for checking duplicated process (bsc#1168953) 0071-Monitor-improve-check_one_sharer-for-checking-duplic.patch OBS-URL: https://build.opensuse.org/request/show/816431 OBS-URL: https://build.opensuse.org/package/show/Base:System/mdadm?expand=0&rev=185
This commit is contained in:
parent
88011c48fa
commit
4bdb26e052
112
0071-Monitor-improve-check_one_sharer-for-checking-duplic.patch
Normal file
112
0071-Monitor-improve-check_one_sharer-for-checking-duplic.patch
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
From 185ec4397e61ad00dd68c841e15eaa8629eb9514 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Coly Li <colyli@suse.de>
|
||||||
|
Date: Sat, 11 Apr 2020 00:24:46 +0800
|
||||||
|
Subject: [PATCH] Monitor: improve check_one_sharer() for checking duplicated
|
||||||
|
process
|
||||||
|
Git-commit: 185ec4397e61ad00dd68c841e15eaa8629eb9514
|
||||||
|
Patch-mainline: mdadm-4.1+
|
||||||
|
References: bsc#1168953
|
||||||
|
|
||||||
|
When running mdadm monitor with scan mode, only one autorebuild process
|
||||||
|
is allowed. check_one_sharer() checks duplicated process by following
|
||||||
|
steps,
|
||||||
|
1) Read autorebuild.pid file,
|
||||||
|
- if file does not exist, no duplicated process, go to 3).
|
||||||
|
- if file exists, continue to next step.
|
||||||
|
2) Read pid number from autorebuild.pid file, then check procfs pid
|
||||||
|
directory /proc/<PID>,
|
||||||
|
- if the directory does not exist, no duplicated process, go to 3)
|
||||||
|
- if the directory exists, print error message for duplicated process
|
||||||
|
and exit this mdadm.
|
||||||
|
3) Write current pid into autorebuild.pid file, continue to monitor in
|
||||||
|
scan mode.
|
||||||
|
|
||||||
|
The problem for the above step 2) is, if after system reboots and
|
||||||
|
another different process happens to have exact same pid number which
|
||||||
|
autorebuild.pid file records, check_one_sharer() will treat it as a
|
||||||
|
duplicated mdadm process and returns error with message "Only one
|
||||||
|
autorebuild process allowed in scan mode, aborting".
|
||||||
|
|
||||||
|
This patch tries to fix the above same-pid-but-different-process issue
|
||||||
|
by one more step to check the process command name,
|
||||||
|
1) Read autorebuild.pid file
|
||||||
|
- if file does not exist, no duplicated process, go to 4).
|
||||||
|
- if file exists, continue to next step.
|
||||||
|
2) Read pid number from autorebuild.pid file, then check procfs file
|
||||||
|
comm with the specific pid directory /proc/<PID>/comm
|
||||||
|
- if the file does not exit, it means the directory /proc/<PID> does
|
||||||
|
not exist, go to 4)
|
||||||
|
- if the file exits, continue next step
|
||||||
|
3) Read process command name from /proc/<PIC>/comm, compare the command
|
||||||
|
name with "mdadm" process name,
|
||||||
|
- if not equal, no duplicated process, goto 4)
|
||||||
|
- if strings are equal, print error message for duplicated process
|
||||||
|
and exit this mdadm.
|
||||||
|
4) Write current pid into autorebuild.pid file, continue to monitor in
|
||||||
|
scan mode.
|
||||||
|
|
||||||
|
Now check_one_sharer() returns error for duplicated process only when
|
||||||
|
the recorded pid from autorebuild.pid exists, and the process has exact
|
||||||
|
same command name as "mdadm".
|
||||||
|
|
||||||
|
Reported-by: Shinkichi Yamazaki <shinkichi.yamazaki@suse.com>
|
||||||
|
Signed-off-by: Coly Li <colyli@suse.de>
|
||||||
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||||
|
---
|
||||||
|
Monitor.c | 32 ++++++++++++++++++++------------
|
||||||
|
1 file changed, 20 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Monitor.c b/Monitor.c
|
||||||
|
index b527165..2d6b3b9 100644
|
||||||
|
--- a/Monitor.c
|
||||||
|
+++ b/Monitor.c
|
||||||
|
@@ -301,26 +301,34 @@ static int make_daemon(char *pidfile)
|
||||||
|
|
||||||
|
static int check_one_sharer(int scan)
|
||||||
|
{
|
||||||
|
- int pid, rv;
|
||||||
|
+ int pid;
|
||||||
|
+ FILE *comm_fp;
|
||||||
|
FILE *fp;
|
||||||
|
- char dir[20];
|
||||||
|
+ char comm_path[100];
|
||||||
|
char path[100];
|
||||||
|
- struct stat buf;
|
||||||
|
+ char comm[20];
|
||||||
|
+
|
||||||
|
sprintf(path, "%s/autorebuild.pid", MDMON_DIR);
|
||||||
|
fp = fopen(path, "r");
|
||||||
|
if (fp) {
|
||||||
|
if (fscanf(fp, "%d", &pid) != 1)
|
||||||
|
pid = -1;
|
||||||
|
- sprintf(dir, "/proc/%d", pid);
|
||||||
|
- rv = stat(dir, &buf);
|
||||||
|
- if (rv != -1) {
|
||||||
|
- if (scan) {
|
||||||
|
- pr_err("Only one autorebuild process allowed in scan mode, aborting\n");
|
||||||
|
- fclose(fp);
|
||||||
|
- return 1;
|
||||||
|
- } else {
|
||||||
|
- pr_err("Warning: One autorebuild process already running.\n");
|
||||||
|
+ snprintf(comm_path, sizeof(comm_path),
|
||||||
|
+ "/proc/%d/comm", pid);
|
||||||
|
+ comm_fp = fopen(comm_path, "r");
|
||||||
|
+ if (comm_fp) {
|
||||||
|
+ if (fscanf(comm_fp, "%s", comm) &&
|
||||||
|
+ strncmp(basename(comm), Name, strlen(Name)) == 0) {
|
||||||
|
+ if (scan) {
|
||||||
|
+ pr_err("Only one autorebuild process allowed in scan mode, aborting\n");
|
||||||
|
+ fclose(comm_fp);
|
||||||
|
+ fclose(fp);
|
||||||
|
+ return 1;
|
||||||
|
+ } else {
|
||||||
|
+ pr_err("Warning: One autorebuild process already running.\n");
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
+ fclose(comm_fp);
|
||||||
|
}
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.25.0
|
||||||
|
|
88
0072-Detail-adding-sync-status-for-cluster-device.patch
Normal file
88
0072-Detail-adding-sync-status-for-cluster-device.patch
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
From 1c294b5d960abeeb9e0f188af294d019bc82b20e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lidong Zhong <lidong.zhong@suse.com>
|
||||||
|
Date: Tue, 14 Apr 2020 16:19:41 +0800
|
||||||
|
Subject: [PATCH] Detail: adding sync status for cluster device
|
||||||
|
Git-commit: 1c294b5d960abeeb9e0f188af294d019bc82b20e
|
||||||
|
Patch-mainline: mdadm-4.1+
|
||||||
|
References: bsc#1163727
|
||||||
|
|
||||||
|
On the node with /proc/mdstat is
|
||||||
|
|
||||||
|
Personalities : [raid1]
|
||||||
|
md0 : active raid1 sdb[4] sdc[3] sdd[2]
|
||||||
|
1046528 blocks super 1.2 [3/2] [UU_]
|
||||||
|
recover=REMOTE
|
||||||
|
bitmap: 1/1 pages [4KB], 65536KB chunk
|
||||||
|
|
||||||
|
Let's change the 'State' of 'mdadm -Q -D' accordingly
|
||||||
|
State : clean, degraded
|
||||||
|
With this patch, it will be
|
||||||
|
State : clean, degraded, recovering (REMOTE)
|
||||||
|
|
||||||
|
Signed-off-by: Lidong Zhong <lidong.zhong@suse.com>
|
||||||
|
Acked-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com>
|
||||||
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||||
|
---
|
||||||
|
Detail.c | 9 ++++++---
|
||||||
|
mdadm.h | 3 ++-
|
||||||
|
mdstat.c | 2 ++
|
||||||
|
3 files changed, 10 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Detail.c b/Detail.c
|
||||||
|
index daec4f1..24eeba0 100644
|
||||||
|
--- a/Detail.c
|
||||||
|
+++ b/Detail.c
|
||||||
|
@@ -498,17 +498,20 @@ int Detail(char *dev, struct context *c)
|
||||||
|
} else
|
||||||
|
arrayst = "active";
|
||||||
|
|
||||||
|
- printf(" State : %s%s%s%s%s%s \n",
|
||||||
|
+ printf(" State : %s%s%s%s%s%s%s \n",
|
||||||
|
arrayst, st,
|
||||||
|
(!e || (e->percent < 0 &&
|
||||||
|
e->percent != RESYNC_PENDING &&
|
||||||
|
- e->percent != RESYNC_DELAYED)) ?
|
||||||
|
+ e->percent != RESYNC_DELAYED &&
|
||||||
|
+ e->percent != RESYNC_REMOTE)) ?
|
||||||
|
"" : sync_action[e->resync],
|
||||||
|
larray_size ? "": ", Not Started",
|
||||||
|
(e && e->percent == RESYNC_DELAYED) ?
|
||||||
|
" (DELAYED)": "",
|
||||||
|
(e && e->percent == RESYNC_PENDING) ?
|
||||||
|
- " (PENDING)": "");
|
||||||
|
+ " (PENDING)": "",
|
||||||
|
+ (e && e->percent == RESYNC_REMOTE) ?
|
||||||
|
+ " (REMOTE)": "");
|
||||||
|
} else if (inactive && !is_container) {
|
||||||
|
printf(" State : inactive\n");
|
||||||
|
}
|
||||||
|
diff --git a/mdadm.h b/mdadm.h
|
||||||
|
index d94569f..399478b 100644
|
||||||
|
--- a/mdadm.h
|
||||||
|
+++ b/mdadm.h
|
||||||
|
@@ -1815,7 +1815,8 @@ enum r0layout {
|
||||||
|
#define RESYNC_NONE -1
|
||||||
|
#define RESYNC_DELAYED -2
|
||||||
|
#define RESYNC_PENDING -3
|
||||||
|
-#define RESYNC_UNKNOWN -4
|
||||||
|
+#define RESYNC_REMOTE -4
|
||||||
|
+#define RESYNC_UNKNOWN -5
|
||||||
|
|
||||||
|
/* When using "GET_DISK_INFO" it isn't certain how high
|
||||||
|
* we need to check. So we impose an absolute limit of
|
||||||
|
diff --git a/mdstat.c b/mdstat.c
|
||||||
|
index 7e600d0..20577a3 100644
|
||||||
|
--- a/mdstat.c
|
||||||
|
+++ b/mdstat.c
|
||||||
|
@@ -257,6 +257,8 @@ struct mdstat_ent *mdstat_read(int hold, int start)
|
||||||
|
ent->percent = RESYNC_DELAYED;
|
||||||
|
if (l > 8 && strcmp(w+l-8, "=PENDING") == 0)
|
||||||
|
ent->percent = RESYNC_PENDING;
|
||||||
|
+ if (l > 7 && strcmp(w+l-7, "=REMOTE") == 0)
|
||||||
|
+ ent->percent = RESYNC_REMOTE;
|
||||||
|
} else if (ent->percent == RESYNC_NONE &&
|
||||||
|
w[0] >= '0' &&
|
||||||
|
w[0] <= '9' &&
|
||||||
|
--
|
||||||
|
2.25.0
|
||||||
|
|
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
|
@ -1,3 +1,19 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jun 22 16:12:47 UTC 2020 - Coly Li <colyli@suse.com>
|
||||||
|
|
||||||
|
- OnCalendar format fix of mdcheck_start.timer (bsc#1173137)
|
||||||
|
1002-OnCalendar-format-fix-of-mdcheck_start-timer.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jun 22 15:33:44 UTC 2020 - Coly Li <colyli@suse.com>
|
||||||
|
|
||||||
|
- Detail: adding sync status for cluster device
|
||||||
|
(bsc#1163727)
|
||||||
|
0072-Detail-adding-sync-status-for-cluster-device.patch
|
||||||
|
- Monitor: improve check_one_sharer() for checking duplicated process
|
||||||
|
(bsc#1168953)
|
||||||
|
0071-Monitor-improve-check_one_sharer-for-checking-duplic.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Mar 27 03:52:47 UTC 2020 - Neil Brown <nfbrown@suse.com>
|
Fri Mar 27 03:52:47 UTC 2020 - Neil Brown <nfbrown@suse.com>
|
||||||
|
|
||||||
|
@ -107,7 +107,10 @@ Patch62: 0067-mdadm.8-add-note-information-for-raid0-growing-opera.patch
|
|||||||
Patch63: 0068-Remove-the-legacy-whitespace.patch
|
Patch63: 0068-Remove-the-legacy-whitespace.patch
|
||||||
Patch64: 0069-imsm-pass-subarray-id-to-kill_subarray-function.patch
|
Patch64: 0069-imsm-pass-subarray-id-to-kill_subarray-function.patch
|
||||||
Patch65: 0070-imsm-Remove-dump-restore-implementation.patch
|
Patch65: 0070-imsm-Remove-dump-restore-implementation.patch
|
||||||
|
Patch66: 0071-Monitor-improve-check_one_sharer-for-checking-duplic.patch
|
||||||
|
Patch67: 0072-Detail-adding-sync-status-for-cluster-device.patch
|
||||||
Patch1001: 1001-display-timeout-status.patch
|
Patch1001: 1001-display-timeout-status.patch
|
||||||
|
Patch1002: 1002-OnCalendar-format-fix-of-mdcheck_start-timer.patch
|
||||||
%define _udevdir %(pkg-config --variable=udevdir udev)
|
%define _udevdir %(pkg-config --variable=udevdir udev)
|
||||||
%define _systemdshutdowndir %{_unitdir}/../system-shutdown
|
%define _systemdshutdowndir %{_unitdir}/../system-shutdown
|
||||||
|
|
||||||
@ -182,7 +185,10 @@ mdadm is a program that can be used to control Linux md devices.
|
|||||||
%patch63 -p1
|
%patch63 -p1
|
||||||
%patch64 -p1
|
%patch64 -p1
|
||||||
%patch65 -p1
|
%patch65 -p1
|
||||||
|
%patch66 -p1
|
||||||
|
%patch67 -p1
|
||||||
%patch1001 -p1
|
%patch1001 -p1
|
||||||
|
%patch1002 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
make %{?_smp_mflags} CC="%__cc" CXFLAGS="%{optflags} -Wno-error" SUSE=yes
|
make %{?_smp_mflags} CC="%__cc" CXFLAGS="%{optflags} -Wno-error" SUSE=yes
|
||||||
|
Loading…
Reference in New Issue
Block a user