All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/4] add --offroot argument to mdadm/mdmon
@ 2012-01-25 15:18 Jes.Sorensen
  2012-01-25 15:18 ` [PATCH 1/4] mdmon: Use getopt_long() to parse command line options Jes.Sorensen
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Jes.Sorensen @ 2012-01-25 15:18 UTC (permalink / raw)
  To: neilb; +Cc: linux-raid, dledford, kay, harald, lpoetter, mschmidt

From: Jes Sorensen <Jes.Sorensen@redhat.com>

Hi,

Here is v3, also known as the perfect<tm> version of the of the
systemd/dracut fixes for preboot/offroot/initrd handling in
mdadm/mdmon. I have changed the argument now to --offroot based on the
input I received. 

Cheers,
Jes


Jes Sorensen (4):
  mdmon: Use getopt_long() to parse command line options
  Add --offroot argument to mdadm
  Add --offroot argument to mdmon
  Spawn mdmon with --offroot if mdadm was launched with --offroot

 ReadMe.c   |    5 +++++
 mdadm.8.in |   12 ++++++++++++
 mdadm.c    |   10 ++++++++++
 mdadm.h    |    3 +++
 mdmon.8    |   12 +++++++++++-
 mdmon.c    |   59 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
 util.c     |   17 +++++++++++++----
 7 files changed, 102 insertions(+), 16 deletions(-)

-- 
1.7.8.3


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/4] mdmon: Use getopt_long() to parse command line options
  2012-01-25 15:18 [PATCH v3 0/4] add --offroot argument to mdadm/mdmon Jes.Sorensen
@ 2012-01-25 15:18 ` Jes.Sorensen
  2012-01-25 15:18 ` [PATCH 2/4] Add --offroot argument to mdadm Jes.Sorensen
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Jes.Sorensen @ 2012-01-25 15:18 UTC (permalink / raw)
  To: neilb; +Cc: linux-raid, dledford, kay, harald, lpoetter, mschmidt

From: Jes Sorensen <Jes.Sorensen@redhat.com>

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.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 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.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/4] Add --offroot argument to mdadm
  2012-01-25 15:18 [PATCH v3 0/4] add --offroot argument to mdadm/mdmon Jes.Sorensen
  2012-01-25 15:18 ` [PATCH 1/4] mdmon: Use getopt_long() to parse command line options Jes.Sorensen
@ 2012-01-25 15:18 ` Jes.Sorensen
  2012-01-25 15:18 ` [PATCH 3/4] Add --offroot argument to mdmon Jes.Sorensen
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Jes.Sorensen @ 2012-01-25 15:18 UTC (permalink / raw)
  To: neilb; +Cc: linux-raid, dledford, kay, harald, lpoetter, mschmidt

From: Jes Sorensen <Jes.Sorensen@redhat.com>

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.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 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.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/4] Add --offroot argument to mdmon
  2012-01-25 15:18 [PATCH v3 0/4] add --offroot argument to mdadm/mdmon Jes.Sorensen
  2012-01-25 15:18 ` [PATCH 1/4] mdmon: Use getopt_long() to parse command line options Jes.Sorensen
  2012-01-25 15:18 ` [PATCH 2/4] Add --offroot argument to mdadm Jes.Sorensen
@ 2012-01-25 15:18 ` Jes.Sorensen
  2012-01-25 15:18 ` [PATCH 4/4] Spawn mdmon with --offroot if mdadm was launched with --offroot Jes.Sorensen
  2012-01-25 16:02 ` [PATCH v3 0/4] add --offroot argument to mdadm/mdmon Doug Ledford
  4 siblings, 0 replies; 8+ messages in thread
From: Jes.Sorensen @ 2012-01-25 15:18 UTC (permalink / raw)
  To: neilb; +Cc: linux-raid, dledford, kay, harald, lpoetter, mschmidt

From: Jes Sorensen <Jes.Sorensen@redhat.com>

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 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.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/4] Spawn mdmon with --offroot if mdadm was launched with --offroot
  2012-01-25 15:18 [PATCH v3 0/4] add --offroot argument to mdadm/mdmon Jes.Sorensen
                   ` (2 preceding siblings ...)
  2012-01-25 15:18 ` [PATCH 3/4] Add --offroot argument to mdmon Jes.Sorensen
@ 2012-01-25 15:18 ` Jes.Sorensen
  2012-01-30  1:10   ` NeilBrown
  2012-01-25 16:02 ` [PATCH v3 0/4] add --offroot argument to mdadm/mdmon Doug Ledford
  4 siblings, 1 reply; 8+ messages in thread
From: Jes.Sorensen @ 2012-01-25 15:18 UTC (permalink / raw)
  To: neilb; +Cc: linux-raid, dledford, kay, harald, lpoetter, mschmidt

From: Jes Sorensen <Jes.Sorensen@redhat.com>

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 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.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v3 0/4] add --offroot argument to mdadm/mdmon
  2012-01-25 15:18 [PATCH v3 0/4] add --offroot argument to mdadm/mdmon Jes.Sorensen
                   ` (3 preceding siblings ...)
  2012-01-25 15:18 ` [PATCH 4/4] Spawn mdmon with --offroot if mdadm was launched with --offroot Jes.Sorensen
