aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Whitlock <gentoo@mattwhitlock.name>2021-07-31 17:13:21 -0400
committerMike Frysinger <vapier@gmail.com>2021-08-17 00:57:47 -0400
commit5f6d7ac028b4e3c208a74465c54f235d5bf34a93 (patch)
tree9c142c5534cdd1d8a56d6ae877a35683519054e4
parent7cedc4942b8e52d9bab6f4aa7bb595c53aa6fdb1 (diff)
supervise-daemon: implement SSD_IONICELEVEL
supervise-daemon was apparently overlooked when support for the SSD_IONICELEVEL environment variable was added. This commit brings supervise-daemon up to parity with start-stop-daemon with respect to this environment variable.
-rw-r--r--man/supervise-daemon.84
-rw-r--r--src/rc/supervise-daemon.c14
2 files changed, 17 insertions, 1 deletions
diff --git a/man/supervise-daemon.8 b/man/supervise-daemon.8
index 27c4d2da..4e2b87c3 100644
--- a/man/supervise-daemon.8
+++ b/man/supervise-daemon.8
@@ -156,6 +156,10 @@ The same thing as
but with the standard error output.
.El
.Sh ENVIRONMENT
+.Va SSD_IONICELEVEL
+can also set the IO scheduling priority of the daemon, but the command line
+option takes precedence.
+.Pp
.Va SSD_NICELEVEL
can also set the scheduling priority of the daemon, but the command line
option takes precedence.
diff --git a/src/rc/supervise-daemon.c b/src/rc/supervise-daemon.c
index fcd76c10..6e2b4331 100644
--- a/src/rc/supervise-daemon.c
+++ b/src/rc/supervise-daemon.c
@@ -423,7 +423,8 @@ static void child_process(char *exec, char **argv)
if ((strncmp(env->value, "RC_", 3) == 0 &&
strncmp(env->value, "RC_SERVICE=", 11) != 0 &&
strncmp(env->value, "RC_SVCNAME=", 11) != 0) ||
- strncmp(env->value, "SSD_NICELEVEL=", 14) == 0)
+ strncmp(env->value, "SSD_NICELEVEL=", 14) == 0 ||
+ strncmp(env->value, "SSD_IONICELEVEL=", 16) == 0)
{
p = strchr(env->value, '=');
*p = '\0';
@@ -733,6 +734,17 @@ int main(int argc, char **argv)
if (sscanf(tmp, "%d", &nicelevel) != 1)
eerror("%s: invalid nice level `%s' (SSD_NICELEVEL)",
applet, tmp);
+ if ((tmp = getenv("SSD_IONICELEVEL"))) {
+ int n = sscanf(tmp, "%d:%d", &ionicec, &ioniced);
+ if (n != 1 && n != 2)
+ eerror("%s: invalid ionice level `%s' (SSD_IONICELEVEL)",
+ applet, tmp);
+ if (ionicec == 0)
+ ioniced = 0;
+ else if (ionicec == 3)
+ ioniced = 7;
+ ionicec <<= 13; /* class shift */
+ }
/* Get our user name and initial dir */
p = getenv("USER");