From bc288ab69f304d2aa9d8c9da938499c6f04e35949c79ef33d40eb50b49391066 Mon Sep 17 00:00:00 2001 From: Marcus Meissner Date: Thu, 25 Jun 2020 05:43:47 +0000 Subject: [PATCH] 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 --- ...check_one_sharer-for-checking-duplic.patch | 112 ++++++++++++++++++ ...dding-sync-status-for-cluster-device.patch | 88 ++++++++++++++ ...ar-format-fix-of-mdcheck_start-timer.patch | 25 ++++ mdadm.changes | 16 +++ mdadm.spec | 6 + 5 files changed, 247 insertions(+) create mode 100644 0071-Monitor-improve-check_one_sharer-for-checking-duplic.patch create mode 100644 0072-Detail-adding-sync-status-for-cluster-device.patch create mode 100644 1002-OnCalendar-format-fix-of-mdcheck_start-timer.patch diff --git a/0071-Monitor-improve-check_one_sharer-for-checking-duplic.patch b/0071-Monitor-improve-check_one_sharer-for-checking-duplic.patch new file mode 100644 index 0000000..bb98c11 --- /dev/null +++ b/0071-Monitor-improve-check_one_sharer-for-checking-duplic.patch @@ -0,0 +1,112 @@ +From 185ec4397e61ad00dd68c841e15eaa8629eb9514 Mon Sep 17 00:00:00 2001 +From: Coly Li +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/, + - 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//comm + - if the file does not exit, it means the directory /proc/ does + not exist, go to 4) + - if the file exits, continue next step +3) Read process command name from /proc//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 +Signed-off-by: Coly Li +Signed-off-by: Jes Sorensen +--- + 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 + diff --git a/0072-Detail-adding-sync-status-for-cluster-device.patch b/0072-Detail-adding-sync-status-for-cluster-device.patch new file mode 100644 index 0000000..fbe6786 --- /dev/null +++ b/0072-Detail-adding-sync-status-for-cluster-device.patch @@ -0,0 +1,88 @@ +From 1c294b5d960abeeb9e0f188af294d019bc82b20e Mon Sep 17 00:00:00 2001 +From: Lidong Zhong +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 +Acked-by: Guoqing Jiang +Signed-off-by: Jes Sorensen +--- + 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 + diff --git a/1002-OnCalendar-format-fix-of-mdcheck_start-timer.patch b/1002-OnCalendar-format-fix-of-mdcheck_start-timer.patch new file mode 100644 index 0000000..3ca633b --- /dev/null +++ b/1002-OnCalendar-format-fix-of-mdcheck_start-timer.patch @@ -0,0 +1,25 @@ +From: Ali Abdallah +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 +Acked-by: Coly Li +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 diff --git a/mdadm.changes b/mdadm.changes index 3c26b79..5257628 100644 --- a/mdadm.changes +++ b/mdadm.changes @@ -1,3 +1,19 @@ +------------------------------------------------------------------- +Mon Jun 22 16:12:47 UTC 2020 - Coly Li + +- 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 + +- 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 diff --git a/mdadm.spec b/mdadm.spec index e598841..ce27e6d 100644 --- a/mdadm.spec +++ b/mdadm.spec @@ -107,7 +107,10 @@ Patch62: 0067-mdadm.8-add-note-information-for-raid0-growing-opera.patch Patch63: 0068-Remove-the-legacy-whitespace.patch Patch64: 0069-imsm-pass-subarray-id-to-kill_subarray-function.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 +Patch1002: 1002-OnCalendar-format-fix-of-mdcheck_start-timer.patch %define _udevdir %(pkg-config --variable=udevdir udev) %define _systemdshutdowndir %{_unitdir}/../system-shutdown @@ -182,7 +185,10 @@ mdadm is a program that can be used to control Linux md devices. %patch63 -p1 %patch64 -p1 %patch65 -p1 +%patch66 -p1 +%patch67 -p1 %patch1001 -p1 +%patch1002 -p1 %build make %{?_smp_mflags} CC="%__cc" CXFLAGS="%{optflags} -Wno-error" SUSE=yes