@ 2012-01-25 16:02 ` Doug Ledford
  4 siblings, 0 replies; 8+ messages in thread
From: Doug Ledford @ 2012-01-25 16:02 UTC (permalink / raw)
  To: Jes.Sorensen; +Cc: neilb, linux-raid, kay, harald, lpoetter, mschmidt

[-- Attachment #1: Type: text/plain, Size: 1207 bytes --]

On 1/25/2012 10:18 AM, Jes.Sorensen@redhat.com wrote:
> From: Jes Sorensen <Jes.Sorensen@redhat.com>
> 
> Hi,
> 
> Here is v3, also known as the perfect<tm> version of the of the
> systemd/dracut fixes for preboot/offroot/initrd handling in
> mdadm/mdmon. I have changed the argument now to --offroot based on the
> input I received. 
> 
> Cheers,
> Jes
> 
> 
> Jes Sorensen (4):
>   mdmon: Use getopt_long() to parse command line options
>   Add --offroot argument to mdadm
>   Add --offroot argument to mdmon
>   Spawn mdmon with --offroot if mdadm was launched with --offroot
> 
>  ReadMe.c   |    5 +++++
>  mdadm.8.in |   12 ++++++++++++
>  mdadm.c    |   10 ++++++++++
>  mdadm.h    |    3 +++
>  mdmon.8    |   12 +++++++++++-
>  mdmon.c    |   59 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
>  util.c     |   17 +++++++++++++----
>  7 files changed, 102 insertions(+), 16 deletions(-)
> 

Acked-by: Doug Ledford <dledford@redhat.com>


-- 
Doug Ledford <dledford@redhat.com>
              GPG KeyID: 0E572FDD
	      http://people.redhat.com/dledford

Infiniband specific RPMs available at
	      http://people.redhat.com/dledford/Infiniband


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 898 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 4/4] Spawn mdmon with --offroot if mdadm was launched with --offroot
  2012-01-25 15:18 ` [PATCH 4/4] Spawn mdmon with --offroot if mdadm was launched with --offroot Jes.Sorensen
@ 2012-01-30  1:10   ` NeilBrown
  2012-01-30  9:06     ` Jes Sorensen
  0 siblings, 1 reply; 8+ messages in thread
From: NeilBrown @ 2012-01-30  1:10 UTC (permalink / raw)
  To: Jes.Sorensen; +Cc: linux-raid, dledford, kay, harald, lpoetter, mschmidt

[-- Attachment #1: Type: text/plain, Size: 2047 bytes --]

On Wed, 25 Jan 2012 16:18:04 +0100 Jes.Sorensen@redhat.com wrote:

> From: Jes Sorensen <Jes.Sorensen@redhat.com>
> 
> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
> ---
>  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);

I just occurred to me that this could be:

    execl(paths[i], "@mdmon", devnum2devname(devnum));

which seems simpler... but I'll leave it as it is.

All applied - thanks.

NeilBrown


> +				} else {
> +					execl(paths[i], "mdmon",
> +					      devnum2devname(devnum),
> +					      NULL);
> +				}
> +			}
>  		exit(1);
>  	case -1: fprintf(stderr, Name ": cannot run mdmon. "
>  			 "Array remains readonly\n");


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 828 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 4/4] Spawn mdmon with --offroot if mdadm was launched with --offroot
  2012-01-30  1:10   ` NeilBrown
@ 2012-01-30  9:06     ` Jes Sorensen
  0 siblings, 0 replies; 8+ messages in thread
From: Jes Sorensen @ 2012-01-30  9:06 UTC (permalink / raw)
  To: NeilBrown; +Cc: linux-raid, dledford, kay, harald, lpoetter, mschmidt

On 01/30/12 02:10, NeilBrown wrote:
>> @@ -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);
> I just occurred to me that this could be:
> 
>     execl(paths[i], "@mdmon", devnum2devname(devnum));
> 
> which seems simpler... but I'll leave it as it is.

Hadn't thought of that :)

> All applied - thanks.

Excellent, will you be able to push it out today? As soon as I see it in
your git repo, I will push it into Fedora rawhide so we can get it tested.

Cheers,
Jes


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2012-01-30  9:06 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-01-25 15:18 [PATCH v3 0/4] add --offroot argument to mdadm/mdmon Jes.Sorensen
2012-01-25 15:18 ` [PATCH 1/4] mdmon: Use getopt_long() to parse command line options Jes.Sorensen
2012-01-25 15:18 ` [PATCH 2/4] Add --offroot argument to mdadm Jes.Sorensen
2012-01-25 15:18 ` [PATCH 3/4] Add --offroot argument to mdmon Jes.Sorensen
2012-01-25 15:18 ` [PATCH 4/4] Spawn mdmon with --offroot if mdadm was launched with --offroot Jes.Sorensen
2012-01-30  1:10   ` NeilBrown
2012-01-30  9:06     ` Jes Sorensen
2012-01-25 16:02 ` [PATCH v3 0/4] add --offroot argument to mdadm/mdmon Doug Ledford

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.