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

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