Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package mdadm for openSUSE:Factory checked in at 2024-08-12 12:29:50 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mdadm (Old) and /work/SRC/openSUSE:Factory/.mdadm.new.7232 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mdadm" Mon Aug 12 12:29:50 2024 rev:149 rq:1193244 version:4.3 Changes: -------- --- /work/SRC/openSUSE:Factory/mdadm/mdadm.changes 2024-03-03 20:19:01.561189470 +0100 +++ /work/SRC/openSUSE:Factory/.mdadm.new.7232/mdadm.changes 2024-08-12 12:29:52.075262025 +0200 @@ -1,0 +2,8 @@ +Sat Jul 6 15:43:04 UTC 2024 - Coly Li <[email protected]> + +- util.c: change devnm to const in mdmon functions (bsc#1225307) + 0006-util.c-change-devnm-to-const-in-mdmon-functions.patch +- Wait for mdmon when it is stared via systemd (bsc#1225307) + 0007-Wait-for-mdmon-when-it-is-stared-via-systemd.patch + +------------------------------------------------------------------- New: ---- 0006-util.c-change-devnm-to-const-in-mdmon-functions.patch 0007-Wait-for-mdmon-when-it-is-stared-via-systemd.patch BETA DEBUG BEGIN: New:- util.c: change devnm to const in mdmon functions (bsc#1225307) 0006-util.c-change-devnm-to-const-in-mdmon-functions.patch - Wait for mdmon when it is stared via systemd (bsc#1225307) New:- Wait for mdmon when it is stared via systemd (bsc#1225307) 0007-Wait-for-mdmon-when-it-is-stared-via-systemd.patch BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mdadm.spec ++++++ --- /var/tmp/diff_new_pack.1qZXmW/_old 2024-08-12 12:29:55.051386083 +0200 +++ /var/tmp/diff_new_pack.1qZXmW/_new 2024-08-12 12:29:55.059386417 +0200 @@ -46,6 +46,8 @@ 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 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 ++++++ 0006-util.c-change-devnm-to-const-in-mdmon-functions.patch ++++++ >From b0f4e8e30f38d83f7e3f53d01d72d4cb3b4d42d7 Mon Sep 17 00:00:00 2001 From: Kinga Stefaniuk <[email protected]> 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 <[email protected]> Signed-off-by: Mariusz Tkaczyk <[email protected]> Signed-off-by: Coly Li <[email protected]> --- 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 ++++++ 0007-Wait-for-mdmon-when-it-is-stared-via-systemd.patch ++++++ >From aa1cc5815d2b14a8b47add18cfaa8264e19c10ce Mon Sep 17 00:00:00 2001 From: Kinga Stefaniuk <[email protected]> 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 <[email protected]> Signed-off-by: Mariusz Tkaczyk <[email protected]> Signed-off-by: Coly Li <[email protected]> --- 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
