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

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