summaryrefslogtreecommitdiffstats
path: root/schedutils/ionice.c
diff options
context:
space:
mode:
authorLubomir Kundrak2008-04-28 13:15:26 +0200
committerKarel Zak2008-06-16 13:08:51 +0200
commit4d125dfc419b9e54dcec85c8a4e929de4d3a4b50 (patch)
treeee59095ca7640940ab388eb8f94ed4f9442fc210 /schedutils/ionice.c
parenthwclock: omit warning about drift if --noadjfile given (diff)
downloadkernel-qcow2-util-linux-4d125dfc419b9e54dcec85c8a4e929de4d3a4b50.tar.gz
kernel-qcow2-util-linux-4d125dfc419b9e54dcec85c8a4e929de4d3a4b50.tar.xz
kernel-qcow2-util-linux-4d125dfc419b9e54dcec85c8a4e929de4d3a4b50.zip
ionice: add -t option
This patch allows "tolerant" behavior, i.e. proceeding even if priority could not be set. This might be of use in case something (selinux, old kernel, etc.) does not allow the requested scheduling priority to be set. This could be to some extend done as follows: ionice -c3 command || command but the downside is that one could not really tell if what failed was setting priority or command itself, which could result in duplicate command run. This patch solves the situation, so that user can do ionice -t -c3 command Addresses-Red-Hat-Bugzilla: #443842 Signed-off-by: Lubomir Kundrak <lkundrak@redhat.com> Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'schedutils/ionice.c')
-rw-r--r--schedutils/ionice.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/schedutils/ionice.c b/schedutils/ionice.c
index 679014af4..f5c02db5e 100644
--- a/schedutils/ionice.c
+++ b/schedutils/ionice.c
@@ -50,16 +50,17 @@ static void usage(void)
printf("\t-c\tScheduling class\n");
printf("\t\t\t1: realtime, 2: best-effort, 3: idle\n");
printf("\t-p\tProcess pid\n");
+ printf("\t-t\tIgnore failures to set priority, run command unconditionally\n");
printf("\t-h\tThis help page\n");
printf("\nJens Axboe <axboe@suse.de> (C) 2005\n");
}
int main(int argc, char *argv[])
{
- int ioprio = 4, set = 0, ioprio_class = IOPRIO_CLASS_BE;
+ int ioprio = 4, set = 0, tolerant = 0, ioprio_class = IOPRIO_CLASS_BE;
int c, pid = 0;
- while ((c = getopt(argc, argv, "+n:c:p:h")) != EOF) {
+ while ((c = getopt(argc, argv, "+n:c:p:th")) != EOF) {
switch (c) {
case 'n':
ioprio = strtol(optarg, NULL, 10);
@@ -72,6 +73,9 @@ int main(int argc, char *argv[])
case 'p':
pid = strtol(optarg, NULL, 10);
break;
+ case 't':
+ tolerant = 1;
+ break;
case 'h':
default:
usage();
@@ -115,8 +119,10 @@ int main(int argc, char *argv[])
}
} else {
if (ioprio_set(IOPRIO_WHO_PROCESS, pid, ioprio | ioprio_class << IOPRIO_CLASS_SHIFT) == -1) {
- perror("ioprio_set");
- exit(EXIT_FAILURE);
+ if (!tolerant) {
+ perror("ioprio_set");
+ exit(EXIT_FAILURE);
+ }
}
if (argv[optind]) {