[mdadm/f15: 1/2] Backport --offroot patches from upstream
Jes Sorensen
jsorensen at fedoraproject.org
Mon Jan 30 15:09:24 UTC 2012
commit c68d736ff430567819b10439acce7874ae869518
Author: Jes Sorensen <jes at monkeybay.(none)>
Date: Mon Jan 30 17:05:23 2012 +0100
Backport --offroot patches from upstream
Signed-off-by: Jes Sorensen <Jes.Sorensen at redhat.com>
mdadm-3.2.3-Add-offroot-argument-to-mdadm.patch | 101 ++++++++++++++++++++
mdadm-3.2.3-Add-offroot-argument-to-mdmon.patch | 79 +++++++++++++++
...-with-offroot-if-mdadm-was-launched-with-.patch | 75 +++++++++++++++
...getopt_long-to-parse-command-line-options.patch | 97 +++++++++++++++++++
mdadm.spec | 16 +++-
5 files changed, 367 insertions(+), 1 deletions(-)
---
diff --git a/mdadm-3.2.3-Add-offroot-argument-to-mdadm.patch b/mdadm-3.2.3-Add-offroot-argument-to-mdadm.patch
new file mode 100644
index 0000000..7c67e1f
--- /dev/null
+++ b/mdadm-3.2.3-Add-offroot-argument-to-mdadm.patch
@@ -0,0 +1,101 @@
+From 08ca2adffffeb3bfda3cafababfc26706a60463b Mon Sep 17 00:00:00 2001
+From: Jes Sorensen <Jes.Sorensen at redhat.com>
+Date: Wed, 25 Jan 2012 15:18:02 +0100
+Subject: [PATCH 2/4] Add --offroot argument to mdadm
+
+When --offroot is specified, mdadm will change the first character of
+argv[0] to '@'. This is used to signal to systemd that mdadm was
+launched from initramfs and should not be shut down before returning
+to the initramfs.
+
+Acked-by: Doug Ledford <dledford at redhat.com>
+Signed-off-by: Jes Sorensen <Jes.Sorensen at redhat.com>
+Signed-off-by: NeilBrown <neilb at suse.de>
+---
+ ReadMe.c | 5 +++++
+ mdadm.8.in | 12 ++++++++++++
+ mdadm.c | 9 +++++++++
+ mdadm.h | 1 +
+ 4 files changed, 27 insertions(+), 0 deletions(-)
+
+diff --git a/ReadMe.c b/ReadMe.c
+index 9aa798b..a60e11b 100644
+--- a/ReadMe.c
++++ b/ReadMe.c
+@@ -111,6 +111,7 @@ struct option long_options[] = {
+ {"kill-subarray", 1, 0, KillSubarray},
+ {"update-subarray", 1, 0, UpdateSubarray},
+ {"udev-rules", 2, 0, UdevRules},
++ {"offroot", 0, 0, OffRootOpt},
+
+ /* synonyms */
+ {"monitor", 0, 0, 'F'},
+@@ -268,6 +269,10 @@ char OptionHelp[] =
+ " --query -Q : Display general information about how a\n"
+ " device relates to the md driver\n"
+ " --auto-detect : Start arrays auto-detected by the kernel\n"
++" --offroot : Set first character of argv[0] to @ to indicate the\n"
++" application was launched from initrd/initramfs and\n"
++" should not be shutdown by systemd as part of the\n"
++" regular shutdown process.\n"
+ ;
+ /*
+ "\n"
+diff --git a/mdadm.8.in b/mdadm.8.in
+index 27be110..4f06a88 100644
+--- a/mdadm.8.in
++++ b/mdadm.8.in
+@@ -255,6 +255,18 @@ Avoid printing purely informative messages. With this,
+ will be silent unless there is something really important to report.
+
+ .TP
++.BR \-\-offroot
++Set first character of argv[0] to @ to indicate mdadm was launched
++from initrd/initramfs and should not be shutdown by systemd as part of
++the regular shutdown process. This option is normally only used by
++the system's initscripts. Please see here for more details on how
++systemd handled argv[0]:
++.IP
++.B http://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons
++.PP
++
++
++.TP
+ .BR \-f ", " \-\-force
+ Be more forceful about certain operations. See the various modes for
+ the exact meaning of this option in different contexts.
+diff --git a/mdadm.c b/mdadm.c
+index f07fac2..78f28d5 100644
+--- a/mdadm.c
++++ b/mdadm.c
+@@ -174,6 +174,15 @@ int main(int argc, char *argv[])
+ homehost = optarg;
+ continue;
+
++ /*
++ * --offroot sets first char of argv[0] to @. This is used
++ * by systemd to signal that the tast was launched from
++ * initrd/initramfs and should be preserved during shutdown
++ */
++ case OffRootOpt:
++ argv[0][0] = '@';
++ continue;
++
+ case ':':
+ case '?':
+ fputs(Usage, stderr);
+diff --git a/mdadm.h b/mdadm.h
+index 381ef86..fec93aa 100644
+--- a/mdadm.h
++++ b/mdadm.h
+@@ -321,6 +321,7 @@ enum special_options {
+ UdevRules,
+ FreezeReshape,
+ Continue,
++ OffRootOpt,
+ };
+
+ /* structures read from config file */
+--
+1.7.8.4
+
diff --git a/mdadm-3.2.3-Add-offroot-argument-to-mdmon.patch b/mdadm-3.2.3-Add-offroot-argument-to-mdmon.patch
new file mode 100644
index 0000000..339b780
--- /dev/null
+++ b/mdadm-3.2.3-Add-offroot-argument-to-mdmon.patch
@@ -0,0 +1,79 @@
+From da827518c1f062e7d49433691d33e103525f9d6a Mon Sep 17 00:00:00 2001
+From: Jes Sorensen <Jes.Sorensen at redhat.com>
+Date: Wed, 25 Jan 2012 15:18:03 +0100
+Subject: [PATCH 3/4] Add --offroot argument to mdmon
+
+Acked-by: Doug Ledford <dledford at redhat.com>
+Signed-off-by: Jes Sorensen <Jes.Sorensen at redhat.com>
+Signed-off-by: NeilBrown <neilb at suse.de>
+---
+ mdmon.8 | 12 +++++++++++-
+ mdmon.c | 8 ++++++++
+ 2 files changed, 19 insertions(+), 1 deletions(-)
+
+diff --git a/mdmon.8 b/mdmon.8
+index 8c1ce5f..a9178b6 100644
+--- a/mdmon.8
++++ b/mdmon.8
+@@ -5,7 +5,7 @@ mdmon \- monitor MD external metadata arrays
+
+ .SH SYNOPSIS
+
+-.BI mdmon " [--all] [--takeover] CONTAINER"
++.BI mdmon " [--all] [--takeover] [--offroot] CONTAINER"
+
+ .SH OVERVIEW
+ The 2.6.27 kernel brings the ability to support external metadata arrays.
+@@ -165,6 +165,16 @@ argument is over-written with the name of the container. To allow for
+ containers with names longer than 5 characters, this argument can be
+ arbitrarily extended, e.g. to
+ .BR \-\-all-active-arrays .
++.TP
++.BR \-\-offroot
++Set first character of argv[0] to @ to indicate mdmon was launched
++from initrd/initramfs and should not be shutdown by systemd as part of
++the regular shutdown process. This option is normally only used by
++the system's initscripts. Please see here for more details on how
++systemd handled argv[0]:
++.IP
++.B http://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons
++.PP
+
+ .PP
+ Note that
+diff --git a/mdmon.c b/mdmon.c
+index a65c4a4..2093476 100644
+--- a/mdmon.c
++++ b/mdmon.c
+@@ -272,6 +272,10 @@ void usage(void)
+ " --help -h : This message\n"
+ " --all : All devices\n"
+ " --takeover -t : Takeover container\n"
++" --offroot : Set first character of argv[0] to @ to indicate the\n"
++" application was launched from initrd/initramfs and\n"
++" should not be shutdown by systemd as part of the\n"
++" regular shutdown process.\n"
+ );
+ exit(2);
+ }
+@@ -291,6 +295,7 @@ int main(int argc, char *argv[])
+ {"all", 0, NULL, 'a'},
+ {"takeover", 0, NULL, 't'},
+ {"help", 0, NULL, 'h'},
++ {"offroot", 0, NULL, OffRootOpt},
+ {NULL, 0, NULL, 0}
+ };
+
+@@ -304,6 +309,9 @@ int main(int argc, char *argv[])
+ container_name = optarg;
+ takeover = 1;
+ break;
++ case OffRootOpt:
++ argv[0][0] = '@';
++ break;
+ case 'h':
+ default:
+ usage();
+--
+1.7.8.4
+
diff --git a/mdadm-3.2.3-Spawn-mdmon-with-offroot-if-mdadm-was-launched-with-.patch b/mdadm-3.2.3-Spawn-mdmon-with-offroot-if-mdadm-was-launched-with-.patch
new file mode 100644
index 0000000..1d677c4
--- /dev/null
+++ b/mdadm-3.2.3-Spawn-mdmon-with-offroot-if-mdadm-was-launched-with-.patch
@@ -0,0 +1,75 @@
+From a0963a86e12a55d501f421048bd7c09cf4d78b93 Mon Sep 17 00:00:00 2001
+From: Jes Sorensen <Jes.Sorensen at redhat.com>
+Date: Wed, 25 Jan 2012 15:18:04 +0100
+Subject: [PATCH 4/4] Spawn mdmon with --offroot if mdadm was launched with
+ --offroot
+
+Acked-by: Doug Ledford <dledford at redhat.com>
+Signed-off-by: Jes Sorensen <Jes.Sorensen at redhat.com>
+Signed-off-by: NeilBrown <neilb at suse.de>
+---
+ mdadm.c | 1 +
+ mdadm.h | 2 ++
+ util.c | 17 +++++++++++++----
+ 3 files changed, 16 insertions(+), 4 deletions(-)
+
+diff --git a/mdadm.c b/mdadm.c
+index 78f28d5..1efa3e8 100644
+--- a/mdadm.c
++++ b/mdadm.c
+@@ -181,6 +181,7 @@ int main(int argc, char *argv[])
+ */
+ case OffRootOpt:
+ argv[0][0] = '@';
++ __offroot = 1;
+ continue;
+
+ case ':':
+diff --git a/mdadm.h b/mdadm.h
+index fec93aa..d862b3e 100644
+--- a/mdadm.h
++++ b/mdadm.h
+@@ -1383,3 +1383,5 @@ static inline int xasprintf(char **strp, const char *fmt, ...) {
+
+ #define PROCESS_DELAYED -2
+ #define PROCESS_PENDING -3
++
++extern int __offroot;
+diff --git a/util.c b/util.c
+index 6985a70..4ba44e6 100644
+--- a/util.c
++++ b/util.c
+@@ -32,6 +32,8 @@
+ #include <dirent.h>
+ #include <signal.h>
+
++int __offroot;
++
+ /*
+ * following taken from linux/blkpg.h because they aren't
+ * anywhere else and it isn't safe to #include linux/ * stuff.
+@@ -1622,10 +1624,17 @@ int start_mdmon(int devnum)
+ skipped = 0;
+
+ for (i=0; paths[i]; i++)
+- if (paths[i][0])
+- execl(paths[i], "mdmon",
+- devnum2devname(devnum),
+- NULL);
++ if (paths[i][0]) {
++ if (__offroot) {
++ execl(paths[i], "mdmon", "--offroot",
++ devnum2devname(devnum),
++ NULL);
++ } else {
++ execl(paths[i], "mdmon",
++ devnum2devname(devnum),
++ NULL);
++ }
++ }
+ exit(1);
+ case -1: fprintf(stderr, Name ": cannot run mdmon. "
+ "Array remains readonly\n");
+--
+1.7.8.4
+
diff --git a/mdadm-3.2.3-mdmon-Use-getopt_long-to-parse-command-line-options.patch b/mdadm-3.2.3-mdmon-Use-getopt_long-to-parse-command-line-options.patch
new file mode 100644
index 0000000..e191997
--- /dev/null
+++ b/mdadm-3.2.3-mdmon-Use-getopt_long-to-parse-command-line-options.patch
@@ -0,0 +1,97 @@
+From eb155f6de0986dc14c37dc9c4172bf0bcb8779fe Mon Sep 17 00:00:00 2001
+From: Jes Sorensen <Jes.Sorensen at redhat.com>
+Date: Wed, 25 Jan 2012 15:18:01 +0100
+Subject: [PATCH 1/4] mdmon: Use getopt_long() to parse command line options
+
+This changes mdmon over to use getopt_long() for option parsing,
+making it easier to add new options. In addition this patch introduces
+a short version -t for --takeover and adds -h/--help.
+
+Acked-by: Doug Ledford <dledford at redhat.com>
+Signed-off-by: Jes Sorensen <Jes.Sorensen at redhat.com>
+Signed-off-by: NeilBrown <neilb at suse.de>
+---
+ mdmon.c | 51 ++++++++++++++++++++++++++++++++++++++++-----------
+ 1 files changed, 40 insertions(+), 11 deletions(-)
+
+diff --git a/mdmon.c b/mdmon.c
+index b6ae0e6..a65c4a4 100644
+--- a/mdmon.c
++++ b/mdmon.c
+@@ -265,7 +265,14 @@ static int do_fork(void)
+
+ void usage(void)
+ {
+- fprintf(stderr, "Usage: mdmon [--all] [--takeover] CONTAINER\n");
++ fprintf(stderr,
++"Usage: mdmon [options] CONTAINER\n"
++"\n"
++"Options are:\n"
++" --help -h : This message\n"
++" --all : All devices\n"
++" --takeover -t : Takeover container\n"
++);
+ exit(2);
+ }
+
+@@ -277,25 +284,47 @@ int main(int argc, char *argv[])
+ int devnum;
+ char *devname;
+ int status = 0;
+- int arg;
++ int opt;
+ int all = 0;
+ int takeover = 0;
+-
+- for (arg = 1; arg < argc; arg++) {
+- if (strncmp(argv[arg], "--all",5) == 0 ||
+- strcmp(argv[arg], "/proc/mdstat") == 0) {
+- container_name = argv[arg];
++ static struct option options[] = {
++ {"all", 0, NULL, 'a'},
++ {"takeover", 0, NULL, 't'},
++ {"help", 0, NULL, 'h'},
++ {NULL, 0, NULL, 0}
++ };
++
++ while ((opt = getopt_long(argc, argv, "th", options, NULL)) != -1) {
++ switch (opt) {
++ case 'a':
++ container_name = argv[optind-1];
+ all = 1;
+- } else if (strcmp(argv[arg], "--takeover") == 0)
++ break;
++ case 't':
++ container_name = optarg;
+ takeover = 1;
+- else if (container_name == NULL)
+- container_name = argv[arg];
+- else
++ break;
++ case 'h':
++ default:
+ usage();
++ break;
++ }
+ }
++
++ if (all == 0 && container_name == NULL) {
++ if (argv[optind])
++ container_name = argv[optind];
++ }
++
+ if (container_name == NULL)
+ usage();
+
++ if (argc - optind > 1)
++ usage();
++
++ if (strcmp(container_name, "/proc/mdstat") == 0)
++ all = 1;
++
+ if (all) {
+ struct mdstat_ent *mdstat, *e;
+ int container_len = strlen(container_name);
+--
+1.7.8.4
+
diff --git a/mdadm.spec b/mdadm.spec
index b04c119..45c58eb 100644
--- a/mdadm.spec
+++ b/mdadm.spec
@@ -1,7 +1,7 @@
Summary: The mdadm program controls Linux md devices (software RAID arrays)
Name: mdadm
Version: 3.2.3
-Release: 3%{?dist}
+Release: 4%{?dist}
Source: http://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-%{version}.tar.bz2
Source1: mdmonitor.init
Source2: raid-check
@@ -14,6 +14,10 @@ Source8: mdadm.conf
Patch1: mdadm-3.2.3-Work-around-gcc-4.7-s-strict-aliasing-checks.patch
Patch2: mdadm-3.2.3-monitor-make-return-from-read_and_act-more-symbolic.patch
Patch3: mdadm-3.2.3-monitor-ensure-we-retry-soon-when-remove-fails.patch
+Patch4: mdadm-3.2.3-mdmon-Use-getopt_long-to-parse-command-line-options.patch
+Patch5: mdadm-3.2.3-Add-offroot-argument-to-mdadm.patch
+Patch6: mdadm-3.2.3-Add-offroot-argument-to-mdmon.patch
+Patch7: mdadm-3.2.3-Spawn-mdmon-with-offroot-if-mdadm-was-launched-with-.patch
Patch19: mdadm-3.2.3-udev.patch
Patch20: mdadm-2.5.2-static.patch
URL: http://www.kernel.org/pub/linux/utils/raid/mdadm/
@@ -49,6 +53,12 @@ is not used as the system init process.
%prep
%setup -q
%patch1 -p1 -b .gcc47
+%patch2 -p1 -b .read
+%patch3 -p1 -b .retry
+%patch4 -p1 -b .getopt
+%patch5 -p1 -b .offroot-mdadm
+%patch6 -p1 -b .offroot-mdmon
+%patch7 -p1 -b .offroot-spawn
%patch19 -p1 -b .udev
%patch20 -p1 -b .static
@@ -123,6 +133,10 @@ fi
%{_initrddir}/*
%changelog
+* Mon Jan 30 2012 Jes Sorensen <Jes.Sorensen at redhat.com> - 3.2.3-4
+- Add support for --offroot to mdadm/mdmon
+- Resolves: bz785739 (rawhide) bz785737 (f16) bz771405 (f15)
+
* Thu Jan 12 2012 Jes Sorensen <Jes.Sorensen at redhat.com> - 3.2.3-3
- Fix case where we have to retry in case a remove fails due to an array
being busy
More information about the scm-commits
mailing list