Blame SOURCES/0036-mdadm-Fix-mdadm-r-remove-option-regression.patch

25786b
From 6c9d9260633f2c8491985b0782cf0fbd7e51651b Mon Sep 17 00:00:00 2001
25786b
From: Logan Gunthorpe <logang@deltatee.com>
25786b
Date: Wed, 22 Jun 2022 14:25:11 -0600
25786b
Subject: [PATCH 36/52] mdadm: Fix mdadm -r remove option regression
25786b
25786b
The commit noted below globally adds a parameter to the -r option but missed
25786b
the fact that -r is used for another purpose: --remove.
25786b
25786b
After that commit, a command such as:
25786b
25786b
  mdadm /dev/md0 -r /dev/loop0
25786b
25786b
will do nothing seeing the device parameter will be consumed as a
25786b
argument to the -r option; thus, there will only be one device
25786b
seen one the command line, devs_found will only be 1 and nothing will
25786b
happen.
25786b
25786b
This caused the 01r5integ and 01raid6integ tests to hang indefinitely
25786b
as mdadm did not remove the failed device. With the device not removed,
25786b
it would not be readded. Then the loop waiting for the array status to
25786b
change would loop forever.
25786b
25786b
This commit was recently reverted, but the legitimate fix for the
25786b
monitor operations was still not fixed. So add specific monitor
25786b
short ops to re-fix the --monitor -r option.
25786b
25786b
Fixes: 546047688e1c ("mdadm: fix coredump of mdadm --monitor -r")
25786b
Fixes: 190dc029b141 ("Revert "mdadm: fix coredump of mdadm --monitor -r"")
25786b
Cc: Wu Guanghao <wuguanghao3@huawei.com>
25786b
Cc: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
25786b
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
25786b
Acked-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
25786b
Signed-off-by: Jes Sorensen <jes@trained-monkey.org>
25786b
---
25786b
 ReadMe.c | 1 +
25786b
 mdadm.c  | 1 +
25786b
 mdadm.h  | 1 +
25786b
 3 files changed, 3 insertions(+)
25786b
25786b
diff --git a/ReadMe.c b/ReadMe.c
25786b
index bec1be9a..7518a32a 100644
25786b
--- a/ReadMe.c
25786b
+++ b/ReadMe.c
25786b
@@ -82,6 +82,7 @@ char Version[] = "mdadm - v" VERSION " - " VERS_DATE EXTRAVERSION "\n";
25786b
  */
25786b
 
25786b
 char short_options[]="-ABCDEFGIQhVXYWZ:vqbc:i:l:p:m:n:x:u:c:d:z:U:N:sarfRSow1tye:k:";
25786b
+char short_monitor_options[]="-ABCDEFGIQhVXYWZ:vqbc:i:l:p:m:r:n:x:u:c:d:z:U:N:safRSow1tye:k:";
25786b
 char short_bitmap_options[]=
25786b
 		"-ABCDEFGIQhVXYWZ:vqb:c:i:l:p:m:n:x:u:c:d:z:U:N:sarfRSow1tye:k:";
25786b
 char short_bitmap_auto_options[]=
25786b
diff --git a/mdadm.c b/mdadm.c
25786b
index be40686c..d0c5e6de 100644
25786b
--- a/mdadm.c
25786b
+++ b/mdadm.c
25786b
@@ -227,6 +227,7 @@ int main(int argc, char *argv[])
25786b
 			shortopt = short_bitmap_auto_options;
25786b
 			break;
25786b
 		case 'F': newmode = MONITOR;
25786b
+			shortopt = short_monitor_options;
25786b
 			break;
25786b
 		case 'G': newmode = GROW;
25786b
 			shortopt = short_bitmap_options;
25786b
diff --git a/mdadm.h b/mdadm.h
25786b
index 974415b9..163f4a49 100644
25786b
--- a/mdadm.h
25786b
+++ b/mdadm.h
25786b
@@ -419,6 +419,7 @@ enum mode {
25786b
 };
25786b
 
25786b
 extern char short_options[];
25786b
+extern char short_monitor_options[];
25786b
 extern char short_bitmap_options[];
25786b
 extern char short_bitmap_auto_options[];
25786b
 extern struct option long_options[];
25786b
-- 
25786b
2.31.1
25786b