Backport --offroot patches from upstream
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
This commit is contained in:
parent
9d26a69f72
commit
c68d736ff4
101
mdadm-3.2.3-Add-offroot-argument-to-mdadm.patch
Normal file
101
mdadm-3.2.3-Add-offroot-argument-to-mdadm.patch
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
From 08ca2adffffeb3bfda3cafababfc26706a60463b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jes Sorensen <Jes.Sorensen@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@redhat.com>
|
||||||
|
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
|
||||||
|
Signed-off-by: NeilBrown <neilb@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
|
||||||
|
|
79
mdadm-3.2.3-Add-offroot-argument-to-mdmon.patch
Normal file
79
mdadm-3.2.3-Add-offroot-argument-to-mdmon.patch
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
From da827518c1f062e7d49433691d33e103525f9d6a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jes Sorensen <Jes.Sorensen@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@redhat.com>
|
||||||
|
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
|
||||||
|
Signed-off-by: NeilBrown <neilb@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
|
||||||
|
|
@ -0,0 +1,75 @@
|
|||||||
|
From a0963a86e12a55d501f421048bd7c09cf4d78b93 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jes Sorensen <Jes.Sorensen@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@redhat.com>
|
||||||
|
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
|
||||||
|
Signed-off-by: NeilBrown <neilb@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
|
||||||
|
|
@ -0,0 +1,97 @@
|
|||||||
|
From eb155f6de0986dc14c37dc9c4172bf0bcb8779fe Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jes Sorensen <Jes.Sorensen@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@redhat.com>
|
||||||
|
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
|
||||||
|
Signed-off-by: NeilBrown <neilb@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
|
||||||
|
|
16
mdadm.spec
16
mdadm.spec
@ -1,7 +1,7 @@
|
|||||||
Summary: The mdadm program controls Linux md devices (software RAID arrays)
|
Summary: The mdadm program controls Linux md devices (software RAID arrays)
|
||||||
Name: mdadm
|
Name: mdadm
|
||||||
Version: 3.2.3
|
Version: 3.2.3
|
||||||
Release: 3%{?dist}
|
Release: 4%{?dist}
|
||||||
Source: http://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-%{version}.tar.bz2
|
Source: http://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-%{version}.tar.bz2
|
||||||
Source1: mdmonitor.init
|
Source1: mdmonitor.init
|
||||||
Source2: raid-check
|
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
|
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
|
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
|
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
|
Patch19: mdadm-3.2.3-udev.patch
|
||||||
Patch20: mdadm-2.5.2-static.patch
|
Patch20: mdadm-2.5.2-static.patch
|
||||||
URL: http://www.kernel.org/pub/linux/utils/raid/mdadm/
|
URL: http://www.kernel.org/pub/linux/utils/raid/mdadm/
|
||||||
@ -49,6 +53,12 @@ is not used as the system init process.
|
|||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
%patch1 -p1 -b .gcc47
|
%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
|
%patch19 -p1 -b .udev
|
||||||
%patch20 -p1 -b .static
|
%patch20 -p1 -b .static
|
||||||
|
|
||||||
@ -123,6 +133,10 @@ fi
|
|||||||
%{_initrddir}/*
|
%{_initrddir}/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jan 30 2012 Jes Sorensen <Jes.Sorensen@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@redhat.com> - 3.2.3-3
|
* Thu Jan 12 2012 Jes Sorensen <Jes.Sorensen@redhat.com> - 3.2.3-3
|
||||||
- Fix case where we have to retry in case a remove fails due to an array
|
- Fix case where we have to retry in case a remove fails due to an array
|
||||||
being busy
|
being busy
|
||||||
|
Loading…
Reference in New Issue
Block a user