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

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