From 08ca2adffffeb3bfda3cafababfc26706a60463b Mon Sep 17 00:00:00 2001 From: Jes Sorensen 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 Signed-off-by: Jes Sorensen Signed-off-by: NeilBrown --- 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