wok-current diff busybox/stuff/busybox-1.12.0-ionice.u @ rev 5657

Up: libogg (1.2.0)
author Alexander Medvedev <devl547@gmail.com>
date Sun May 30 02:45:16 2010 +0000 (2010-05-30)
parents
children
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/busybox/stuff/busybox-1.12.0-ionice.u	Sun May 30 02:45:16 2010 +0000
     1.3 @@ -0,0 +1,163 @@
     1.4 +--- busybox-1.12.0/include/applets.h	2008-12-16 22:32:03.000000000 +0100
     1.5 ++++ busybox-1.12.0/include/applets.h	2008-12-16 22:34:06.000000000 +0100
     1.6 +@@ -191,6 +191,7 @@
     1.7 + USE_INSMOD(APPLET(insmod, _BB_DIR_SBIN, _BB_SUID_NEVER))
     1.8 + USE_MODPROBE_SMALL(APPLET_ODDNAME(insmod, modprobe, _BB_DIR_SBIN, _BB_SUID_NEVER, modprobe))
     1.9 + USE_INSTALL(APPLET(install, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
    1.10 ++USE_IONICE(APPLET(ionice, _BB_DIR_BIN, _BB_SUID_NEVER))
    1.11 + #if ENABLE_FEATURE_IP_ADDRESS \
    1.12 +  || ENABLE_FEATURE_IP_ROUTE \
    1.13 +  || ENABLE_FEATURE_IP_LINK \
    1.14 +
    1.15 +
    1.16 +--- busybox-1.12.0/miscutils/Config.in	2008-12-14 23:41:16.000000000 +0100
    1.17 ++++ busybox-1.12.0/miscutils/Config.in	2008-12-14 23:27:56.000000000 +0100
    1.18 +@@ -223,6 +223,13 @@
    1.19 + 	    "NN" (ASCII decimal number) - percentage to show on progress bar
    1.20 + 	    "exit" - well you guessed it
    1.21 + 
    1.22 ++config IONICE
    1.23 ++	bool "ionice"
    1.24 ++	default n
    1.25 ++	help
    1.26 ++	  get/set program io scheduling class and priority
    1.27 ++	  Requires kernel >= 2.6.13
    1.28 ++
    1.29 + config INOTIFYD
    1.30 + 	bool "inotifyd"
    1.31 + 	default n
    1.32 +
    1.33 +--- busybox-1.12.0/miscutils/Kbuild	2008-12-14 23:22:52.000000000 +0100
    1.34 ++++ busybox-1.12.0/miscutils/Kbuild	2008-12-14 23:22:27.000000000 +0100
    1.35 +@@ -16,4 +16,5 @@
    1.36 + lib-$(CONFIG_EJECT)       += eject.o
    1.37 + lib-$(CONFIG_FBSPLASH)    += fbsplash.o
    1.38 ++lib-$(CONFIG_IONICE)      += ionice.o
    1.39 + lib-$(CONFIG_HDPARM)      += hdparm.o
    1.40 + lib-$(CONFIG_INOTIFYD)    += inotifyd.o
    1.41 +
    1.42 +--- busybox-1.12.0/include/usage.h	2008-12-16 22:31:43.000000000 +0100
    1.43 ++++ busybox-1.12.0/include/usage.h	2008-12-16 22:32:14.000000000 +0100
    1.44 +@@ -1884,6 +1884,16 @@
    1.45 + 	USE_SELINUX( \
    1.46 +      "\n	-Z	Set security context of copy" \
    1.47 + 	)
    1.48 ++	
    1.49 ++#define ionice_trivial_usage \
    1.50 ++	"[-c 1-3] [-n 0-7] [-p PID] [COMMAND [ARG...]]"
    1.51 ++#define ionice_full_usage "\n\n" \
    1.52 ++       "change io scheduling class and priority\n" \
    1.53 ++     "\nOptions:" \
    1.54 ++     "\n	-c  scheduling class. 1=real time 2=best-effort, 3=idle" \
    1.55 ++     "\n	-n  Priority " \
    1.56 ++     "\n	-p   process pid " 
    1.57 ++
    1.58 + 
    1.59 + /* would need to make the " | " optional depending on more than one selected: */
    1.60 + #define ip_trivial_usage \
    1.61 +
    1.62 +diff --git busybox-1.12.0/miscutils/ionice.c busybox-1.12.0/miscutils/ionice.c
    1.63 +new file mode 100644
    1.64 +index 0000000..88d771c
    1.65 +--- busybox-1.12.0/dev/null
    1.66 ++++ busybox-1.12.0/miscutils/ionice.c
    1.67 +@@ -0,0 +1,99 @@
    1.68 ++/* vi: set sw=4 ts=4: */
    1.69 ++/*
    1.70 ++ * ionice implementation for busybox based on linux-utils-ng 2.14
    1.71 ++ *
    1.72 ++ * Copyright (C) 2008 by <u173034@informatik.uni-oldenburg.de>
    1.73 ++ *
    1.74 ++ * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
    1.75 ++ */
    1.76 ++
    1.77 ++#include <sys/syscall.h>
    1.78 ++#include <asm/unistd.h>
    1.79 ++#include "libbb.h"
    1.80 ++
    1.81 ++static int ioprio_set(int which, int who, int ioprio)
    1.82 ++{
    1.83 ++ return syscall(SYS_ioprio_set, which, who, ioprio);
    1.84 ++}
    1.85 ++
    1.86 ++static int ioprio_get(int which, int who)
    1.87 ++{
    1.88 ++ return syscall(SYS_ioprio_get, which, who);
    1.89 ++}
    1.90 ++
    1.91 ++enum {
    1.92 ++ IOPRIO_WHO_PROCESS = 1,
    1.93 ++ IOPRIO_WHO_PGRP,
    1.94 ++ IOPRIO_WHO_USER
    1.95 ++};
    1.96 ++
    1.97 ++enum {
    1.98 ++ IOPRIO_CLASS_NONE,
    1.99 ++ IOPRIO_CLASS_RT,
   1.100 ++ IOPRIO_CLASS_BE,
   1.101 ++ IOPRIO_CLASS_IDLE
   1.102 ++};
   1.103 ++
   1.104 ++static const char to_prio[] = "none\0realtime\0best-effort\0idle";
   1.105 ++
   1.106 ++#define IOPRIO_CLASS_SHIFT 13
   1.107 ++
   1.108 ++int ionice_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
   1.109 ++int ionice_main(int argc UNUSED_PARAM, char **argv)
   1.110 ++{
   1.111 ++ /* Defaults */
   1.112 ++ int ioclass = 0;
   1.113 ++ int pri = 0;
   1.114 ++ int pid = 0; /* affect own porcess */
   1.115 ++ int opt;
   1.116 ++ enum {
   1.117 ++ OPT_n = 1,
   1.118 ++ OPT_c = 2,
   1.119 ++ OPT_p = 4,
   1.120 ++ };
   1.121 ++
   1.122 ++ /* Numeric params */
   1.123 ++ opt_complementary = "n+:c+:p+";
   1.124 ++ /* '+': stop at first non-option */
   1.125 ++ opt = getopt32(argv, "+n:c:p:", &pri, &ioclass, &pid);
   1.126 ++ argv += optind;
   1.127 ++
   1.128 ++ if (opt & OPT_c) {
   1.129 ++ if (ioclass > 3)
   1.130 ++ bb_error_msg_and_die("bad class %d", ioclass);
   1.131 ++// Do we need this (compat?)?
   1.132 ++// if (ioclass == IOPRIO_CLASS_NONE)
   1.133 ++// ioclass = IOPRIO_CLASS_BE;
   1.134 ++// if (ioclass == IOPRIO_CLASS_IDLE) {
   1.135 ++// //if (opt & OPT_n)
   1.136 ++// // bb_error_msg("ignoring priority for idle class");
   1.137 ++// pri = 7;
   1.138 ++// }
   1.139 ++ }
   1.140 ++
   1.141 ++ if (!(opt & (OPT_n|OPT_c))) {
   1.142 ++ if (!(opt & OPT_p) && *argv)
   1.143 ++ pid = xatoi_u(*argv);
   1.144 ++
   1.145 ++ pri = ioprio_get(IOPRIO_WHO_PROCESS, pid);
   1.146 ++ if (pri == -1)
   1.147 ++ bb_perror_msg_and_die("ioprio_%cet", 'g');
   1.148 ++
   1.149 ++ ioclass = (pri >> IOPRIO_CLASS_SHIFT) & 0x3;
   1.150 ++ pri &= 0xff;
   1.151 ++ printf((ioclass == IOPRIO_CLASS_IDLE) ? "%s\n" : "%s: prio %d\n",
   1.152 ++ nth_string(to_prio, ioclass), pri);
   1.153 ++ } else {
   1.154 ++//printf("pri=%d class=%d val=%x\n",
   1.155 ++//pri, ioclass, pri | (ioclass << IOPRIO_CLASS_SHIFT));
   1.156 ++ pri |= (ioclass << IOPRIO_CLASS_SHIFT);
   1.157 ++ if (ioprio_set(IOPRIO_WHO_PROCESS, pid, pri) == -1)
   1.158 ++ bb_perror_msg_and_die("ioprio_%cet", 's');
   1.159 ++ if (*argv) {
   1.160 ++ BB_EXECVP(*argv, argv);
   1.161 ++ bb_simple_perror_msg_and_die(*argv);
   1.162 ++ }
   1.163 ++ }
   1.164 ++
   1.165 ++ return EXIT_SUCCESS;
   1.166 ++}