aboutsummaryrefslogtreecommitdiff
path: root/toys/other/ionice.c
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2015-07-08 02:32:57 -0500
committerRob Landley <rob@landley.net>2015-07-08 02:32:57 -0500
commit29b0a2e823e2b451e793b9cd891107d4daec3864 (patch)
treed84e74236ed1194c7274d2e4d447074b71213cfd /toys/other/ionice.c
parent3487bd353b4448bbdc9ece6d62fc4c4f4fd6ae4a (diff)
downloadtoybox-29b0a2e823e2b451e793b9cd891107d4daec3864.tar.gz
Fix ionice.
ioprio_set takes a "prio" argument that combines class and level. Although bionic (via the uapi headers) includes the appropriate constants and even a convenience macro, glibc doesn't, so just hard-code the encoding. Also fix the sense of a conditional so we actually execute the provided command.
Diffstat (limited to 'toys/other/ionice.c')
-rw-r--r--toys/other/ionice.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/toys/other/ionice.c b/toys/other/ionice.c
index 82f8fde6..e44270a8 100644
--- a/toys/other/ionice.c
+++ b/toys/other/ionice.c
@@ -52,7 +52,9 @@ static int ioprio_get(void)
static int ioprio_set(void)
{
- return syscall(__NR_ioprio_set, 1, (int)TT.pid, (int)TT.class, (int)TT.level);
+ int prio = ((int)TT.class << 13) | (int)TT.level;
+
+ return syscall(__NR_ioprio_set, 1, (int)TT.pid, prio);
}
void ionice_main(void)
@@ -65,7 +67,7 @@ void ionice_main(void)
p&7);
} else {
if (-1 == ioprio_set() && !(toys.optflags&FLAG_t)) perror_exit("set");
- if (TT.pid) xexec(toys.optargs);
+ if (!TT.pid) xexec(toys.optargs);
}
}